{
  "noir_version": "1.0.0-beta.22+c57152f91260ecdb9faad4efc20abb14b6d2ece7",
  "hash": "12890011299335947873",
  "abi": {
    "parameters": [
      {
        "name": "a",
        "type": {
          "kind": "struct",
          "path": "mock_types::PreviousRollupData",
          "fields": [
            {
              "name": "base_or_merge_public_inputs",
              "type": {
                "kind": "struct",
                "path": "mock_types::RollupPublicInputs",
                "fields": [
                  {
                    "name": "accumulated",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 32
                    }
                  }
                ]
              }
            },
            {
              "name": "proof",
              "type": {
                "kind": "array",
                "length": 480,
                "type": {
                  "kind": "field"
                }
              }
            },
            {
              "name": "vk",
              "type": {
                "kind": "struct",
                "path": "types::proof::verification_key::VerificationKey",
                "fields": [
                  {
                    "name": "key",
                    "type": {
                      "kind": "array",
                      "length": 115,
                      "type": {
                        "kind": "field"
                      }
                    }
                  },
                  {
                    "name": "hash",
                    "type": {
                      "kind": "field"
                    }
                  }
                ]
              }
            }
          ]
        },
        "visibility": "private"
      },
      {
        "name": "b",
        "type": {
          "kind": "struct",
          "path": "mock_types::PreviousRollupData",
          "fields": [
            {
              "name": "base_or_merge_public_inputs",
              "type": {
                "kind": "struct",
                "path": "mock_types::RollupPublicInputs",
                "fields": [
                  {
                    "name": "accumulated",
                    "type": {
                      "kind": "integer",
                      "sign": "unsigned",
                      "width": 32
                    }
                  }
                ]
              }
            },
            {
              "name": "proof",
              "type": {
                "kind": "array",
                "length": 480,
                "type": {
                  "kind": "field"
                }
              }
            },
            {
              "name": "vk",
              "type": {
                "kind": "struct",
                "path": "types::proof::verification_key::VerificationKey",
                "fields": [
                  {
                    "name": "key",
                    "type": {
                      "kind": "array",
                      "length": 115,
                      "type": {
                        "kind": "field"
                      }
                    }
                  },
                  {
                    "name": "hash",
                    "type": {
                      "kind": "field"
                    }
                  }
                ]
              }
            }
          ]
        },
        "visibility": "private"
      }
    ],
    "return_type": {
      "abi_type": {
        "kind": "struct",
        "path": "mock_types::RollupPublicInputs",
        "fields": [
          {
            "name": "accumulated",
            "type": {
              "kind": "integer",
              "sign": "unsigned",
              "width": 32
            }
          }
        ]
      },
      "visibility": "public"
    },
    "error_types": {
      "14990209321349310352": {
        "error_kind": "string",
        "string": "attempt to add with overflow"
      }
    }
  },
  "bytecode": "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",
  "debug_symbols": "tZTbioMwEED/Jc8+ZCYXY39lWUpq0xIIUVJdWEr/faMYLw8RQfYpJuOcyeUwb3I3t/55tf7RvMjl601uwTpnn1fX1LqzjY+r709B0vTaBWPiElnFY1arg/EdufjeuYL8aNePP71a7cex0yFGaUGMv8cxAh/WmeHrUyzZNJ8KXEzJINicLmCTD/l8LhSbAFyiWAi4IeAOAQESActqJiDlGwTLI1jJE4IpoFkE30GgrBICFa4Q8jhCyBkhVRYh8whk6SlRrPdQHn4OyVS6zAqyz6F2TsFkMoJxvjoFHFZqBkCZV4qedgrgvFSA560Cdl6rfcYxr0CcFoueNgvKf1VLpZtAWmXVqva8kIsXVbk5xXec6dqGTYsmSC6Rx4baBeFD4YKIYfgMVYLVN2emXv7ofb1q7d1vmyKp+behqc29D2aoMcZi1T8=",
  "file_map": {
    "21": {
      "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod vector;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nmod primitive_docs;\nmod internal;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle<T>(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained<T>(with_newline: bool, input: T) {\n    print_oracle(with_newline, input);\n}\n\n/// Print the given input to stdout followed by a newline\npub fn println<T>(input: T) {\n    // Safety: a print statement cannot be constrained\n    unsafe {\n        print_unconstrained(true, input);\n    }\n}\n\n/// Print the given input to stdout\npub fn print<T>(input: T) {\n    // Safety: a print statement cannot be constrained\n    unsafe {\n        print_unconstrained(false, input);\n    }\n}\n\n/// Asserts the validity of the provided proof and public inputs against the provided verification key and hash.\n///\n/// The ACVM cannot determine whether the provided proof is valid during execution as this requires knowledge of\n/// the backend against which the program is being proven. However if an invalid proof if submitted, the program may\n/// fail to prove or the backend may generate a proof which will subsequently fail to verify.\n///\n/// # Important Note\n///\n/// If you are not developing your own backend such as [Barretenberg](https://github.com/AztecProtocol/barretenberg)\n/// you probably shouldn't need to interact with this function directly. It's easier and safer to use a verification\n/// library which is published by the developers of the backend which will document or enforce any safety requirements.\n///\n/// If you use this directly, you're liable to introduce underconstrainedness bugs and *your circuit will be insecure*.\n///\n/// # Arguments\n/// - verification_key: The verification key of the circuit to be verified.\n/// - proof: The proof to be verified.\n/// - public_inputs: The public inputs associated with `proof`\n/// - key_hash: The hash of `verification_key` of the form expected by the backend.\n/// - proof_type: An identifier for the proving scheme used to generate the proof to be verified. This allows\n///               for a single backend to support verifying multiple proving schemes.\n///\n/// # Constraining `key_hash`\n///\n/// The Noir compiler does not by itself constrain that `key_hash` is a valid hash of `verification_key`.\n/// This is because different backends may differ in how they hash their verification keys.\n/// It is then the responsibility of either the noir developer (by explicitly hashing the verification key\n/// in the correct manner) or by the proving system itself internally asserting the correctness of `key_hash`.\npub fn verify_proof_with_type<let N: u32, let M: u32, let K: u32>(\n    verification_key: [Field; N],\n    proof: [Field; M],\n    public_inputs: [Field; K],\n    key_hash: Field,\n    proof_type: u32,\n) {\n    if !crate::runtime::is_unconstrained() {\n        crate::assert_constant(proof_type);\n    }\n    verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal<let N: u32, let M: u32, let K: u32>(\n    verification_key: [Field; N],\n    proof: [Field; M],\n    public_inputs: [Field; K],\n    key_hash: Field,\n    proof_type: u32,\n) {}\n\n/// Asserts that the given value is known at compile-time.\n/// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant<T>(x: T) {}\n\n/// Asserts that the given value is both true and known at compile-time.\n/// The message can be a string, a format string, or any value, as long as it is known at compile-time\n#[builtin(static_assert)]\npub fn static_assert<T>(predicate: bool, message: T) {}\n\n/// Force a field value to be a witness instead of a constant in the compiled output.\n/// This is often only useful for debugging compiler optimizations.\n///\n/// This has no effect in unconstrained or comptime code.\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n",
      "path": "std/lib.nr",
      "function_locations": [
        {
          "start": 676,
          "name": "print_oracle"
        },
        {
          "start": 750,
          "name": "print_unconstrained"
        },
        {
          "start": 880,
          "name": "println"
        },
        {
          "start": 1063,
          "name": "print"
        },
        {
          "start": 3264,
          "name": "verify_proof_with_type"
        },
        {
          "start": 3681,
          "name": "verify_proof_internal"
        },
        {
          "start": 3846,
          "name": "assert_constant"
        },
        {
          "start": 4105,
          "name": "static_assert"
        },
        {
          "start": 4376,
          "name": "as_witness"
        }
      ]
    },
    "51": {
      "source": "use mock_types::{PreviousRollupData, RollupPublicInputs};\n\nfn main(a: PreviousRollupData, b: PreviousRollupData) -> pub RollupPublicInputs {\n    a.verify(true);\n    b.verify(true);\n\n    a.public_inputs().merge(b.public_inputs())\n}\n",
      "path": "/home/aztec-dev/aztec-packages-private/noir-projects/mock-protocol-circuits/crates/mock-rollup-root/src/main.nr",
      "function_locations": [
        {
          "start": 139,
          "name": "main"
        }
      ]
    },
    "52": {
      "source": "pub global MAX_COMMITMENTS_PER_CALL: u32 = 2;\npub global MAX_COMMITMENTS_PER_TX: u32 = 4;\npub global MAX_COMMITMENT_READ_REQUESTS_PER_CALL: u32 = 2;\npub global MAX_COMMITMENT_READ_REQUESTS_PER_TX: u32 = 4;\n\npub use protocol_types::{\n    abis::avm_circuit_public_inputs::AvmCircuitPublicInputs,\n    constants::{\n        AVM_V2_PROOF_LENGTH_IN_FIELDS, CHONK_PROOF_LENGTH, CHONK_VK_LENGTH_IN_FIELDS,\n        MEGA_VK_LENGTH_IN_FIELDS, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, PROOF_TYPE_AVM,\n        PROOF_TYPE_CHONK, PROOF_TYPE_HN, PROOF_TYPE_HN_FINAL, PROOF_TYPE_HN_TAIL, PROOF_TYPE_OINK,\n        PROOF_TYPE_ROLLUP_HONK, PROOF_TYPE_ROOT_ROLLUP_HONK,\n    },\n    proof::{\n        traits::SerializeToColumns,\n        verification_key::{RollupHonkVerificationKey, VerificationKey},\n    },\n    traits::Serialize,\n};\n\npub struct TxRequest {\n    pub number_of_calls: u32,\n}\n\npub struct AppPublicInputs {\n    pub commitments: [Field; MAX_COMMITMENTS_PER_CALL],\n    pub read_requests: [Field; MAX_COMMITMENT_READ_REQUESTS_PER_CALL],\n}\n\nimpl Default for AppPublicInputs {\n    fn default() -> Self {\n        Self {\n            commitments: [0; MAX_COMMITMENTS_PER_CALL],\n            read_requests: [0; MAX_COMMITMENT_READ_REQUESTS_PER_CALL],\n        }\n    }\n}\n\npub struct PrivateKernelPublicInputs {\n    pub remaining_calls: u32,\n    pub commitments: [Field; MAX_COMMITMENTS_PER_TX],\n    pub read_requests: [Field; MAX_COMMITMENT_READ_REQUESTS_PER_TX],\n}\n\nimpl Default for PrivateKernelPublicInputs {\n    fn default() -> Self {\n        Self {\n            remaining_calls: 0,\n            commitments: [0; MAX_COMMITMENTS_PER_TX],\n            read_requests: [0; MAX_COMMITMENT_READ_REQUESTS_PER_TX],\n        }\n    }\n}\n\npub struct PrivateKernelPublicInputsBuilder {\n    pub remaining_calls: u32,\n    pub commitments: BoundedVec<Field, MAX_COMMITMENTS_PER_TX>,\n    pub read_requests: BoundedVec<Field, MAX_COMMITMENT_READ_REQUESTS_PER_TX>,\n}\n\nimpl PrivateKernelPublicInputsBuilder {\n    pub fn from_tx(tx: TxRequest) -> Self {\n        Self {\n            remaining_calls: tx.number_of_calls,\n            commitments: BoundedVec::new(),\n            read_requests: BoundedVec::new(),\n        }\n    }\n\n    pub fn from_previous_kernel(prev_kernel_public_inputs: PrivateKernelPublicInputs) -> Self {\n        let mut builder = PrivateKernelPublicInputsBuilder {\n            remaining_calls: prev_kernel_public_inputs.remaining_calls,\n            commitments: BoundedVec::new(),\n            read_requests: BoundedVec::new(),\n        };\n        for i in 0..MAX_COMMITMENTS_PER_TX {\n            if prev_kernel_public_inputs.commitments[i] != 0 {\n                builder.commitments.push(prev_kernel_public_inputs.commitments[i]);\n            }\n        }\n        for i in 0..MAX_COMMITMENT_READ_REQUESTS_PER_TX {\n            if prev_kernel_public_inputs.read_requests[i] != 0 {\n                builder.read_requests.push(prev_kernel_public_inputs.read_requests[i]);\n            }\n        }\n        builder\n    }\n\n    pub fn ingest_app_inputs(&mut self, app_inputs: AppPublicInputs) {\n        for i in 0..MAX_COMMITMENTS_PER_CALL {\n            if app_inputs.commitments[i] != 0 {\n                self.commitments.push(app_inputs.commitments[i]);\n            }\n        }\n\n        for i in 0..MAX_COMMITMENT_READ_REQUESTS_PER_CALL {\n            if app_inputs.read_requests[i] != 0 {\n                self.read_requests.push(app_inputs.read_requests[i]);\n            }\n        }\n\n        self.remaining_calls -= 1;\n    }\n\n    pub fn finish(self) -> PrivateKernelPublicInputs {\n        PrivateKernelPublicInputs {\n            remaining_calls: self.remaining_calls,\n            commitments: self.commitments.storage(),\n            read_requests: self.read_requests.storage(),\n        }\n    }\n}\n\n#[derive(Serialize)]\npub struct KernelPublicInputs {\n    pub commitments: [Field; MAX_COMMITMENTS_PER_TX],\n}\n\nimpl Default for KernelPublicInputs {\n    fn default() -> Self {\n        Self { commitments: [0; MAX_COMMITMENTS_PER_TX] }\n    }\n}\n\n#[derive(Serialize)]\npub struct RollupPublicInputs {\n    accumulated: u32,\n}\n\nimpl RollupPublicInputs {\n    pub fn new(accumulated: u32) -> Self {\n        Self { accumulated }\n    }\n\n    pub fn merge(self, other: Self) -> Self {\n        Self { accumulated: self.accumulated + other.accumulated }\n    }\n}\n\npub struct PreviousRollupData {\n    base_or_merge_public_inputs: RollupPublicInputs,\n    proof: [Field; NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH],\n    vk: RollupHonkVerificationKey,\n}\n\nimpl PreviousRollupData {\n    pub fn verify(self, is_root: bool) {\n        let inputs = self.base_or_merge_public_inputs.serialize();\n\n        std::verify_proof_with_type(\n            self.vk.key,\n            self.proof,\n            inputs,\n            self.vk.hash,\n            if is_root {\n                PROOF_TYPE_ROOT_ROLLUP_HONK\n            } else {\n                PROOF_TYPE_ROLLUP_HONK\n            },\n        );\n    }\n\n    pub fn public_inputs(self) -> RollupPublicInputs {\n        self.base_or_merge_public_inputs\n    }\n}\n\n// CHONK: \"Client Honk\" - An UltraHonk variant with incremental folding and delayed non-native arithmetic.\npub struct ChonkProofData {\n    pub public_inputs: KernelPublicInputs,\n    pub proof: [Field; CHONK_PROOF_LENGTH],\n    pub vk_data: VerificationKey<CHONK_VK_LENGTH_IN_FIELDS>,\n}\n\nimpl ChonkProofData {\n    pub fn verify(self) {\n        let inputs = KernelPublicInputs::serialize(self.public_inputs);\n        std::verify_proof_with_type(\n            self.vk_data.key,\n            self.proof,\n            inputs,\n            self.vk_data.hash,\n            PROOF_TYPE_CHONK,\n        );\n    }\n}\n",
      "path": "/home/aztec-dev/aztec-packages-private/noir-projects/mock-protocol-circuits/crates/mock-types/src/lib.nr",
      "function_locations": [
        {
          "start": 1087,
          "name": "<impl Default for AppPublicInputs>::default"
        },
        {
          "start": 1515,
          "name": "<impl Default for PrivateKernelPublicInputs>::default"
        },
        {
          "start": 2010,
          "name": "PrivateKernelPublicInputsBuilder::from_tx"
        },
        {
          "start": 2277,
          "name": "PrivateKernelPublicInputsBuilder::from_previous_kernel"
        },
        {
          "start": 3056,
          "name": "PrivateKernelPublicInputsBuilder::ingest_app_inputs"
        },
        {
          "start": 3544,
          "name": "PrivateKernelPublicInputsBuilder::finish"
        },
        {
          "start": 3935,
          "name": "<impl Default for KernelPublicInputs>::default"
        },
        {
          "start": 4149,
          "name": "RollupPublicInputs::new"
        },
        {
          "start": 4231,
          "name": "RollupPublicInputs::merge"
        },
        {
          "start": 4560,
          "name": "PreviousRollupData::verify"
        },
        {
          "start": 4977,
          "name": "PreviousRollupData::public_inputs"
        },
        {
          "start": 5361,
          "name": "ChonkProofData::verify"
        }
      ]
    }
  },
  "verificationKey": {
    "bytes": "0000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000050a3fa93f97d2f05e14c53a68e55ee16f71cd446f6c14cdb98c0f466f3202bb310120891dcd60a3b560493736fe9ef73a6b962bc2c4ebf891cf23dfe4aba1b73f16d7fd93ec25d47d71c02bcac8219f676bc843985b14d0ac367969c8ddfdbd560b71cd63fad04e4c6ed178b9d1b8c0f2a4965b2101658b087cb31ccb3ea3ded6109f76c8406a85a19d157e5db90e33d2e2bd7fecff9652dc032fcc71eed5a5b80cadde9e700b2a028556a164a38784b81f985ed411c00318458b78f61129557811dd533e343cee02661dd36a62f8b6eb95c06674d9a4e14224d78697bf9671d10ffc851c7ae65e45ef715f1368bf02bbfcaa0ebf7d84eaa98b791bd9f367660e0bc7b5426730abdefbcc43758ad58074e3b35c8f17570a3e7b36018532c10b1b170fb559715a450662ee666b6f5c5eb575ef7ea96c12c5da13c186eb9531aab4272829bf7dcd66ce035f3d1cd8e0609e39d17102f7874add698cf230b7a14fb825e529b45424c2f6d400fa40a2f4410a77029fd72141c68b14815ddb082e04d73015958b4c9eb9165e32377103715d2d890df7259de80f600cd81a55db5a3447300a0227780cfd6928de98302c95e1b2aabde37ac4537256e6dc67b2a5b13d3406b07c5d4a8194e7c04f1e13859fa4eb615d58ca393d4ac82ddf8e2321c9ca4c07b94fc59794171d6e49b2ff99215cbf74997e4d2bb83d03f0d65131c1873dd42a56ce41f6b0be13b9c26747621b821eee81b23a887f299049b14c11e98460d61aa98f2de3ddda547d8f6de4e725ded5827d6338c78656c0d12ca1aea6ef2c7c0c24e60d84099e9082e40565845a3000ff5569863e6dba732d04a727397a650e0e459462ded81435c6299c69ff409de183633dc4adfba31d83d25a87672c86b41c0cfe6ede8bc5008e77dc50170c034d9bb0db100d780651baa56ae5e41bc21a2faffdb1f4a3286451b0188b2eea1912bfeab8d50bee0f054bf360e765d65c8416443a277592bfa02dad5494d8eb9787d52526911b9f8235d8bdcb10c682047017c5d9cf0ea21684ca1d3f322bb9ae15ef1f520bf5a8ebc3def2cd7ededbe2df13d3fb39c513d2f0262a4b6fb623b4233b47dec56c504f9cc3cbe08ea93542901d09013479288e1ec0d43ac4bdbc38221620247eeea24df2e0f03d8458006cbe210f0c8996bd1c5d47807bdcc570158bfa246e7eba5c4fe2c438c56165cc724e10ca3c505536d09fc7245489816db24301742a8917eb50f4071218016db04b1c00c0d89efb87227119619ed0201ecfbf9ec361b963c09c860929a7ea0d177fcc1af7899ecd2402e40876edff724f3b17a1e8123ea8e45b1059d1092b56366b162cc07e9899405eb46199b948e64b0490b319ba4aea19609261c5f2529602471020ded4644132720bc347bf2a93431404e5dba03efd4a0452747f0ea5bae963de24fb21770364692650bcfab3fa5c3f6e2e95fbb99fda9b627447d6a8446a3e7428567fa40846692ea5cdbfb29a90bd9a3fae3ff4124d3f5b7a6e20b6b93bfe8404f2eccb696c34ee35974bc4a727a9c54a3631b00175d35099d9d1780991d01a1c0c557f55848daebe1a8077581afd8f65ecf0055fb81a26c7815216e8183ce40bfc84b66a7e04961f0d224b2b0099cbeab86e223599c366a56493d899033e02261d3758a568c7141fceb0ed57c0934ac7513abd885de0963740adc621f4d8ec266f8f950e7cc410bddd9930f8c3a00c133f92ee4df2216a177b5d75a020798b1f43f2cf241bcf4c3c7ede25dd81852405b16f29affa5f7359bf9b78e8a9223a06ef4ad658e63c4871a4c738054600f22d3f534b312111bd87caa22649e48a5e0f865f9980e1ea167c71fd8adc38a071faf88d18013eb8e386f3667fefdfb07f18235c35733e49a4ee735b218efffc17fc425bc2f46a4f434b46b5d10ce6cd8a12c9176e45dd23d50e0afcfb7399e1cd284b06457e90b5b682829befd288bb5e0bbb6c919c20f3749cc50dce1d6054448298e3cefbc86ca9e2968a478b6223b81684320ba7d58a9d4dcfa4b4430fe139a92b0c657808b6bcc3bafb690113eecf18bb397835907475b80ff0d82cefb433969ce793e3d698f41c1d5cb4631ba7d41967fef15d40001376dffd21194d25634d05913ed905da13a400bb7e8ef8943c02a03924d162621287fc6df3b1ed5fc4a0a913cb274678014eab07799bf3526a2cc5db39274389c6b13e7ccc9ec1b0678740336f2e510bb403eb6239e1b2340a119b829e11973fc49cb9097048d8e23653527328ab2afbd1557f8ce99141d7890831367eef1d6379b5197fc810dc4f1f2235d18a5800703231d4e70eccd91d2a03db6e9358b18e4dcda1cd8accf6a003506db494aa61d6aa41084979640f227c1580f0a78734e5ec860f22770606b1175552d7f9e4aa88d7016ee5511c0b71820fa2b4c712b39d006ea698d7c251d25f21ea14606deab6327e53f244b1fc1d672e231bb9625faab409fab282e15798931b67cbbedd1f52a27a15c36ee9b76ce6",
    "fields": [
      "0x0000000000000000000000000000000000000000000000000000000000000017",
      "0x0000000000000000000000000000000000000000000000000000000000000009",
      "0x0000000000000000000000000000000000000000000000000000000000000005",
      "0x0a3fa93f97d2f05e14c53a68e55ee16f71cd446f6c14cdb98c0f466f3202bb31",
      "0x0120891dcd60a3b560493736fe9ef73a6b962bc2c4ebf891cf23dfe4aba1b73f",
      "0x16d7fd93ec25d47d71c02bcac8219f676bc843985b14d0ac367969c8ddfdbd56",
      "0x0b71cd63fad04e4c6ed178b9d1b8c0f2a4965b2101658b087cb31ccb3ea3ded6",
      "0x109f76c8406a85a19d157e5db90e33d2e2bd7fecff9652dc032fcc71eed5a5b8",
      "0x0cadde9e700b2a028556a164a38784b81f985ed411c00318458b78f611295578",
      "0x11dd533e343cee02661dd36a62f8b6eb95c06674d9a4e14224d78697bf9671d1",
      "0x0ffc851c7ae65e45ef715f1368bf02bbfcaa0ebf7d84eaa98b791bd9f367660e",
      "0x0bc7b5426730abdefbcc43758ad58074e3b35c8f17570a3e7b36018532c10b1b",
      "0x170fb559715a450662ee666b6f5c5eb575ef7ea96c12c5da13c186eb9531aab4",
      "0x272829bf7dcd66ce035f3d1cd8e0609e39d17102f7874add698cf230b7a14fb8",
      "0x25e529b45424c2f6d400fa40a2f4410a77029fd72141c68b14815ddb082e04d7",
      "0x3015958b4c9eb9165e32377103715d2d890df7259de80f600cd81a55db5a3447",
      "0x300a0227780cfd6928de98302c95e1b2aabde37ac4537256e6dc67b2a5b13d34",
      "0x06b07c5d4a8194e7c04f1e13859fa4eb615d58ca393d4ac82ddf8e2321c9ca4c",
      "0x07b94fc59794171d6e49b2ff99215cbf74997e4d2bb83d03f0d65131c1873dd4",
      "0x2a56ce41f6b0be13b9c26747621b821eee81b23a887f299049b14c11e98460d6",
      "0x1aa98f2de3ddda547d8f6de4e725ded5827d6338c78656c0d12ca1aea6ef2c7c",
      "0x0c24e60d84099e9082e40565845a3000ff5569863e6dba732d04a727397a650e",
      "0x0e459462ded81435c6299c69ff409de183633dc4adfba31d83d25a87672c86b4",
      "0x1c0cfe6ede8bc5008e77dc50170c034d9bb0db100d780651baa56ae5e41bc21a",
      "0x2faffdb1f4a3286451b0188b2eea1912bfeab8d50bee0f054bf360e765d65c84",
      "0x16443a277592bfa02dad5494d8eb9787d52526911b9f8235d8bdcb10c6820470",
      "0x17c5d9cf0ea21684ca1d3f322bb9ae15ef1f520bf5a8ebc3def2cd7ededbe2df",
      "0x13d3fb39c513d2f0262a4b6fb623b4233b47dec56c504f9cc3cbe08ea9354290",
      "0x1d09013479288e1ec0d43ac4bdbc38221620247eeea24df2e0f03d8458006cbe",
      "0x210f0c8996bd1c5d47807bdcc570158bfa246e7eba5c4fe2c438c56165cc724e",
      "0x10ca3c505536d09fc7245489816db24301742a8917eb50f4071218016db04b1c",
      "0x00c0d89efb87227119619ed0201ecfbf9ec361b963c09c860929a7ea0d177fcc",
      "0x1af7899ecd2402e40876edff724f3b17a1e8123ea8e45b1059d1092b56366b16",
      "0x2cc07e9899405eb46199b948e64b0490b319ba4aea19609261c5f25296024710",
      "0x20ded4644132720bc347bf2a93431404e5dba03efd4a0452747f0ea5bae963de",
      "0x24fb21770364692650bcfab3fa5c3f6e2e95fbb99fda9b627447d6a8446a3e74",
      "0x28567fa40846692ea5cdbfb29a90bd9a3fae3ff4124d3f5b7a6e20b6b93bfe84",
      "0x04f2eccb696c34ee35974bc4a727a9c54a3631b00175d35099d9d1780991d01a",
      "0x1c0c557f55848daebe1a8077581afd8f65ecf0055fb81a26c7815216e8183ce4",
      "0x0bfc84b66a7e04961f0d224b2b0099cbeab86e223599c366a56493d899033e02",
      "0x261d3758a568c7141fceb0ed57c0934ac7513abd885de0963740adc621f4d8ec",
      "0x266f8f950e7cc410bddd9930f8c3a00c133f92ee4df2216a177b5d75a020798b",
      "0x1f43f2cf241bcf4c3c7ede25dd81852405b16f29affa5f7359bf9b78e8a9223a",
      "0x06ef4ad658e63c4871a4c738054600f22d3f534b312111bd87caa22649e48a5e",
      "0x0f865f9980e1ea167c71fd8adc38a071faf88d18013eb8e386f3667fefdfb07f",
      "0x18235c35733e49a4ee735b218efffc17fc425bc2f46a4f434b46b5d10ce6cd8a",
      "0x12c9176e45dd23d50e0afcfb7399e1cd284b06457e90b5b682829befd288bb5e",
      "0x0bbb6c919c20f3749cc50dce1d6054448298e3cefbc86ca9e2968a478b6223b8",
      "0x1684320ba7d58a9d4dcfa4b4430fe139a92b0c657808b6bcc3bafb690113eecf",
      "0x18bb397835907475b80ff0d82cefb433969ce793e3d698f41c1d5cb4631ba7d4",
      "0x1967fef15d40001376dffd21194d25634d05913ed905da13a400bb7e8ef8943c",
      "0x02a03924d162621287fc6df3b1ed5fc4a0a913cb274678014eab07799bf3526a",
      "0x2cc5db39274389c6b13e7ccc9ec1b0678740336f2e510bb403eb6239e1b2340a",
      "0x119b829e11973fc49cb9097048d8e23653527328ab2afbd1557f8ce99141d789",
      "0x0831367eef1d6379b5197fc810dc4f1f2235d18a5800703231d4e70eccd91d2a",
      "0x03db6e9358b18e4dcda1cd8accf6a003506db494aa61d6aa41084979640f227c",
      "0x1580f0a78734e5ec860f22770606b1175552d7f9e4aa88d7016ee5511c0b7182",
      "0x0fa2b4c712b39d006ea698d7c251d25f21ea14606deab6327e53f244b1fc1d67",
      "0x2e231bb9625faab409fab282e15798931b67cbbedd1f52a27a15c36ee9b76ce6"
    ],
    "hash": "07c98871caca37e86ac6c25718b5414bd0595b39a1b8c84c9f4fdbee2d442944"
  },
  "aztec_version": "5.1.0"
}
