From 5988014330c929e1fcb52c4fbba5a755fa013c16 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 7 Sep 2023 15:52:03 -0400 Subject: [PATCH 001/104] fix: padded printing for e2e-cli (#2106) This fixes a 1 in 256 chance of failure when the last hex byte was 00. --- yarn-project/cli/src/index.ts | 4 ++-- yarn-project/foundation/src/fields/grumpkin_scalar.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/yarn-project/cli/src/index.ts b/yarn-project/cli/src/index.ts index a2fb1880758..f4583419176 100644 --- a/yarn-project/cli/src/index.ts +++ b/yarn-project/cli/src/index.ts @@ -113,7 +113,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { publicKey = await generatePublicKey(key); } else { const key = GrumpkinScalar.random(); - privKey = key.toString(); + privKey = key.toString(true); publicKey = await generatePublicKey(key); } log(`\nPrivate Key: ${privKey}\nPublic Key: ${publicKey.toString()}\n`); @@ -144,7 +144,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { log(`\nCreated new account:\n`); log(`Address: ${address.toString()}`); log(`Public key: ${publicKey.toString()}`); - if (!options.privateKey) log(`Private key: ${privateKey.toString()}`); + if (!options.privateKey) log(`Private key: ${privateKey.toString(true)}`); log(`Partial address: ${partialAddress.toString()}`); }); diff --git a/yarn-project/foundation/src/fields/grumpkin_scalar.ts b/yarn-project/foundation/src/fields/grumpkin_scalar.ts index 114c35b058e..b2cdb69ed4c 100644 --- a/yarn-project/foundation/src/fields/grumpkin_scalar.ts +++ b/yarn-project/foundation/src/fields/grumpkin_scalar.ts @@ -108,10 +108,11 @@ export class GrumpkinScalar { * The resulting string is prefixed with '0x' and contains the exact number of hex characters required * to represent the numeric value of this instance. * + * @param padTo32 - Whether to pad the resulting string to 32 bytes. * @returns A hexadecimal string representing the GrumpkinScalar value. */ - toString() { - return toHex(this.value); + toString(padTo32 = false) { + return toHex(this.value, padTo32); } /** From aabfb1383033364df9c045573098a4f13ca3a452 Mon Sep 17 00:00:00 2001 From: Leila Wang Date: Thu, 7 Sep 2023 23:28:17 +0200 Subject: [PATCH 002/104] fix: check a note is read before nullifying it. (#2076) Closes #1899 --- .../dev_docs/contracts/state_variables.md | 2 +- .../noir-aztec/src/state_vars/set.nr | 26 +++-- .../noir-libs/noir-aztec/src/types/vec.nr | 95 ++++++++++++++++--- 3 files changed, 103 insertions(+), 20 deletions(-) diff --git a/docs/docs/dev_docs/contracts/state_variables.md b/docs/docs/dev_docs/contracts/state_variables.md index e368c30ab42..e2e7242f793 100644 --- a/docs/docs/dev_docs/contracts/state_variables.md +++ b/docs/docs/dev_docs/contracts/state_variables.md @@ -225,7 +225,7 @@ We can also remove a note from a set: #include_code state_vars-SetRemove /yarn-project/noir-contracts/src/contracts/docs_example_contract/src/actions.nr rust -Note that the transaction won't fail if the note we are removing does not exist in the set. As a best practice, we should fetch the notes by calling [`get_notes`](#get_notes), which does a membership check under the hood to make sure the notes exist, and then feed the returned notes to the `remove` function. +Note that the proof will fail if the note we are removing does not exist. To avoid this, it's advisable to first retrieve the notes using [`get_notes`](#get_notes), which does a membership check under the hood to make sure the notes exist, and then we can safely provide these notes as input to the `remove` function. ### `.get_notes` diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr index b8813c989a3..5012ab86e7e 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr @@ -1,15 +1,15 @@ +use dep::std::option::Option; use crate::abi::PublicContextInputs; use crate::constants_gen::{MAX_NOTES_PER_PAGE, MAX_READ_REQUESTS_PER_CALL}; use crate::context::{PrivateContext, PublicContext}; -use crate::note::lifecycle::{create_note, create_note_hash_from_public, destroy_note}; use crate::note::{ + lifecycle::{create_note, create_note_hash_from_public, destroy_note}, note_getter::{ensure_note_exists, ensure_note_hash_exists, get_notes, view_notes}, note_getter_options::NoteGetterOptions, note_interface::NoteInterface, note_viewer_options::NoteViewerOptions, - utils::compute_inner_note_hash, + utils::compute_note_hash_for_read_or_nullify, }; -use dep::std::option::Option; struct Set { private_context: Option<&mut PrivateContext>, @@ -62,7 +62,12 @@ impl Set { self.note_interface, &mut note_with_header, ); - self.remove(note_with_header); + destroy_note( + self.private_context.unwrap(), + self.storage_slot, + note_with_header, + self.note_interface, + ); } // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1386): @@ -88,11 +93,20 @@ impl Set { // this hack once public kernel injects nonces. header.nonce = 1; set_header(&mut note_with_header, header); - - self.remove(note_with_header); + destroy_note( + self.private_context.unwrap(), + self.storage_slot, + note_with_header, + self.note_interface, + ); } fn remove(self, note: Note) { + let note_hash = compute_note_hash_for_read_or_nullify(self.note_interface, note); + let read_requests = self.private_context.unwrap_unchecked().read_requests; + let has_been_read = read_requests.any(|r| r == note_hash); + assert(has_been_read, "Can only remove a note that has been read from the set."); + destroy_note( self.private_context.unwrap(), self.storage_slot, diff --git a/yarn-project/noir-libs/noir-aztec/src/types/vec.nr b/yarn-project/noir-libs/noir-aztec/src/types/vec.nr index 4f0e1c95701..9442f977439 100644 --- a/yarn-project/noir-libs/noir-aztec/src/types/vec.nr +++ b/yarn-project/noir-libs/noir-aztec/src/types/vec.nr @@ -37,18 +37,87 @@ impl BoundedVec { self.len -= 1; elem } + + fn any(self, predicate: fn[Env](T) -> bool) -> bool { + let mut ret = false; + let mut exceeded_len = false; + for i in 0..MaxLen { + exceeded_len |= i == self.len; + if (!exceeded_len) { + ret |= predicate(self.storage[i]); + } + } + ret + } +} + +#[test] +fn test_vec_push_pop() { + let mut vec: BoundedVec = BoundedVec::new(0); + assert(vec.len == 0); + vec.push(2); + assert(vec.len == 1); + vec.push(4); + assert(vec.len == 2); + vec.push(6); + assert(vec.len == 3); + let x = vec.pop(); + assert(x == 6); + assert(vec.len == 2); + assert(vec.get(0) == 2); + assert(vec.get(1) == 4); +} + +#[test] +fn test_vec_push_array() { + let mut vec: BoundedVec = BoundedVec::new(0); + vec.push_array([2, 4]); + assert(vec.len == 2); + assert(vec.get(0) == 2); + assert(vec.get(1) == 4); +} + +#[test(should_fail)] +fn test_vec_get_out_of_bound() { + let mut vec: BoundedVec = BoundedVec::new(0); + vec.push_array([2, 4]); + let _x = vec.get(2); +} + +#[test(should_fail)] +fn test_vec_get_not_declared() { + let mut vec: BoundedVec = BoundedVec::new(0); + vec.push_array([2]); + let _x = vec.get(1); +} + +#[test(should_fail)] +fn test_vec_get_uninitialised() { + let mut vec: BoundedVec = BoundedVec::new(0); + let _x = vec.get(0); +} + +#[test(should_fail)] +fn test_vec_push_overflow() { + let mut vec: BoundedVec = BoundedVec::new(0); + vec.push(1); + vec.push(2); +} + +#[test] +fn test_vec_any() { + let mut vec: BoundedVec = BoundedVec::new(0); + vec.push_array([2, 4, 6]); + assert(vec.any(|v| v == 2) == true); + assert(vec.any(|v| v == 4) == true); + assert(vec.any(|v| v == 6) == true); + assert(vec.any(|v| v == 3) == false); } -// #[test] -// fn test_vec() { -// let vec: BoundedVec = BoundedVec::new(0); -// assert(vec.len == 0); -// let vec1 = vec.push(1); -// assert(vec1.len == 1); -// let vec2 = vec1.push(1); -// assert(vec2.len == 2); -// let vec3 = vec2.push(1); -// assert(vec3.len == 3); -// let x = vec3.pop(); -// assert(x == 1); -// } \ No newline at end of file +#[test] +fn test_vec_any_not_default() { + let default_value = 1; + let mut vec: BoundedVec = BoundedVec::new(default_value); + vec.push_array([2, 4]); + assert(vec.any(|v| v == default_value) == false); +} \ No newline at end of file From e248ac1a76d27ba9451e35995cce71bec88cb642 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Thu, 7 Sep 2023 21:28:43 +0000 Subject: [PATCH 003/104] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "dd9ca0473" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "dd9ca0473" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index 2ef625f4598..c6c9d3a60db 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = 5a5fa9dbc3786a5c94c0b7c83fd7f901a5c3b8ec - parent = 315ad3d58eeb467361848a1e70fd32f3074b35d5 + commit = dd9ca047380145de166fba0ed6010517ecd0b1f1 + parent = aabfb1383033364df9c045573098a4f13ca3a452 method = merge cmdver = 0.4.6 From 070cc4cb31ada29e42846e16df1ec191100214a5 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Thu, 7 Sep 2023 23:15:17 +0100 Subject: [PATCH 004/104] fix(breaking change): change embedded curve scalar mul to use two limbs to properly encode the scalar field (#2105) Please provide a paragraph or two giving a summary of the change, including relevant motivation and context. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .../acir_format/acir_to_constraint_buf.hpp | 3 +- .../dsl/acir_format/fixed_base_scalar_mul.cpp | 6 ++-- .../dsl/acir_format/fixed_base_scalar_mul.hpp | 5 ++-- .../dsl/acir_format/serde/acir.hpp | 28 +++++++++++++------ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index b33c935590f..ef84daaabb1 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -158,7 +158,8 @@ void handle_blackbox_func_call(Circuit::Opcode::BlackBoxFuncCall const& arg, aci }); } else if constexpr (std::is_same_v) { af.fixed_base_scalar_mul_constraints.push_back(FixedBaseScalarMul{ - .scalar = arg.input.witness.value, + .low = arg.low.witness.value, + .high = arg.high.witness.value, .pub_key_x = arg.outputs[0].value, .pub_key_y = arg.outputs[1].value, }); diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.cpp index 18f1b59f4cd..d54f8a33c98 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.cpp @@ -5,8 +5,10 @@ namespace acir_format { void create_fixed_base_constraint(Builder& builder, const FixedBaseScalarMul& input) { - field_ct scalar_as_field = field_ct::from_witness_index(&builder, input.scalar); - auto public_key = group_ct::fixed_base_scalar_mul_g1<254>(scalar_as_field); + field_ct low_as_field = field_ct::from_witness_index(&builder, input.low); + field_ct high_as_field = field_ct::from_witness_index(&builder, input.high); + (void)high_as_field; + auto public_key = group_ct::fixed_base_scalar_mul_g1<254>(low_as_field); builder.assert_equal(public_key.x.witness_index, input.pub_key_x); builder.assert_equal(public_key.y.witness_index, input.pub_key_y); diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.hpp index 2a7088e67ad..fe4917a8d2a 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/fixed_base_scalar_mul.hpp @@ -6,12 +6,13 @@ namespace acir_format { struct FixedBaseScalarMul { - uint32_t scalar; + uint32_t low; + uint32_t high; uint32_t pub_key_x; uint32_t pub_key_y; // for serialization, update with any new fields - MSGPACK_FIELDS(scalar, pub_key_x, pub_key_y); + MSGPACK_FIELDS(low, high, pub_key_x, pub_key_y); friend bool operator==(FixedBaseScalarMul const& lhs, FixedBaseScalarMul const& rhs) = default; }; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index 60ca1a2c07e..92839b90ec2 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -126,7 +126,8 @@ struct BlackBoxFuncCall { }; struct FixedBaseScalarMul { - Circuit::FunctionInput input; + Circuit::FunctionInput low; + Circuit::FunctionInput high; std::array outputs; friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); @@ -467,7 +468,8 @@ struct BlackBoxOp { }; struct FixedBaseScalarMul { - Circuit::RegisterIndex input; + Circuit::RegisterIndex low; + Circuit::RegisterIndex high; Circuit::HeapArray result; friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); @@ -2379,7 +2381,10 @@ namespace Circuit { inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul& lhs, const BlackBoxFuncCall::FixedBaseScalarMul& rhs) { - if (!(lhs.input == rhs.input)) { + if (!(lhs.low == rhs.low)) { + return false; + } + if (!(lhs.high == rhs.high)) { return false; } if (!(lhs.outputs == rhs.outputs)) { @@ -2413,7 +2418,8 @@ template void serde::Serializable::serialize( const Circuit::BlackBoxFuncCall::FixedBaseScalarMul& obj, Serializer& serializer) { - serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); serde::Serializable::serialize(obj.outputs, serializer); } @@ -2423,7 +2429,8 @@ Circuit::BlackBoxFuncCall::FixedBaseScalarMul serde::Deserializable< Circuit::BlackBoxFuncCall::FixedBaseScalarMul>::deserialize(Deserializer& deserializer) { Circuit::BlackBoxFuncCall::FixedBaseScalarMul obj; - obj.input = serde::Deserializable::deserialize(deserializer); + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; } @@ -3134,7 +3141,10 @@ namespace Circuit { inline bool operator==(const BlackBoxOp::FixedBaseScalarMul& lhs, const BlackBoxOp::FixedBaseScalarMul& rhs) { - if (!(lhs.input == rhs.input)) { + if (!(lhs.low == rhs.low)) { + return false; + } + if (!(lhs.high == rhs.high)) { return false; } if (!(lhs.result == rhs.result)) { @@ -3167,7 +3177,8 @@ template void serde::Serializable::serialize( const Circuit::BlackBoxOp::FixedBaseScalarMul& obj, Serializer& serializer) { - serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); serde::Serializable::serialize(obj.result, serializer); } @@ -3177,7 +3188,8 @@ Circuit::BlackBoxOp::FixedBaseScalarMul serde::Deserializable::deserialize(deserializer); + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); obj.result = serde::Deserializable::deserialize(deserializer); return obj; } From cb9cc139122005f3c6082a42777ccf93c8e2806a Mon Sep 17 00:00:00 2001 From: AztecBot Date: Thu, 7 Sep 2023 22:15:47 +0000 Subject: [PATCH 005/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "2281507f3" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "2281507f3" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index bd9696fffa9..9f8dd37d198 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 827b81398ac937d6cead519b181e07be476a7bb5 - parent = 35407e25081744702ec35efe3f95aa0137fe0ebb + commit = 2281507f31ea3a34b42a3ae278d7071f7e08573a + parent = 070cc4cb31ada29e42846e16df1ec191100214a5 method = merge cmdver = 0.4.6 From 4f5c4fe24f012988169d8a0a3d8ae5245e24d3ee Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 7 Sep 2023 20:24:23 -0400 Subject: [PATCH 006/104] fix: circuits issues when building with gcc (#2107) Did `docker build -t bb-gcc -f dockerfiles/Dockerfile.x86_64-linux-gcc` from `circuits/cpp`. Did some cleanup --- .../abis/private_circuit_public_inputs.hpp | 4 +- .../abis/public_circuit_public_inputs.hpp | 2 +- .../rollup/root/root_rollup_public_inputs.hpp | 44 +++++++++---------- .../apps/function_execution_context.hpp | 4 +- circuits/cpp/src/aztec3/circuits/hash.hpp | 4 +- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp index 7e7bff8cdd0..b216cd17529 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp @@ -274,9 +274,9 @@ template class OptionalPrivateCircuitPublicInputs { chain_id, version); - OptionalPrivateCircuitPublicInputs() = default; + OptionalPrivateCircuitPublicInputs() = default; - OptionalPrivateCircuitPublicInputs( + OptionalPrivateCircuitPublicInputs( std::optional> const& call_context, opt_fr const& args_hash, diff --git a/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp index 863292fd208..0784704c192 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp @@ -45,7 +45,7 @@ template struct PublicCircuitPublicInputs { HistoricBlockData historic_block_data{}; - address prover_address; + address prover_address{}; // for serialization, update with new fields MSGPACK_FIELDS(call_context, diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp index a709b025c51..96603192162 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp @@ -18,39 +18,39 @@ template struct RootRollupPublicInputs { using AggregationObject = typename NCT::AggregationObject; // All below are shared between the base and merge rollups - AggregationObject end_aggregation_object; + AggregationObject end_aggregation_object{}; - GlobalVariables global_variables; + GlobalVariables global_variables{}; - AppendOnlyTreeSnapshot start_private_data_tree_snapshot; - AppendOnlyTreeSnapshot end_private_data_tree_snapshot; + AppendOnlyTreeSnapshot start_private_data_tree_snapshot{}; + AppendOnlyTreeSnapshot end_private_data_tree_snapshot{}; - AppendOnlyTreeSnapshot start_nullifier_tree_snapshot; - AppendOnlyTreeSnapshot end_nullifier_tree_snapshot; + AppendOnlyTreeSnapshot start_nullifier_tree_snapshot{}; + AppendOnlyTreeSnapshot end_nullifier_tree_snapshot{}; - AppendOnlyTreeSnapshot start_contract_tree_snapshot; - AppendOnlyTreeSnapshot end_contract_tree_snapshot; + AppendOnlyTreeSnapshot start_contract_tree_snapshot{}; + AppendOnlyTreeSnapshot end_contract_tree_snapshot{}; - fr start_public_data_tree_root; - fr end_public_data_tree_root; + fr start_public_data_tree_root{}; + fr end_public_data_tree_root{}; - AppendOnlyTreeSnapshot start_tree_of_historic_private_data_tree_roots_snapshot; - AppendOnlyTreeSnapshot end_tree_of_historic_private_data_tree_roots_snapshot; + AppendOnlyTreeSnapshot start_tree_of_historic_private_data_tree_roots_snapshot{}; + AppendOnlyTreeSnapshot end_tree_of_historic_private_data_tree_roots_snapshot{}; - AppendOnlyTreeSnapshot start_tree_of_historic_contract_tree_roots_snapshot; - AppendOnlyTreeSnapshot end_tree_of_historic_contract_tree_roots_snapshot; + AppendOnlyTreeSnapshot start_tree_of_historic_contract_tree_roots_snapshot{}; + AppendOnlyTreeSnapshot end_tree_of_historic_contract_tree_roots_snapshot{}; - AppendOnlyTreeSnapshot start_l1_to_l2_messages_tree_snapshot; - AppendOnlyTreeSnapshot end_l1_to_l2_messages_tree_snapshot; + AppendOnlyTreeSnapshot start_l1_to_l2_messages_tree_snapshot{}; + AppendOnlyTreeSnapshot end_l1_to_l2_messages_tree_snapshot{}; - AppendOnlyTreeSnapshot start_tree_of_historic_l1_to_l2_messages_tree_roots_snapshot; - AppendOnlyTreeSnapshot end_tree_of_historic_l1_to_l2_messages_tree_roots_snapshot; + AppendOnlyTreeSnapshot start_tree_of_historic_l1_to_l2_messages_tree_roots_snapshot{}; + AppendOnlyTreeSnapshot end_tree_of_historic_l1_to_l2_messages_tree_roots_snapshot{}; - AppendOnlyTreeSnapshot start_historic_blocks_tree_snapshot; - AppendOnlyTreeSnapshot end_historic_blocks_tree_snapshot; + AppendOnlyTreeSnapshot start_historic_blocks_tree_snapshot{}; + AppendOnlyTreeSnapshot end_historic_blocks_tree_snapshot{}; - std::array calldata_hash; - std::array l1_to_l2_messages_hash; + std::array calldata_hash{}; + std::array l1_to_l2_messages_hash{}; // For serialization, update with new fields MSGPACK_FIELDS(end_aggregation_object, diff --git a/circuits/cpp/src/aztec3/circuits/apps/function_execution_context.hpp b/circuits/cpp/src/aztec3/circuits/apps/function_execution_context.hpp index 766bb47cae9..ad1b597f4ba 100644 --- a/circuits/cpp/src/aztec3/circuits/apps/function_execution_context.hpp +++ b/circuits/cpp/src/aztec3/circuits/apps/function_execution_context.hpp @@ -70,7 +70,7 @@ template class FunctionExecutionContext { bool is_finalised = false; public: - FunctionExecutionContext(Builder& builder, OracleWrapperInterface& oracle) + FunctionExecutionContext(Builder& builder, OracleWrapperInterface& oracle) : builder(builder) , oracle(oracle) , private_circuit_public_inputs(OptionalPrivateCircuitPublicInputs::create()) @@ -332,4 +332,4 @@ template class FunctionExecutionContext { } }; -} // namespace aztec3::circuits::apps \ No newline at end of file +} // namespace aztec3::circuits::apps diff --git a/circuits/cpp/src/aztec3/circuits/hash.hpp b/circuits/cpp/src/aztec3/circuits/hash.hpp index 92f3c1a79f7..4c5141ddf91 100644 --- a/circuits/cpp/src/aztec3/circuits/hash.hpp +++ b/circuits/cpp/src/aztec3/circuits/hash.hpp @@ -442,9 +442,9 @@ template std::array accu // Generate a 512 bit input from right and left 256 bit hashes constexpr auto num_bytes = 2 * 32; std::array hash_input_bytes; - for (uint8_t i = 0; i < 4; i++) { + for (size_t i = 0; i < 4; i++) { auto half = hashes[i].to_buffer(); - for (uint8_t j = 0; j < 16; j++) { + for (size_t j = 0; j < 16; j++) { hash_input_bytes[i * 16 + j] = half[16 + j]; } } From ab6c6b1cefdc1dd1da6e1198f99a211b31e73d85 Mon Sep 17 00:00:00 2001 From: David Banks <47112877+dbanks12@users.noreply.github.com> Date: Fri, 8 Sep 2023 03:26:10 -0400 Subject: [PATCH 007/104] chore(constants): bump number of private reads and writes (#2062) Increases the constants to support wider set of applications. Specifically: MAX_NEW_COMMITMENTS_PER_CALL = 4 $\longrightarrow$ 16 MAX_NEW_NULLIFIERS_PER_CALL = 4 $\longrightarrow$ 16 MAX_READ_REQUESTS_PER_CALL = 4 $\longrightarrow$ 32 Therefore, we have: MAX_NEW_COMMITMENTS_PER_TX = 16 $\longrightarrow$ 64 MAX_NEW_NULLIFIERS_PER_TX = 16 $\longrightarrow$ 64 MAX_READ_REQUESTS_PER_TX = 16 $\longrightarrow$ 128 --------- Co-authored-by: Suyash Bagad Co-authored-by: ludamad --- circuits/cpp/src/aztec3/constants.hpp | 6 +- .../src/core/libraries/ConstantsGen.sol | 36 +- .../src/abis/ecdsa_account_contract.json | 4 +- .../src/abis/schnorr_account_contract.json | 4 +- ...schnorr_auth_witness_account_contract.json | 6 +- .../schnorr_single_key_account_contract.json | 4 +- .../circuits.js/src/cbind/circuits.gen.ts | 32 +- .../circuits.js/src/cbind/constants.gen.ts | 36 +- ...private_circuit_public_inputs.test.ts.snap | 8 +- .../public_circuit_public_inputs.test.ts.snap | 4 +- .../kernel/__snapshots__/index.test.ts.snap | 378 ++++++++++--- .../__snapshots__/base_rollup.test.ts.snap | 500 +++++++++++++++++- .../src/integration_l1_publisher.test.ts | 10 +- .../noir-libs/noir-aztec/src/constants_gen.nr | 36 +- .../noir-libs/noir-aztec/src/context.nr | 50 +- .../block_builder/solo_block_builder.test.ts | 11 +- 16 files changed, 916 insertions(+), 209 deletions(-) diff --git a/circuits/cpp/src/aztec3/constants.hpp b/circuits/cpp/src/aztec3/constants.hpp index e12367a17bb..5437250e474 100644 --- a/circuits/cpp/src/aztec3/constants.hpp +++ b/circuits/cpp/src/aztec3/constants.hpp @@ -41,14 +41,14 @@ constexpr size_t RETURN_VALUES_LENGTH = 4; // docs:start:constants // "PER CALL" CONSTANTS -constexpr size_t MAX_NEW_COMMITMENTS_PER_CALL = 4; -constexpr size_t MAX_NEW_NULLIFIERS_PER_CALL = 4; +constexpr size_t MAX_NEW_COMMITMENTS_PER_CALL = 16; +constexpr size_t MAX_NEW_NULLIFIERS_PER_CALL = 16; constexpr size_t MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; constexpr size_t MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; constexpr size_t MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; constexpr size_t MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; constexpr size_t MAX_PUBLIC_DATA_READS_PER_CALL = 16; -constexpr size_t MAX_READ_REQUESTS_PER_CALL = 4; +constexpr size_t MAX_READ_REQUESTS_PER_CALL = 32; // "PER TRANSACTION" CONSTANTS diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 4f3e6ecb2ff..d1c76b84f6c 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -16,16 +16,16 @@ library Constants { uint256 internal constant ARGS_LENGTH = 16; uint256 internal constant RETURN_VALUES_LENGTH = 4; - uint256 internal constant MAX_NEW_COMMITMENTS_PER_CALL = 4; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 4; + uint256 internal constant MAX_NEW_COMMITMENTS_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_READ_REQUESTS_PER_CALL = 4; - uint256 internal constant MAX_NEW_COMMITMENTS_PER_TX = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 16; + uint256 internal constant MAX_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NEW_COMMITMENTS_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; @@ -33,7 +33,7 @@ library Constants { uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 16; uint256 internal constant MAX_NEW_CONTRACTS_PER_TX = 1; uint256 internal constant MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX = 4; - uint256 internal constant MAX_READ_REQUESTS_PER_TX = 16; + uint256 internal constant MAX_READ_REQUESTS_PER_TX = 128; uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; @@ -48,11 +48,11 @@ library Constants { uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; uint256 internal constant CONTRACT_SUBTREE_HEIGHT = 1; uint256 internal constant CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 15; - uint256 internal constant PRIVATE_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH = 27; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 5; + uint256 internal constant PRIVATE_DATA_SUBTREE_HEIGHT = 7; + uint256 internal constant PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH = 25; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 7; uint256 internal constant HISTORIC_BLOCKS_TREE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 11; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 9; uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; @@ -68,17 +68,17 @@ library Constants { uint256 internal constant HISTORIC_BLOCK_DATA_LENGTH = 7; uint256 internal constant FUNCTION_DATA_LENGTH = 4; uint256 internal constant CONTRACT_DEPLOYMENT_DATA_LENGTH = 6; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 58; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 122; uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3; uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 117; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 86; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 141; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; uint256 internal constant EMPTY_NULLIFIED_COMMITMENT = 1000000; - uint256 internal constant CALL_PRIVATE_FUNCTION_RETURN_SIZE = 64; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 63; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 48; - uint256 internal constant COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 1024; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 1024; + uint256 internal constant CALL_PRIVATE_FUNCTION_RETURN_SIZE = 128; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 87; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 112; + uint256 internal constant COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 4096; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 4096; uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 64; uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 128; diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 052ddb70908..8b4e12fbee2 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -84,7 +84,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -153,7 +153,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index b40cf7e175a..c661a036019 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -72,7 +72,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -141,7 +141,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json index a048caeb4d7..4ebe956d4ae 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json @@ -24,7 +24,7 @@ "isInternal": false, "parameters": [], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/9Xc12/aUBzFcZIm6d4le+8dG9tg05Wme++9Ehro3un/X44CEsprTh6+V7LAL+h8GPYdv8u/XC5XyW23tvrRXj86Gs+b5507zrsaz1tb83y18RgFxTiulgrVMAo3gkJWSZMgTirFNEzDJE02C2kUVdM4LWWVrBRkYRxVw1qSRbVgu3W3vFawy7aXOXsgOXshOfsgOfshOQcgOQchOYcgOYchOUcgOUchOccgOcchOScgOSchOacgOachOWcgOWchOecgOechORcgORchOZcgOZchOVcgOQNIzhCSswDJGUFyxpCcCSRnEZKzBMmZQnJmkJzlPcrZviNnsLsWthnNZyHmdqP5HMS8z2g+DzF3GM0XIOZOo/kixNxlNK9CzN1G8yWIucdoXoOYe43myxBzn9F8BWLuN5qvQswDRvM1iHnQaL4OMQ8ZzTcg5mGj+SbEPGI034KYR43m2xDzmNF8B2IeN5rvQswTRvM9iHnSaL4PMU8ZzQ8g5mmj+SHEPGM0P4KYZ43mxxDznNH8BGKeN5qfQswLRvMziHnRaH4OMS8ZzS8g5mWj+SXEvGI0v4KYA6P5NcQcGs1vIOaC0fwWYo6M5ncQc2w0v4eYE6N5HWIuGs0bEHPJaK5AzKnR/AFizozmTYi5bDRXIeb9RnMNYj5gNH+EmA8azZ8g5kNG82eI+bDR/AViPmI0f4WYjxrN3yDmY0bzd4j5uNH8A2I+YTT/hJhPGs2/IOZTRvNviPm00fwHYj5jNP+FmPNG85bRnG+8TvN/+rQnSnuEtGdGe0g0HtT4SOMF9Z/Vn1T/Sv0N3X91P9L1Wdcr/X71fdbnm295L8uNR+2F094w7ZXS3qHmXhrttVirH6rFV226arVVu6xaXtW2qtZTtY+qBVRtnGrFVDulWiLV1qjWRLUXqkXQ2rzWqrV2q7VMre1prUtrP1oL0dqA5so1d6y51PX6obk2zT1pLkZzExqra+yqsZzGNurrq++rvqD6Ruor6N6pe4murbrW6Len7+JWi/s/E/s4lihRAAA=", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -80,7 +80,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -97,7 +97,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json index 96e5e98b27a..60e25ac8515 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json @@ -7,7 +7,7 @@ "isInternal": false, "parameters": [], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/9Xc12/aUBzFcZIm6d4le+8dG9tg05Wme++9Ehro3un/X44CEsprTh6+V7LAL+h8GPYdv8u/XC5XyW23tvrRXj86Gs+b5507zrsaz1tb83y18RgFxTiulgrVMAo3gkJWSZMgTirFNEzDJE02C2kUVdM4LWWVrBRkYRxVw1qSRbVgu3W3vFawy7aXOXsgOXshOfsgOfshOQcgOQchOYcgOYchOUcgOUchOccgOcchOScgOSchOacgOachOWcgOWchOecgOechORcgORchOZcgOZchOVcgOQNIzhCSswDJGUFyxpCcCSRnEZKzBMmZQnJmkJzlPcrZviNnsLsWthnNZyHmdqP5HMS8z2g+DzF3GM0XIOZOo/kixNxlNK9CzN1G8yWIucdoXoOYe43myxBzn9F8BWLuN5qvQswDRvM1iHnQaL4OMQ8ZzTcg5mGj+SbEPGI034KYR43m2xDzmNF8B2IeN5rvQswTRvM9iHnSaL4PMU8ZzQ8g5mmj+SHEPGM0P4KYZ43mxxDznNH8BGKeN5qfQswLRvMziHnRaH4OMS8ZzS8g5mWj+SXEvGI0v4KYA6P5NcQcGs1vIOaC0fwWYo6M5ncQc2w0v4eYE6N5HWIuGs0bEHPJaK5AzKnR/AFizozmTYi5bDRXIeb9RnMNYj5gNH+EmA8azZ8g5kNG82eI+bDR/AViPmI0f4WYjxrN3yDmY0bzd4j5uNH8A2I+YTT/hJhPGs2/IOZTRvNviPm00fwHYj5jNP+FmPNG85bRnG+8TvN/+rQnSnuEtGdGe0g0HtT4SOMF9Z/Vn1T/Sv0N3X91P9L1Wdcr/X71fdbnm295L8uNR+2F094w7ZXS3qHmXhrttVirH6rFV226arVVu6xaXtW2qtZTtY+qBVRtnGrFVDulWiLV1qjWRLUXqkXQ2rzWqrV2q7VMre1prUtrP1oL0dqA5so1d6y51PX6obk2zT1pLkZzExqra+yqsZzGNurrq++rvqD6Ruor6N6pe4murbrW6Len7+JWi/s/E/s4lihRAAA=", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -96,7 +96,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/circuits.js/src/cbind/circuits.gen.ts b/yarn-project/circuits.js/src/cbind/circuits.gen.ts index 008f942f0c8..b1a272ddc9d 100644 --- a/yarn-project/circuits.js/src/cbind/circuits.gen.ts +++ b/yarn-project/circuits.js/src/cbind/circuits.gen.ts @@ -448,10 +448,10 @@ export function fromPublicDataRead(o: PublicDataRead): MsgpackPublicDataRead { interface MsgpackCombinedAccumulatedData { aggregation_object: MsgpackNativeAggregationState; - read_requests: Tuple; - new_commitments: Tuple; - new_nullifiers: Tuple; - nullified_commitments: Tuple; + read_requests: Tuple; + new_commitments: Tuple; + new_nullifiers: Tuple; + nullified_commitments: Tuple; private_call_stack: Tuple; public_call_stack: Tuple; new_l2_to_l1_msgs: Tuple; @@ -1158,10 +1158,10 @@ interface MsgpackPrivateCircuitPublicInputs { call_context: MsgpackCallContext; args_hash: Buffer; return_values: Tuple; - read_requests: Tuple; - new_commitments: Tuple; - new_nullifiers: Tuple; - nullified_commitments: Tuple; + read_requests: Tuple; + new_commitments: Tuple; + new_nullifiers: Tuple; + nullified_commitments: Tuple; private_call_stack: Tuple; public_call_stack: Tuple; new_l2_to_l1_msgs: Tuple; @@ -1496,7 +1496,7 @@ interface MsgpackPrivateCallData { vk: MsgpackVerificationKeyData; function_leaf_membership_witness: MsgpackMembershipWitness4; contract_leaf_membership_witness: MsgpackMembershipWitness16; - read_request_membership_witnesses: Tuple; + read_request_membership_witnesses: Tuple; portal_contract_address: Buffer; acir_hash: Buffer; } @@ -1675,8 +1675,8 @@ export function fromPrivateKernelInputsInner(o: PrivateKernelInputsInner): Msgpa interface MsgpackPrivateKernelInputsOrdering { previous_kernel: MsgpackPreviousKernelData; - read_commitment_hints: Tuple; - nullifier_commitment_hints: Tuple; + read_commitment_hints: Tuple; + nullifier_commitment_hints: Tuple; } export function toPrivateKernelInputsOrdering(o: MsgpackPrivateKernelInputsOrdering): PrivateKernelInputsOrdering { @@ -1715,9 +1715,9 @@ export function fromPrivateKernelInputsOrdering(o: PrivateKernelInputsOrdering): interface MsgpackFinalAccumulatedData { aggregation_object: MsgpackNativeAggregationState; - new_commitments: Tuple; - new_nullifiers: Tuple; - nullified_commitments: Tuple; + new_commitments: Tuple; + new_nullifiers: Tuple; + nullified_commitments: Tuple; private_call_stack: Tuple; public_call_stack: Tuple; new_l2_to_l1_msgs: Tuple; @@ -1964,8 +1964,8 @@ interface MsgpackPublicCircuitPublicInputs { contract_storage_update_requests: Tuple; contract_storage_reads: Tuple; public_call_stack: Tuple; - new_commitments: Tuple; - new_nullifiers: Tuple; + new_commitments: Tuple; + new_nullifiers: Tuple; new_l2_to_l1_msgs: Tuple; unencrypted_logs_hash: Tuple; unencrypted_log_preimages_length: Buffer; diff --git a/yarn-project/circuits.js/src/cbind/constants.gen.ts b/yarn-project/circuits.js/src/cbind/constants.gen.ts index 7faeda3b159..03cfb374225 100644 --- a/yarn-project/circuits.js/src/cbind/constants.gen.ts +++ b/yarn-project/circuits.js/src/cbind/constants.gen.ts @@ -2,16 +2,16 @@ // GENERATED FILE - DO NOT EDIT, RUN yarn remake-constants export const ARGS_LENGTH = 16; export const RETURN_VALUES_LENGTH = 4; -export const MAX_NEW_COMMITMENTS_PER_CALL = 4; -export const MAX_NEW_NULLIFIERS_PER_CALL = 4; +export const MAX_NEW_COMMITMENTS_PER_CALL = 16; +export const MAX_NEW_NULLIFIERS_PER_CALL = 16; export const MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; export const MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; export const MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; export const MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; export const MAX_PUBLIC_DATA_READS_PER_CALL = 16; -export const MAX_READ_REQUESTS_PER_CALL = 4; -export const MAX_NEW_COMMITMENTS_PER_TX = 16; -export const MAX_NEW_NULLIFIERS_PER_TX = 16; +export const MAX_READ_REQUESTS_PER_CALL = 32; +export const MAX_NEW_COMMITMENTS_PER_TX = 64; +export const MAX_NEW_NULLIFIERS_PER_TX = 64; export const MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; export const MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; export const MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; @@ -19,7 +19,7 @@ export const MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 16; export const MAX_PUBLIC_DATA_READS_PER_TX = 16; export const MAX_NEW_CONTRACTS_PER_TX = 1; export const MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX = 4; -export const MAX_READ_REQUESTS_PER_TX = 16; +export const MAX_READ_REQUESTS_PER_TX = 128; export const NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; export const NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; export const NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; @@ -34,11 +34,11 @@ export const L1_TO_L2_MSG_TREE_HEIGHT = 16; export const ROLLUP_VK_TREE_HEIGHT = 8; export const CONTRACT_SUBTREE_HEIGHT = 1; export const CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = 15; -export const PRIVATE_DATA_SUBTREE_HEIGHT = 5; -export const PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH = 27; -export const NULLIFIER_SUBTREE_HEIGHT = 5; +export const PRIVATE_DATA_SUBTREE_HEIGHT = 7; +export const PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH = 25; +export const NULLIFIER_SUBTREE_HEIGHT = 7; export const HISTORIC_BLOCKS_TREE_HEIGHT = 16; -export const NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 11; +export const NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 9; export const L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; export const L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; export const FUNCTION_SELECTOR_NUM_BYTES = 4; @@ -54,17 +54,17 @@ export const CALL_CONTEXT_LENGTH = 6; export const HISTORIC_BLOCK_DATA_LENGTH = 7; export const FUNCTION_DATA_LENGTH = 4; export const CONTRACT_DEPLOYMENT_DATA_LENGTH = 6; -export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 58; +export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 122; export const CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3; export const CONTRACT_STORAGE_READ_LENGTH = 2; -export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 117; -export const GET_NOTES_ORACLE_RETURN_LENGTH = 86; +export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 141; +export const GET_NOTES_ORACLE_RETURN_LENGTH = 674; export const EMPTY_NULLIFIED_COMMITMENT = 1000000; -export const CALL_PRIVATE_FUNCTION_RETURN_SIZE = 64; -export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 63; -export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 48; -export const COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 1024; -export const NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 1024; +export const CALL_PRIVATE_FUNCTION_RETURN_SIZE = 128; +export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 87; +export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 112; +export const COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = 4096; +export const NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 4096; export const PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; export const CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 64; export const CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 128; diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap index 00db924ad0e..ad2d4be0f35 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/private_circuit_public_inputs.test.ts.snap @@ -11,10 +11,10 @@ is_contract_deployment: 1 args_hash: 0x100 return_values: [ 0x200 0x201 0x202 0x203 ] -read_requests: [ 0x300 0x301 0x302 0x303 ] -new_commitments: [ 0x400 0x401 0x402 0x403 ] -new_nullifiers: [ 0x500 0x501 0x502 0x503 ] -nullified_commitments: [ 0x510 0x511 0x512 0x513 ] +read_requests: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f ] +new_commitments: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f ] +new_nullifiers: [ 0x500 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 0x509 0x50a 0x50b 0x50c 0x50d 0x50e 0x50f ] +nullified_commitments: [ 0x510 0x511 0x512 0x513 0x514 0x515 0x516 0x517 0x518 0x519 0x51a 0x51b 0x51c 0x51d 0x51e 0x51f ] private_call_stack: [ 0x600 0x601 0x602 0x603 ] public_call_stack: [ 0x700 0x701 0x702 0x703 ] new_l2_to_l1_msgs: [ 0x800 0x801 ] diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap index e471a79210c..c4efc4e1220 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/public_circuit_public_inputs.test.ts.snap @@ -94,8 +94,8 @@ current_value: 0x1 current_value: 0x1 ] public_call_stack: [ 0x600 0x601 0x0 0x0 ] -new_commitments: [ 0x700 0x701 0x0 0x0 ] -new_nullifiers: [ 0x800 0x801 0x0 0x0 ] +new_commitments: [ 0x700 0x701 0x702 0x703 0x704 0x705 0x706 0x707 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x800 0x801 0x802 0x803 0x804 0x805 0x806 0x807 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x900 0x0 ] unencrypted_logs_hash: [ 0x901 0x0 ] unencrypted_log_preimages_length: 0x902 diff --git a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap index 7ca8864144e..645a6ce8902 100644 --- a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap @@ -13,10 +13,10 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x100 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -185,9 +185,9 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -274,10 +274,10 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x100 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -522,10 +522,10 @@ is_contract_deployment: 1 args_hash: 0x1111 return_values: [ 0x1211 0x1212 0x1213 0x1214 ] -read_requests: [ 0x1311 0x1312 0x1313 0x1314 ] -new_commitments: [ 0x1411 0x1412 0x1413 0x1414 ] -new_nullifiers: [ 0x1511 0x1512 0x1513 0x1514 ] -nullified_commitments: [ 0x1521 0x1522 0x1523 0x1524 ] +read_requests: [ 0x1311 0x1312 0x1313 0x1314 0x1315 0x1316 0x1317 0x1318 0x1319 0x131a 0x131b 0x131c 0x131d 0x131e 0x131f 0x1320 0x1321 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 ] +new_commitments: [ 0x1411 0x1412 0x1413 0x1414 0x1415 0x1416 0x1417 0x1418 0x1419 0x141a 0x141b 0x141c 0x141d 0x141e 0x141f 0x1420 ] +new_nullifiers: [ 0x1511 0x1512 0x1513 0x1514 0x1515 0x1516 0x1517 0x1518 0x1519 0x151a 0x151b 0x151c 0x151d 0x151e 0x151f 0x1520 ] +nullified_commitments: [ 0x1521 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 ] private_call_stack: [ 0x1611 0x1612 0x1613 0x1614 ] public_call_stack: [ 0x1711 0x1712 0x1713 0x1714 ] new_l2_to_l1_msgs: [ 0x1811 0x1812 ] @@ -574,10 +574,10 @@ is_contract_deployment: 1 args_hash: 0x1121 return_values: [ 0x1221 0x1222 0x1223 0x1224 ] -read_requests: [ 0x1321 0x1322 0x1323 0x1324 ] -new_commitments: [ 0x1421 0x1422 0x1423 0x1424 ] -new_nullifiers: [ 0x1521 0x1522 0x1523 0x1524 ] -nullified_commitments: [ 0x1531 0x1532 0x1533 0x1534 ] +read_requests: [ 0x1321 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 ] +new_commitments: [ 0x1421 0x1422 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 ] +new_nullifiers: [ 0x1521 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 ] +nullified_commitments: [ 0x1531 0x1532 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 ] private_call_stack: [ 0x1621 0x1622 0x1623 0x1624 ] public_call_stack: [ 0x1721 0x1722 0x1723 0x1724 ] new_l2_to_l1_msgs: [ 0x1821 0x1822 ] @@ -625,10 +625,10 @@ is_contract_deployment: 1 args_hash: 0x1122 return_values: [ 0x1222 0x1223 0x1224 0x1225 ] -read_requests: [ 0x1322 0x1323 0x1324 0x1325 ] -new_commitments: [ 0x1422 0x1423 0x1424 0x1425 ] -new_nullifiers: [ 0x1522 0x1523 0x1524 0x1525 ] -nullified_commitments: [ 0x1532 0x1533 0x1534 0x1535 ] +read_requests: [ 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 ] +new_commitments: [ 0x1422 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 ] +new_nullifiers: [ 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 ] +nullified_commitments: [ 0x1532 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 ] private_call_stack: [ 0x1622 0x1623 0x1624 0x1625 ] public_call_stack: [ 0x1722 0x1723 0x1724 0x1725 ] new_l2_to_l1_msgs: [ 0x1822 0x1823 ] @@ -676,10 +676,10 @@ is_contract_deployment: 1 args_hash: 0x1123 return_values: [ 0x1223 0x1224 0x1225 0x1226 ] -read_requests: [ 0x1323 0x1324 0x1325 0x1326 ] -new_commitments: [ 0x1423 0x1424 0x1425 0x1426 ] -new_nullifiers: [ 0x1523 0x1524 0x1525 0x1526 ] -nullified_commitments: [ 0x1533 0x1534 0x1535 0x1536 ] +read_requests: [ 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 0x1342 ] +new_commitments: [ 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 0x1432 ] +new_nullifiers: [ 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 0x1532 ] +nullified_commitments: [ 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 0x1542 ] private_call_stack: [ 0x1623 0x1624 0x1625 0x1626 ] public_call_stack: [ 0x1723 0x1724 0x1725 0x1726 ] new_l2_to_l1_msgs: [ 0x1823 0x1824 ] @@ -727,10 +727,10 @@ is_contract_deployment: 1 args_hash: 0x1124 return_values: [ 0x1224 0x1225 0x1226 0x1227 ] -read_requests: [ 0x1324 0x1325 0x1326 0x1327 ] -new_commitments: [ 0x1424 0x1425 0x1426 0x1427 ] -new_nullifiers: [ 0x1524 0x1525 0x1526 0x1527 ] -nullified_commitments: [ 0x1534 0x1535 0x1536 0x1537 ] +read_requests: [ 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 0x1342 0x1343 ] +new_commitments: [ 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 0x1432 0x1433 ] +new_nullifiers: [ 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 0x1532 0x1533 ] +nullified_commitments: [ 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 0x1542 0x1543 ] private_call_stack: [ 0x1624 0x1625 0x1626 0x1627 ] public_call_stack: [ 0x1724 0x1725 0x1726 0x1727 ] new_l2_to_l1_msgs: [ 0x1824 0x1825 ] @@ -792,6 +792,118 @@ hint_to_commitment: 0x0 leaf_index: 0x1074 sibling_path: [ 0x1075 0x1076 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 ] is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1075 +sibling_path: [ 0x1076 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1076 +sibling_path: [ 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1077 +sibling_path: [ 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1078 +sibling_path: [ 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1079 +sibling_path: [ 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107a +sibling_path: [ 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107b +sibling_path: [ 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107c +sibling_path: [ 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107d +sibling_path: [ 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107e +sibling_path: [ 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107f +sibling_path: [ 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1080 +sibling_path: [ 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1081 +sibling_path: [ 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1082 +sibling_path: [ 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1083 +sibling_path: [ 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1084 +sibling_path: [ 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1085 +sibling_path: [ 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1086 +sibling_path: [ 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1087 +sibling_path: [ 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1088 +sibling_path: [ 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1089 +sibling_path: [ 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108a +sibling_path: [ 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108b +sibling_path: [ 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108c +sibling_path: [ 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108d +sibling_path: [ 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108e +sibling_path: [ 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108f +sibling_path: [ 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae 0x10af ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1090 +sibling_path: [ 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae 0x10af 0x10b0 ] +is_transient: 0 hint_to_commitment: 0x0 ] portal_contract_address: 0x4141414141414141414141414141414141414141 @@ -816,10 +928,10 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x100 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -1034,10 +1146,10 @@ is_contract_deployment: 1 args_hash: 0x1111 return_values: [ 0x1211 0x1212 0x1213 0x1214 ] -read_requests: [ 0x1311 0x1312 0x1313 0x1314 ] -new_commitments: [ 0x1411 0x1412 0x1413 0x1414 ] -new_nullifiers: [ 0x1511 0x1512 0x1513 0x1514 ] -nullified_commitments: [ 0x1521 0x1522 0x1523 0x1524 ] +read_requests: [ 0x1311 0x1312 0x1313 0x1314 0x1315 0x1316 0x1317 0x1318 0x1319 0x131a 0x131b 0x131c 0x131d 0x131e 0x131f 0x1320 0x1321 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 ] +new_commitments: [ 0x1411 0x1412 0x1413 0x1414 0x1415 0x1416 0x1417 0x1418 0x1419 0x141a 0x141b 0x141c 0x141d 0x141e 0x141f 0x1420 ] +new_nullifiers: [ 0x1511 0x1512 0x1513 0x1514 0x1515 0x1516 0x1517 0x1518 0x1519 0x151a 0x151b 0x151c 0x151d 0x151e 0x151f 0x1520 ] +nullified_commitments: [ 0x1521 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 ] private_call_stack: [ 0x1611 0x1612 0x1613 0x1614 ] public_call_stack: [ 0x1711 0x1712 0x1713 0x1714 ] new_l2_to_l1_msgs: [ 0x1811 0x1812 ] @@ -1086,10 +1198,10 @@ is_contract_deployment: 1 args_hash: 0x1121 return_values: [ 0x1221 0x1222 0x1223 0x1224 ] -read_requests: [ 0x1321 0x1322 0x1323 0x1324 ] -new_commitments: [ 0x1421 0x1422 0x1423 0x1424 ] -new_nullifiers: [ 0x1521 0x1522 0x1523 0x1524 ] -nullified_commitments: [ 0x1531 0x1532 0x1533 0x1534 ] +read_requests: [ 0x1321 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 ] +new_commitments: [ 0x1421 0x1422 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 ] +new_nullifiers: [ 0x1521 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 ] +nullified_commitments: [ 0x1531 0x1532 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 ] private_call_stack: [ 0x1621 0x1622 0x1623 0x1624 ] public_call_stack: [ 0x1721 0x1722 0x1723 0x1724 ] new_l2_to_l1_msgs: [ 0x1821 0x1822 ] @@ -1137,10 +1249,10 @@ is_contract_deployment: 1 args_hash: 0x1122 return_values: [ 0x1222 0x1223 0x1224 0x1225 ] -read_requests: [ 0x1322 0x1323 0x1324 0x1325 ] -new_commitments: [ 0x1422 0x1423 0x1424 0x1425 ] -new_nullifiers: [ 0x1522 0x1523 0x1524 0x1525 ] -nullified_commitments: [ 0x1532 0x1533 0x1534 0x1535 ] +read_requests: [ 0x1322 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 ] +new_commitments: [ 0x1422 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 ] +new_nullifiers: [ 0x1522 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 ] +nullified_commitments: [ 0x1532 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 ] private_call_stack: [ 0x1622 0x1623 0x1624 0x1625 ] public_call_stack: [ 0x1722 0x1723 0x1724 0x1725 ] new_l2_to_l1_msgs: [ 0x1822 0x1823 ] @@ -1188,10 +1300,10 @@ is_contract_deployment: 1 args_hash: 0x1123 return_values: [ 0x1223 0x1224 0x1225 0x1226 ] -read_requests: [ 0x1323 0x1324 0x1325 0x1326 ] -new_commitments: [ 0x1423 0x1424 0x1425 0x1426 ] -new_nullifiers: [ 0x1523 0x1524 0x1525 0x1526 ] -nullified_commitments: [ 0x1533 0x1534 0x1535 0x1536 ] +read_requests: [ 0x1323 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 0x1342 ] +new_commitments: [ 0x1423 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 0x1432 ] +new_nullifiers: [ 0x1523 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 0x1532 ] +nullified_commitments: [ 0x1533 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 0x1542 ] private_call_stack: [ 0x1623 0x1624 0x1625 0x1626 ] public_call_stack: [ 0x1723 0x1724 0x1725 0x1726 ] new_l2_to_l1_msgs: [ 0x1823 0x1824 ] @@ -1239,10 +1351,10 @@ is_contract_deployment: 1 args_hash: 0x1124 return_values: [ 0x1224 0x1225 0x1226 0x1227 ] -read_requests: [ 0x1324 0x1325 0x1326 0x1327 ] -new_commitments: [ 0x1424 0x1425 0x1426 0x1427 ] -new_nullifiers: [ 0x1524 0x1525 0x1526 0x1527 ] -nullified_commitments: [ 0x1534 0x1535 0x1536 0x1537 ] +read_requests: [ 0x1324 0x1325 0x1326 0x1327 0x1328 0x1329 0x132a 0x132b 0x132c 0x132d 0x132e 0x132f 0x1330 0x1331 0x1332 0x1333 0x1334 0x1335 0x1336 0x1337 0x1338 0x1339 0x133a 0x133b 0x133c 0x133d 0x133e 0x133f 0x1340 0x1341 0x1342 0x1343 ] +new_commitments: [ 0x1424 0x1425 0x1426 0x1427 0x1428 0x1429 0x142a 0x142b 0x142c 0x142d 0x142e 0x142f 0x1430 0x1431 0x1432 0x1433 ] +new_nullifiers: [ 0x1524 0x1525 0x1526 0x1527 0x1528 0x1529 0x152a 0x152b 0x152c 0x152d 0x152e 0x152f 0x1530 0x1531 0x1532 0x1533 ] +nullified_commitments: [ 0x1534 0x1535 0x1536 0x1537 0x1538 0x1539 0x153a 0x153b 0x153c 0x153d 0x153e 0x153f 0x1540 0x1541 0x1542 0x1543 ] private_call_stack: [ 0x1624 0x1625 0x1626 0x1627 ] public_call_stack: [ 0x1724 0x1725 0x1726 0x1727 ] new_l2_to_l1_msgs: [ 0x1824 0x1825 ] @@ -1304,6 +1416,118 @@ hint_to_commitment: 0x0 leaf_index: 0x1074 sibling_path: [ 0x1075 0x1076 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 ] is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1075 +sibling_path: [ 0x1076 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1076 +sibling_path: [ 0x1077 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1077 +sibling_path: [ 0x1078 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1078 +sibling_path: [ 0x1079 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1079 +sibling_path: [ 0x107a 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107a +sibling_path: [ 0x107b 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107b +sibling_path: [ 0x107c 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107c +sibling_path: [ 0x107d 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107d +sibling_path: [ 0x107e 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107e +sibling_path: [ 0x107f 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x107f +sibling_path: [ 0x1080 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1080 +sibling_path: [ 0x1081 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1081 +sibling_path: [ 0x1082 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1082 +sibling_path: [ 0x1083 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1083 +sibling_path: [ 0x1084 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1084 +sibling_path: [ 0x1085 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1085 +sibling_path: [ 0x1086 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1086 +sibling_path: [ 0x1087 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1087 +sibling_path: [ 0x1088 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1088 +sibling_path: [ 0x1089 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1089 +sibling_path: [ 0x108a 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108a +sibling_path: [ 0x108b 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108b +sibling_path: [ 0x108c 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108c +sibling_path: [ 0x108d 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108d +sibling_path: [ 0x108e 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108e +sibling_path: [ 0x108f 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x108f +sibling_path: [ 0x1090 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae 0x10af ] +is_transient: 0 +hint_to_commitment: 0x0 + leaf_index: 0x1090 +sibling_path: [ 0x1091 0x1092 0x1093 0x1094 0x1095 0x1096 0x1097 0x1098 0x1099 0x109a 0x109b 0x109c 0x109d 0x109e 0x109f 0x10a0 0x10a1 0x10a2 0x10a3 0x10a4 0x10a5 0x10a6 0x10a7 0x10a8 0x10a9 0x10aa 0x10ab 0x10ac 0x10ad 0x10ae 0x10af 0x10b0 ] +is_transient: 0 hint_to_commitment: 0x0 ] portal_contract_address: 0x4141414141414141414141414141414141414141 @@ -1326,10 +1550,10 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x100 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -1527,9 +1751,9 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -1647,10 +1871,10 @@ public_inputs: [ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 -read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] -new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] -nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] +read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f 0xa0 0xa1 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf 0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x100 ] +new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11a 0x11b 0x11c 0x11d 0x11e 0x11f 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12a 0x12b 0x12c 0x12d 0x12e 0x12f 0x130 0x131 0x132 0x133 0x134 0x135 0x136 0x137 0x138 0x139 0x13a 0x13b 0x13c 0x13d 0x13e 0x13f 0x140 ] +new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f 0x240 ] +nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f 0x340 ] private_call_stack: [ 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 ] public_call_stack: [ 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 ] new_l2_to_l1_msgs: [ 0x601 0x602 ] @@ -1947,9 +2171,9 @@ current_value: 0x1 storage_slot: 0x0 current_value: 0x1 ] -public_call_stack: [ 0x27af4efc36aac835e983ad9260648df64542a6522d5c8e8c22c89837897ee36b 0x2b29ad02f22800007608ee029ebdec89254794651628fc2497b462ab68a9d5e7 0x259cba5b82a2126429506d138c5905de6c0854e8135f8ccf9876c12da9cbaadb 0x6034ca46f5601bb8fb9af885e4ba748e8ff38c0fa747b17d63de339d241698a ] -new_commitments: [ 0x1711 0x1712 0x0 0x0 ] -new_nullifiers: [ 0x1811 0x1812 0x0 0x0 ] +public_call_stack: [ 0x11061185af966fec11642be3f38d53ce73eff1519bc9848e815214acdfed392b 0x1618d0171e58ab734f159be27c87cccd22f5236cf64dc5f1e70f0090e74f1143 0x6c5386221ce86dc4fb68ba3cfa654c76de5482508f3a21a15d9cf5b07f467ad 0xc35f2d4154263d4393f035f22848438aa40074b11c3a2643e76c501f0581827 ] +new_commitments: [ 0x1711 0x1712 0x1713 0x1714 0x1715 0x1716 0x1717 0x1718 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x1811 0x1812 0x1813 0x1814 0x1815 0x1816 0x1817 0x1818 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1911 0x0 ] unencrypted_logs_hash: [ 0x1912 0x0 ] unencrypted_log_preimages_length: 0x1913 @@ -2067,8 +2291,8 @@ current_value: 0x1 current_value: 0x1 ] public_call_stack: [ 0x1911 0x1912 0x0 0x0 ] -new_commitments: [ 0x1a11 0x1a12 0x0 0x0 ] -new_nullifiers: [ 0x1b11 0x1b12 0x0 0x0 ] +new_commitments: [ 0x1a11 0x1a12 0x1a13 0x1a14 0x1a15 0x1a16 0x1a17 0x1a18 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x1b11 0x1b12 0x1b13 0x1b14 0x1b15 0x1b16 0x1b17 0x1b18 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1c11 0x0 ] unencrypted_logs_hash: [ 0x1c12 0x0 ] unencrypted_log_preimages_length: 0x1c13 @@ -2185,8 +2409,8 @@ current_value: 0x1 current_value: 0x1 ] public_call_stack: [ 0x1912 0x1913 0x0 0x0 ] -new_commitments: [ 0x1a12 0x1a13 0x0 0x0 ] -new_nullifiers: [ 0x1b12 0x1b13 0x0 0x0 ] +new_commitments: [ 0x1a12 0x1a13 0x1a14 0x1a15 0x1a16 0x1a17 0x1a18 0x1a19 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x1b12 0x1b13 0x1b14 0x1b15 0x1b16 0x1b17 0x1b18 0x1b19 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1c12 0x0 ] unencrypted_logs_hash: [ 0x1c13 0x0 ] unencrypted_log_preimages_length: 0x1c14 @@ -2303,8 +2527,8 @@ current_value: 0x1 current_value: 0x1 ] public_call_stack: [ 0x1913 0x1914 0x0 0x0 ] -new_commitments: [ 0x1a13 0x1a14 0x0 0x0 ] -new_nullifiers: [ 0x1b13 0x1b14 0x0 0x0 ] +new_commitments: [ 0x1a13 0x1a14 0x1a15 0x1a16 0x1a17 0x1a18 0x1a19 0x1a1a 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x1b13 0x1b14 0x1b15 0x1b16 0x1b17 0x1b18 0x1b19 0x1b1a 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1c13 0x0 ] unencrypted_logs_hash: [ 0x1c14 0x0 ] unencrypted_log_preimages_length: 0x1c15 @@ -2421,8 +2645,8 @@ current_value: 0x1 current_value: 0x1 ] public_call_stack: [ 0x1914 0x1915 0x0 0x0 ] -new_commitments: [ 0x1a14 0x1a15 0x0 0x0 ] -new_nullifiers: [ 0x1b14 0x1b15 0x0 0x0 ] +new_commitments: [ 0x1a14 0x1a15 0x1a16 0x1a17 0x1a18 0x1a19 0x1a1a 0x1a1b 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] +new_nullifiers: [ 0x1b14 0x1b15 0x1b16 0x1b17 0x1b18 0x1b19 0x1b1a 0x1b1b 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1c14 0x0 ] unencrypted_logs_hash: [ 0x1c15 0x0 ] unencrypted_log_preimages_length: 0x1c16 diff --git a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap index 7625a2b24b0..5ca3fc3bd79 100644 --- a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap @@ -15,10 +15,10 @@ public_inputs: [ proof_witness_indices: [ 106 107 108 109 10a 10b ] has_data: 0 -read_requests: [ 0x180 0x181 0x182 0x183 0x184 0x185 0x186 0x187 0x188 0x189 0x18a 0x18b 0x18c 0x18d 0x18e 0x18f ] -new_commitments: [ 0x200 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f ] -new_nullifiers: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f ] -nullified_commitments: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f ] +read_requests: [ 0x180 0x181 0x182 0x183 0x184 0x185 0x186 0x187 0x188 0x189 0x18a 0x18b 0x18c 0x18d 0x18e 0x18f 0x190 0x191 0x192 0x193 0x194 0x195 0x196 0x197 0x198 0x199 0x19a 0x19b 0x19c 0x19d 0x19e 0x19f 0x1a0 0x1a1 0x1a2 0x1a3 0x1a4 0x1a5 0x1a6 0x1a7 0x1a8 0x1a9 0x1aa 0x1ab 0x1ac 0x1ad 0x1ae 0x1af 0x1b0 0x1b1 0x1b2 0x1b3 0x1b4 0x1b5 0x1b6 0x1b7 0x1b8 0x1b9 0x1ba 0x1bb 0x1bc 0x1bd 0x1be 0x1bf 0x1c0 0x1c1 0x1c2 0x1c3 0x1c4 0x1c5 0x1c6 0x1c7 0x1c8 0x1c9 0x1ca 0x1cb 0x1cc 0x1cd 0x1ce 0x1cf 0x1d0 0x1d1 0x1d2 0x1d3 0x1d4 0x1d5 0x1d6 0x1d7 0x1d8 0x1d9 0x1da 0x1db 0x1dc 0x1dd 0x1de 0x1df 0x1e0 0x1e1 0x1e2 0x1e3 0x1e4 0x1e5 0x1e6 0x1e7 0x1e8 0x1e9 0x1ea 0x1eb 0x1ec 0x1ed 0x1ee 0x1ef 0x1f0 0x1f1 0x1f2 0x1f3 0x1f4 0x1f5 0x1f6 0x1f7 0x1f8 0x1f9 0x1fa 0x1fb 0x1fc 0x1fd 0x1fe 0x1ff ] +new_commitments: [ 0x200 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 0x211 0x212 0x213 0x214 0x215 0x216 0x217 0x218 0x219 0x21a 0x21b 0x21c 0x21d 0x21e 0x21f 0x220 0x221 0x222 0x223 0x224 0x225 0x226 0x227 0x228 0x229 0x22a 0x22b 0x22c 0x22d 0x22e 0x22f 0x230 0x231 0x232 0x233 0x234 0x235 0x236 0x237 0x238 0x239 0x23a 0x23b 0x23c 0x23d 0x23e 0x23f ] +new_nullifiers: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f ] +nullified_commitments: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f 0x410 0x411 0x412 0x413 0x414 0x415 0x416 0x417 0x418 0x419 0x41a 0x41b 0x41c 0x41d 0x41e 0x41f 0x420 0x421 0x422 0x423 0x424 0x425 0x426 0x427 0x428 0x429 0x42a 0x42b 0x42c 0x42d 0x42e 0x42f 0x430 0x431 0x432 0x433 0x434 0x435 0x436 0x437 0x438 0x439 0x43a 0x43b 0x43c 0x43d 0x43e 0x43f ] private_call_stack: [ 0x500 0x501 0x502 0x503 0x504 0x505 0x506 0x507 ] public_call_stack: [ 0x600 0x601 0x602 0x603 0x604 0x605 0x606 0x607 ] new_l2_to_l1_msgs: [ 0x700 0x701 ] @@ -226,10 +226,10 @@ public_inputs: [ proof_witness_indices: [ 206 207 208 209 20a 20b ] has_data: 0 -read_requests: [ 0x280 0x281 0x282 0x283 0x284 0x285 0x286 0x287 0x288 0x289 0x28a 0x28b 0x28c 0x28d 0x28e 0x28f ] -new_commitments: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f ] -new_nullifiers: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f ] -nullified_commitments: [ 0x500 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 0x509 0x50a 0x50b 0x50c 0x50d 0x50e 0x50f ] +read_requests: [ 0x280 0x281 0x282 0x283 0x284 0x285 0x286 0x287 0x288 0x289 0x28a 0x28b 0x28c 0x28d 0x28e 0x28f 0x290 0x291 0x292 0x293 0x294 0x295 0x296 0x297 0x298 0x299 0x29a 0x29b 0x29c 0x29d 0x29e 0x29f 0x2a0 0x2a1 0x2a2 0x2a3 0x2a4 0x2a5 0x2a6 0x2a7 0x2a8 0x2a9 0x2aa 0x2ab 0x2ac 0x2ad 0x2ae 0x2af 0x2b0 0x2b1 0x2b2 0x2b3 0x2b4 0x2b5 0x2b6 0x2b7 0x2b8 0x2b9 0x2ba 0x2bb 0x2bc 0x2bd 0x2be 0x2bf 0x2c0 0x2c1 0x2c2 0x2c3 0x2c4 0x2c5 0x2c6 0x2c7 0x2c8 0x2c9 0x2ca 0x2cb 0x2cc 0x2cd 0x2ce 0x2cf 0x2d0 0x2d1 0x2d2 0x2d3 0x2d4 0x2d5 0x2d6 0x2d7 0x2d8 0x2d9 0x2da 0x2db 0x2dc 0x2dd 0x2de 0x2df 0x2e0 0x2e1 0x2e2 0x2e3 0x2e4 0x2e5 0x2e6 0x2e7 0x2e8 0x2e9 0x2ea 0x2eb 0x2ec 0x2ed 0x2ee 0x2ef 0x2f0 0x2f1 0x2f2 0x2f3 0x2f4 0x2f5 0x2f6 0x2f7 0x2f8 0x2f9 0x2fa 0x2fb 0x2fc 0x2fd 0x2fe 0x2ff ] +new_commitments: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 0x311 0x312 0x313 0x314 0x315 0x316 0x317 0x318 0x319 0x31a 0x31b 0x31c 0x31d 0x31e 0x31f 0x320 0x321 0x322 0x323 0x324 0x325 0x326 0x327 0x328 0x329 0x32a 0x32b 0x32c 0x32d 0x32e 0x32f 0x330 0x331 0x332 0x333 0x334 0x335 0x336 0x337 0x338 0x339 0x33a 0x33b 0x33c 0x33d 0x33e 0x33f ] +new_nullifiers: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f 0x410 0x411 0x412 0x413 0x414 0x415 0x416 0x417 0x418 0x419 0x41a 0x41b 0x41c 0x41d 0x41e 0x41f 0x420 0x421 0x422 0x423 0x424 0x425 0x426 0x427 0x428 0x429 0x42a 0x42b 0x42c 0x42d 0x42e 0x42f 0x430 0x431 0x432 0x433 0x434 0x435 0x436 0x437 0x438 0x439 0x43a 0x43b 0x43c 0x43d 0x43e 0x43f ] +nullified_commitments: [ 0x500 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 0x509 0x50a 0x50b 0x50c 0x50d 0x50e 0x50f 0x510 0x511 0x512 0x513 0x514 0x515 0x516 0x517 0x518 0x519 0x51a 0x51b 0x51c 0x51d 0x51e 0x51f 0x520 0x521 0x522 0x523 0x524 0x525 0x526 0x527 0x528 0x529 0x52a 0x52b 0x52c 0x52d 0x52e 0x52f 0x530 0x531 0x532 0x533 0x534 0x535 0x536 0x537 0x538 0x539 0x53a 0x53b 0x53c 0x53d 0x53e 0x53f ] private_call_stack: [ 0x600 0x601 0x602 0x603 0x604 0x605 0x606 0x607 ] public_call_stack: [ 0x700 0x701 0x702 0x703 0x704 0x705 0x706 0x707 ] new_l2_to_l1_msgs: [ 0x800 0x801 ] @@ -533,6 +533,294 @@ next_index: 121e leaf_value: 0x101f next_value: 0x111f next_index: 121f + leaf_value: 0x1020 +next_value: 0x1120 +next_index: 1220 + leaf_value: 0x1021 +next_value: 0x1121 +next_index: 1221 + leaf_value: 0x1022 +next_value: 0x1122 +next_index: 1222 + leaf_value: 0x1023 +next_value: 0x1123 +next_index: 1223 + leaf_value: 0x1024 +next_value: 0x1124 +next_index: 1224 + leaf_value: 0x1025 +next_value: 0x1125 +next_index: 1225 + leaf_value: 0x1026 +next_value: 0x1126 +next_index: 1226 + leaf_value: 0x1027 +next_value: 0x1127 +next_index: 1227 + leaf_value: 0x1028 +next_value: 0x1128 +next_index: 1228 + leaf_value: 0x1029 +next_value: 0x1129 +next_index: 1229 + leaf_value: 0x102a +next_value: 0x112a +next_index: 122a + leaf_value: 0x102b +next_value: 0x112b +next_index: 122b + leaf_value: 0x102c +next_value: 0x112c +next_index: 122c + leaf_value: 0x102d +next_value: 0x112d +next_index: 122d + leaf_value: 0x102e +next_value: 0x112e +next_index: 122e + leaf_value: 0x102f +next_value: 0x112f +next_index: 122f + leaf_value: 0x1030 +next_value: 0x1130 +next_index: 1230 + leaf_value: 0x1031 +next_value: 0x1131 +next_index: 1231 + leaf_value: 0x1032 +next_value: 0x1132 +next_index: 1232 + leaf_value: 0x1033 +next_value: 0x1133 +next_index: 1233 + leaf_value: 0x1034 +next_value: 0x1134 +next_index: 1234 + leaf_value: 0x1035 +next_value: 0x1135 +next_index: 1235 + leaf_value: 0x1036 +next_value: 0x1136 +next_index: 1236 + leaf_value: 0x1037 +next_value: 0x1137 +next_index: 1237 + leaf_value: 0x1038 +next_value: 0x1138 +next_index: 1238 + leaf_value: 0x1039 +next_value: 0x1139 +next_index: 1239 + leaf_value: 0x103a +next_value: 0x113a +next_index: 123a + leaf_value: 0x103b +next_value: 0x113b +next_index: 123b + leaf_value: 0x103c +next_value: 0x113c +next_index: 123c + leaf_value: 0x103d +next_value: 0x113d +next_index: 123d + leaf_value: 0x103e +next_value: 0x113e +next_index: 123e + leaf_value: 0x103f +next_value: 0x113f +next_index: 123f + leaf_value: 0x1040 +next_value: 0x1140 +next_index: 1240 + leaf_value: 0x1041 +next_value: 0x1141 +next_index: 1241 + leaf_value: 0x1042 +next_value: 0x1142 +next_index: 1242 + leaf_value: 0x1043 +next_value: 0x1143 +next_index: 1243 + leaf_value: 0x1044 +next_value: 0x1144 +next_index: 1244 + leaf_value: 0x1045 +next_value: 0x1145 +next_index: 1245 + leaf_value: 0x1046 +next_value: 0x1146 +next_index: 1246 + leaf_value: 0x1047 +next_value: 0x1147 +next_index: 1247 + leaf_value: 0x1048 +next_value: 0x1148 +next_index: 1248 + leaf_value: 0x1049 +next_value: 0x1149 +next_index: 1249 + leaf_value: 0x104a +next_value: 0x114a +next_index: 124a + leaf_value: 0x104b +next_value: 0x114b +next_index: 124b + leaf_value: 0x104c +next_value: 0x114c +next_index: 124c + leaf_value: 0x104d +next_value: 0x114d +next_index: 124d + leaf_value: 0x104e +next_value: 0x114e +next_index: 124e + leaf_value: 0x104f +next_value: 0x114f +next_index: 124f + leaf_value: 0x1050 +next_value: 0x1150 +next_index: 1250 + leaf_value: 0x1051 +next_value: 0x1151 +next_index: 1251 + leaf_value: 0x1052 +next_value: 0x1152 +next_index: 1252 + leaf_value: 0x1053 +next_value: 0x1153 +next_index: 1253 + leaf_value: 0x1054 +next_value: 0x1154 +next_index: 1254 + leaf_value: 0x1055 +next_value: 0x1155 +next_index: 1255 + leaf_value: 0x1056 +next_value: 0x1156 +next_index: 1256 + leaf_value: 0x1057 +next_value: 0x1157 +next_index: 1257 + leaf_value: 0x1058 +next_value: 0x1158 +next_index: 1258 + leaf_value: 0x1059 +next_value: 0x1159 +next_index: 1259 + leaf_value: 0x105a +next_value: 0x115a +next_index: 125a + leaf_value: 0x105b +next_value: 0x115b +next_index: 125b + leaf_value: 0x105c +next_value: 0x115c +next_index: 125c + leaf_value: 0x105d +next_value: 0x115d +next_index: 125d + leaf_value: 0x105e +next_value: 0x115e +next_index: 125e + leaf_value: 0x105f +next_value: 0x115f +next_index: 125f + leaf_value: 0x1060 +next_value: 0x1160 +next_index: 1260 + leaf_value: 0x1061 +next_value: 0x1161 +next_index: 1261 + leaf_value: 0x1062 +next_value: 0x1162 +next_index: 1262 + leaf_value: 0x1063 +next_value: 0x1163 +next_index: 1263 + leaf_value: 0x1064 +next_value: 0x1164 +next_index: 1264 + leaf_value: 0x1065 +next_value: 0x1165 +next_index: 1265 + leaf_value: 0x1066 +next_value: 0x1166 +next_index: 1266 + leaf_value: 0x1067 +next_value: 0x1167 +next_index: 1267 + leaf_value: 0x1068 +next_value: 0x1168 +next_index: 1268 + leaf_value: 0x1069 +next_value: 0x1169 +next_index: 1269 + leaf_value: 0x106a +next_value: 0x116a +next_index: 126a + leaf_value: 0x106b +next_value: 0x116b +next_index: 126b + leaf_value: 0x106c +next_value: 0x116c +next_index: 126c + leaf_value: 0x106d +next_value: 0x116d +next_index: 126d + leaf_value: 0x106e +next_value: 0x116e +next_index: 126e + leaf_value: 0x106f +next_value: 0x116f +next_index: 126f + leaf_value: 0x1070 +next_value: 0x1170 +next_index: 1270 + leaf_value: 0x1071 +next_value: 0x1171 +next_index: 1271 + leaf_value: 0x1072 +next_value: 0x1172 +next_index: 1272 + leaf_value: 0x1073 +next_value: 0x1173 +next_index: 1273 + leaf_value: 0x1074 +next_value: 0x1174 +next_index: 1274 + leaf_value: 0x1075 +next_value: 0x1175 +next_index: 1275 + leaf_value: 0x1076 +next_value: 0x1176 +next_index: 1276 + leaf_value: 0x1077 +next_value: 0x1177 +next_index: 1277 + leaf_value: 0x1078 +next_value: 0x1178 +next_index: 1278 + leaf_value: 0x1079 +next_value: 0x1179 +next_index: 1279 + leaf_value: 0x107a +next_value: 0x117a +next_index: 127a + leaf_value: 0x107b +next_value: 0x117b +next_index: 127b + leaf_value: 0x107c +next_value: 0x117c +next_index: 127c + leaf_value: 0x107d +next_value: 0x117d +next_index: 127d + leaf_value: 0x107e +next_value: 0x117e +next_index: 127e + leaf_value: 0x107f +next_value: 0x117f +next_index: 127f ] low_nullifier_membership_witness: [ leaf_index: 0x2000 sibling_path: [ 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 0x2006 0x2007 0x2008 0x2009 0x200a 0x200b 0x200c 0x200d 0x200e 0x200f ] @@ -598,9 +886,201 @@ sibling_path: [ 0x201d 0x201e 0x201f 0x2020 0x2021 0x2022 0x2023 0x2024 0x2025 0 sibling_path: [ 0x201e 0x201f 0x2020 0x2021 0x2022 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d ] leaf_index: 0x201f sibling_path: [ 0x201f 0x2020 0x2021 0x2022 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e ] + leaf_index: 0x2020 +sibling_path: [ 0x2020 0x2021 0x2022 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f ] + leaf_index: 0x2021 +sibling_path: [ 0x2021 0x2022 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 ] + leaf_index: 0x2022 +sibling_path: [ 0x2022 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 ] + leaf_index: 0x2023 +sibling_path: [ 0x2023 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 ] + leaf_index: 0x2024 +sibling_path: [ 0x2024 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 ] + leaf_index: 0x2025 +sibling_path: [ 0x2025 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 ] + leaf_index: 0x2026 +sibling_path: [ 0x2026 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 ] + leaf_index: 0x2027 +sibling_path: [ 0x2027 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 ] + leaf_index: 0x2028 +sibling_path: [ 0x2028 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 ] + leaf_index: 0x2029 +sibling_path: [ 0x2029 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 ] + leaf_index: 0x202a +sibling_path: [ 0x202a 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 ] + leaf_index: 0x202b +sibling_path: [ 0x202b 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a ] + leaf_index: 0x202c +sibling_path: [ 0x202c 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b ] + leaf_index: 0x202d +sibling_path: [ 0x202d 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c ] + leaf_index: 0x202e +sibling_path: [ 0x202e 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d ] + leaf_index: 0x202f +sibling_path: [ 0x202f 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e ] + leaf_index: 0x2030 +sibling_path: [ 0x2030 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f ] + leaf_index: 0x2031 +sibling_path: [ 0x2031 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 ] + leaf_index: 0x2032 +sibling_path: [ 0x2032 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 ] + leaf_index: 0x2033 +sibling_path: [ 0x2033 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 ] + leaf_index: 0x2034 +sibling_path: [ 0x2034 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 ] + leaf_index: 0x2035 +sibling_path: [ 0x2035 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 ] + leaf_index: 0x2036 +sibling_path: [ 0x2036 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 ] + leaf_index: 0x2037 +sibling_path: [ 0x2037 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 ] + leaf_index: 0x2038 +sibling_path: [ 0x2038 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 ] + leaf_index: 0x2039 +sibling_path: [ 0x2039 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 ] + leaf_index: 0x203a +sibling_path: [ 0x203a 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 ] + leaf_index: 0x203b +sibling_path: [ 0x203b 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a ] + leaf_index: 0x203c +sibling_path: [ 0x203c 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b ] + leaf_index: 0x203d +sibling_path: [ 0x203d 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c ] + leaf_index: 0x203e +sibling_path: [ 0x203e 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d ] + leaf_index: 0x203f +sibling_path: [ 0x203f 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e ] + leaf_index: 0x2040 +sibling_path: [ 0x2040 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f ] + leaf_index: 0x2041 +sibling_path: [ 0x2041 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 ] + leaf_index: 0x2042 +sibling_path: [ 0x2042 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 ] + leaf_index: 0x2043 +sibling_path: [ 0x2043 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 ] + leaf_index: 0x2044 +sibling_path: [ 0x2044 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 ] + leaf_index: 0x2045 +sibling_path: [ 0x2045 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 ] + leaf_index: 0x2046 +sibling_path: [ 0x2046 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 ] + leaf_index: 0x2047 +sibling_path: [ 0x2047 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 ] + leaf_index: 0x2048 +sibling_path: [ 0x2048 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 ] + leaf_index: 0x2049 +sibling_path: [ 0x2049 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 ] + leaf_index: 0x204a +sibling_path: [ 0x204a 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 ] + leaf_index: 0x204b +sibling_path: [ 0x204b 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a ] + leaf_index: 0x204c +sibling_path: [ 0x204c 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b ] + leaf_index: 0x204d +sibling_path: [ 0x204d 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c ] + leaf_index: 0x204e +sibling_path: [ 0x204e 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d ] + leaf_index: 0x204f +sibling_path: [ 0x204f 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e ] + leaf_index: 0x2050 +sibling_path: [ 0x2050 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f ] + leaf_index: 0x2051 +sibling_path: [ 0x2051 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 ] + leaf_index: 0x2052 +sibling_path: [ 0x2052 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 ] + leaf_index: 0x2053 +sibling_path: [ 0x2053 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 ] + leaf_index: 0x2054 +sibling_path: [ 0x2054 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 ] + leaf_index: 0x2055 +sibling_path: [ 0x2055 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 ] + leaf_index: 0x2056 +sibling_path: [ 0x2056 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 ] + leaf_index: 0x2057 +sibling_path: [ 0x2057 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 ] + leaf_index: 0x2058 +sibling_path: [ 0x2058 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 ] + leaf_index: 0x2059 +sibling_path: [ 0x2059 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 ] + leaf_index: 0x205a +sibling_path: [ 0x205a 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 ] + leaf_index: 0x205b +sibling_path: [ 0x205b 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a ] + leaf_index: 0x205c +sibling_path: [ 0x205c 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b ] + leaf_index: 0x205d +sibling_path: [ 0x205d 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c ] + leaf_index: 0x205e +sibling_path: [ 0x205e 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d ] + leaf_index: 0x205f +sibling_path: [ 0x205f 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e ] + leaf_index: 0x2060 +sibling_path: [ 0x2060 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f ] + leaf_index: 0x2061 +sibling_path: [ 0x2061 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 ] + leaf_index: 0x2062 +sibling_path: [ 0x2062 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 ] + leaf_index: 0x2063 +sibling_path: [ 0x2063 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 ] + leaf_index: 0x2064 +sibling_path: [ 0x2064 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 ] + leaf_index: 0x2065 +sibling_path: [ 0x2065 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 ] + leaf_index: 0x2066 +sibling_path: [ 0x2066 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 ] + leaf_index: 0x2067 +sibling_path: [ 0x2067 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 ] + leaf_index: 0x2068 +sibling_path: [ 0x2068 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 ] + leaf_index: 0x2069 +sibling_path: [ 0x2069 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 ] + leaf_index: 0x206a +sibling_path: [ 0x206a 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 ] + leaf_index: 0x206b +sibling_path: [ 0x206b 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a ] + leaf_index: 0x206c +sibling_path: [ 0x206c 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b ] + leaf_index: 0x206d +sibling_path: [ 0x206d 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c ] + leaf_index: 0x206e +sibling_path: [ 0x206e 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d ] + leaf_index: 0x206f +sibling_path: [ 0x206f 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e ] + leaf_index: 0x2070 +sibling_path: [ 0x2070 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f ] + leaf_index: 0x2071 +sibling_path: [ 0x2071 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 ] + leaf_index: 0x2072 +sibling_path: [ 0x2072 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 ] + leaf_index: 0x2073 +sibling_path: [ 0x2073 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 ] + leaf_index: 0x2074 +sibling_path: [ 0x2074 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 ] + leaf_index: 0x2075 +sibling_path: [ 0x2075 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 ] + leaf_index: 0x2076 +sibling_path: [ 0x2076 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 ] + leaf_index: 0x2077 +sibling_path: [ 0x2077 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 ] + leaf_index: 0x2078 +sibling_path: [ 0x2078 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 ] + leaf_index: 0x2079 +sibling_path: [ 0x2079 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 ] + leaf_index: 0x207a +sibling_path: [ 0x207a 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 ] + leaf_index: 0x207b +sibling_path: [ 0x207b 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 0x208a ] + leaf_index: 0x207c +sibling_path: [ 0x207c 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 0x208a 0x208b ] + leaf_index: 0x207d +sibling_path: [ 0x207d 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 0x208a 0x208b 0x208c ] + leaf_index: 0x207e +sibling_path: [ 0x207e 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 0x208a 0x208b 0x208c 0x208d ] + leaf_index: 0x207f +sibling_path: [ 0x207f 0x2080 0x2081 0x2082 0x2083 0x2084 0x2085 0x2086 0x2087 0x2088 0x2089 0x208a 0x208b 0x208c 0x208d 0x208e ] ] -new_commitments_subtree_sibling_path: [ 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005 0x3006 0x3007 0x3008 0x3009 0x300a 0x300b 0x300c 0x300d 0x300e 0x300f 0x3010 0x3011 0x3012 0x3013 0x3014 0x3015 0x3016 0x3017 0x3018 0x3019 0x301a ] -new_nullifiers_subtree_sibling_path: [ 0x4000 0x4001 0x4002 0x4003 0x4004 0x4005 0x4006 0x4007 0x4008 0x4009 0x400a ] +new_commitments_subtree_sibling_path: [ 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005 0x3006 0x3007 0x3008 0x3009 0x300a 0x300b 0x300c 0x300d 0x300e 0x300f 0x3010 0x3011 0x3012 0x3013 0x3014 0x3015 0x3016 0x3017 0x3018 ] +new_nullifiers_subtree_sibling_path: [ 0x4000 0x4001 0x4002 0x4003 0x4004 0x4005 0x4006 0x4007 0x4008 ] new_contracts_subtree_sibling_path: [ 0x5000 0x5001 0x5002 0x5003 0x5004 0x5005 0x5006 0x5007 0x5008 0x5009 0x500a 0x500b 0x500c 0x500d 0x500e ] new_public_data_update_requests_sibling_paths: [ [ 0x6000 0x6001 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd ] [ 0x6001 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe ] [ 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff ] [ 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 ] [ 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 ] [ 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 ] [ 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 ] [ 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 ] [ 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 ] [ 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 ] [ 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 ] [ 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 ] [ 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 ] [ 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a ] [ 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b ] [ 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c ] [ 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d ] [ 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e ] [ 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f ] [ 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 ] [ 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 ] [ 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 ] [ 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 ] [ 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 ] [ 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 ] [ 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 ] [ 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 ] [ 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 ] [ 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 ] [ 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a ] [ 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a 0x611b ] [ 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a 0x611b 0x611c ] ] new_public_data_reads_sibling_paths: [ [ 0x6000 0x6001 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd ] [ 0x6001 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe ] [ 0x6002 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff ] [ 0x6003 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 ] [ 0x6004 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 ] [ 0x6005 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 ] [ 0x6006 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 ] [ 0x6007 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 ] [ 0x6008 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 ] [ 0x6009 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 ] [ 0x600a 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 ] [ 0x600b 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 ] [ 0x600c 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 ] [ 0x600d 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a ] [ 0x600e 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b ] [ 0x600f 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c ] [ 0x6010 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d ] [ 0x6011 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e ] [ 0x6012 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f ] [ 0x6013 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 ] [ 0x6014 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 ] [ 0x6015 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 ] [ 0x6016 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 ] [ 0x6017 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 ] [ 0x6018 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 ] [ 0x6019 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 ] [ 0x601a 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 ] [ 0x601b 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 ] [ 0x601c 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 ] [ 0x601d 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a ] [ 0x601e 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a 0x611b ] [ 0x601f 0x6020 0x6021 0x6022 0x6023 0x6024 0x6025 0x6026 0x6027 0x6028 0x6029 0x602a 0x602b 0x602c 0x602d 0x602e 0x602f 0x6030 0x6031 0x6032 0x6033 0x6034 0x6035 0x6036 0x6037 0x6038 0x6039 0x603a 0x603b 0x603c 0x603d 0x603e 0x603f 0x6040 0x6041 0x6042 0x6043 0x6044 0x6045 0x6046 0x6047 0x6048 0x6049 0x604a 0x604b 0x604c 0x604d 0x604e 0x604f 0x6050 0x6051 0x6052 0x6053 0x6054 0x6055 0x6056 0x6057 0x6058 0x6059 0x605a 0x605b 0x605c 0x605d 0x605e 0x605f 0x6060 0x6061 0x6062 0x6063 0x6064 0x6065 0x6066 0x6067 0x6068 0x6069 0x606a 0x606b 0x606c 0x606d 0x606e 0x606f 0x6070 0x6071 0x6072 0x6073 0x6074 0x6075 0x6076 0x6077 0x6078 0x6079 0x607a 0x607b 0x607c 0x607d 0x607e 0x607f 0x6080 0x6081 0x6082 0x6083 0x6084 0x6085 0x6086 0x6087 0x6088 0x6089 0x608a 0x608b 0x608c 0x608d 0x608e 0x608f 0x6090 0x6091 0x6092 0x6093 0x6094 0x6095 0x6096 0x6097 0x6098 0x6099 0x609a 0x609b 0x609c 0x609d 0x609e 0x609f 0x60a0 0x60a1 0x60a2 0x60a3 0x60a4 0x60a5 0x60a6 0x60a7 0x60a8 0x60a9 0x60aa 0x60ab 0x60ac 0x60ad 0x60ae 0x60af 0x60b0 0x60b1 0x60b2 0x60b3 0x60b4 0x60b5 0x60b6 0x60b7 0x60b8 0x60b9 0x60ba 0x60bb 0x60bc 0x60bd 0x60be 0x60bf 0x60c0 0x60c1 0x60c2 0x60c3 0x60c4 0x60c5 0x60c6 0x60c7 0x60c8 0x60c9 0x60ca 0x60cb 0x60cc 0x60cd 0x60ce 0x60cf 0x60d0 0x60d1 0x60d2 0x60d3 0x60d4 0x60d5 0x60d6 0x60d7 0x60d8 0x60d9 0x60da 0x60db 0x60dc 0x60dd 0x60de 0x60df 0x60e0 0x60e1 0x60e2 0x60e3 0x60e4 0x60e5 0x60e6 0x60e7 0x60e8 0x60e9 0x60ea 0x60eb 0x60ec 0x60ed 0x60ee 0x60ef 0x60f0 0x60f1 0x60f2 0x60f3 0x60f4 0x60f5 0x60f6 0x60f7 0x60f8 0x60f9 0x60fa 0x60fb 0x60fc 0x60fd 0x60fe 0x60ff 0x6100 0x6101 0x6102 0x6103 0x6104 0x6105 0x6106 0x6107 0x6108 0x6109 0x610a 0x610b 0x610c 0x610d 0x610e 0x610f 0x6110 0x6111 0x6112 0x6113 0x6114 0x6115 0x6116 0x6117 0x6118 0x6119 0x611a 0x611b 0x611c ] ] diff --git a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts index 43274b8acf0..2ad33406c21 100644 --- a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts @@ -267,11 +267,13 @@ describe('L1Publisher integration', () => { expect(event.sender).toEqual(deployerAccount.address); } + // Ensure that each transaction has unique (non-intersecting nullifier values) + const totalNullifiersPerBlock = 4 * MAX_NEW_NULLIFIERS_PER_TX; const txs = [ - await makeBloatedProcessedTx(128 * i + 32), - await makeBloatedProcessedTx(128 * i + 64), - await makeBloatedProcessedTx(128 * i + 96), - await makeBloatedProcessedTx(128 * i + 128), + await makeBloatedProcessedTx(totalNullifiersPerBlock * i + 1 * MAX_NEW_NULLIFIERS_PER_TX), + await makeBloatedProcessedTx(totalNullifiersPerBlock * i + 2 * MAX_NEW_NULLIFIERS_PER_TX), + await makeBloatedProcessedTx(totalNullifiersPerBlock * i + 3 * MAX_NEW_NULLIFIERS_PER_TX), + await makeBloatedProcessedTx(totalNullifiersPerBlock * i + 4 * MAX_NEW_NULLIFIERS_PER_TX), ]; const globalVariables = new GlobalVariables( new Fr(config.chainId), diff --git a/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr b/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr index 4a3e65ba2e4..8f680055a4f 100644 --- a/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr +++ b/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr @@ -1,16 +1,16 @@ // GENERATED FILE - DO NOT EDIT, RUN yarn remake-constants in circuits.js global ARGS_LENGTH: Field = 16; global RETURN_VALUES_LENGTH: Field = 4; -global MAX_NEW_COMMITMENTS_PER_CALL: Field = 4; -global MAX_NEW_NULLIFIERS_PER_CALL: Field = 4; +global MAX_NEW_COMMITMENTS_PER_CALL: Field = 16; +global MAX_NEW_NULLIFIERS_PER_CALL: Field = 16; global MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4; global MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4; global MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2; global MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16; global MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16; -global MAX_READ_REQUESTS_PER_CALL: Field = 4; -global MAX_NEW_COMMITMENTS_PER_TX: Field = 16; -global MAX_NEW_NULLIFIERS_PER_TX: Field = 16; +global MAX_READ_REQUESTS_PER_CALL: Field = 32; +global MAX_NEW_COMMITMENTS_PER_TX: Field = 64; +global MAX_NEW_NULLIFIERS_PER_TX: Field = 64; global MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8; global MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8; global MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2; @@ -18,7 +18,7 @@ global MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16; global MAX_PUBLIC_DATA_READS_PER_TX: Field = 16; global MAX_NEW_CONTRACTS_PER_TX: Field = 1; global MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX: Field = 4; -global MAX_READ_REQUESTS_PER_TX: Field = 16; +global MAX_READ_REQUESTS_PER_TX: Field = 128; global NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1; global NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1; global NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16; @@ -33,11 +33,11 @@ global L1_TO_L2_MSG_TREE_HEIGHT: Field = 16; global ROLLUP_VK_TREE_HEIGHT: Field = 8; global CONTRACT_SUBTREE_HEIGHT: Field = 1; global CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 15; -global PRIVATE_DATA_SUBTREE_HEIGHT: Field = 5; -global PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 27; -global NULLIFIER_SUBTREE_HEIGHT: Field = 5; +global PRIVATE_DATA_SUBTREE_HEIGHT: Field = 7; +global PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 25; +global NULLIFIER_SUBTREE_HEIGHT: Field = 7; global HISTORIC_BLOCKS_TREE_HEIGHT: Field = 16; -global NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 11; +global NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 9; global L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4; global L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12; global FUNCTION_SELECTOR_NUM_BYTES: Field = 4; @@ -53,17 +53,17 @@ global CALL_CONTEXT_LENGTH: Field = 6; global HISTORIC_BLOCK_DATA_LENGTH: Field = 7; global FUNCTION_DATA_LENGTH: Field = 4; global CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6; -global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 58; +global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 122; global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 3; global CONTRACT_STORAGE_READ_LENGTH: Field = 2; -global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 117; -global GET_NOTES_ORACLE_RETURN_LENGTH: Field = 86; +global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 141; +global GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674; global EMPTY_NULLIFIED_COMMITMENT: Field = 1000000; -global CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 64; -global PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 63; -global PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 48; -global COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024; -global NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024; +global CALL_PRIVATE_FUNCTION_RETURN_SIZE: Field = 128; +global PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 87; +global PRIVATE_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: Field = 112; +global COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 4096; +global NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 4096; global PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048; global CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64; global CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 128; diff --git a/yarn-project/noir-libs/noir-aztec/src/context.nr b/yarn-project/noir-libs/noir-aztec/src/context.nr index 6d6b9647e5c..f28b1e3fa9b 100644 --- a/yarn-project/noir-libs/noir-aztec/src/context.nr +++ b/yarn-project/noir-libs/noir-aztec/src/context.nr @@ -238,37 +238,37 @@ impl PrivateContext { args_hash: fields[11], return_values: arr_copy_slice(fields, [0; RETURN_VALUES_LENGTH], 12), read_requests: arr_copy_slice(fields, [0; MAX_READ_REQUESTS_PER_CALL], 16), - new_commitments: arr_copy_slice(fields, [0; MAX_NEW_COMMITMENTS_PER_CALL], 20), - new_nullifiers: arr_copy_slice(fields, [0; MAX_NEW_NULLIFIERS_PER_CALL], 24), - nullified_commitments: arr_copy_slice(fields, [0; MAX_NEW_NULLIFIERS_PER_CALL], 28), - private_call_stack: arr_copy_slice(fields, [0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL], 32), - public_call_stack: arr_copy_slice(fields, [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], 36), - new_l2_to_l1_msgs: arr_copy_slice(fields, [0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL], 40), - encrypted_logs_hash: arr_copy_slice(fields, [0; NUM_FIELDS_PER_SHA256], 42), - unencrypted_logs_hash: arr_copy_slice(fields, [0; NUM_FIELDS_PER_SHA256], 44), - encrypted_log_preimages_length: fields[46], - unencrypted_log_preimages_length: fields[47], + new_commitments: arr_copy_slice(fields, [0; MAX_NEW_COMMITMENTS_PER_CALL], 48), + new_nullifiers: arr_copy_slice(fields, [0; MAX_NEW_NULLIFIERS_PER_CALL], 64), + nullified_commitments: arr_copy_slice(fields, [0; MAX_NEW_NULLIFIERS_PER_CALL], 80), + private_call_stack: arr_copy_slice(fields, [0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL], 96), + public_call_stack: arr_copy_slice(fields, [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], 100), + new_l2_to_l1_msgs: arr_copy_slice(fields, [0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL], 104), + encrypted_logs_hash: arr_copy_slice(fields, [0; NUM_FIELDS_PER_SHA256], 106), + unencrypted_logs_hash: arr_copy_slice(fields, [0; NUM_FIELDS_PER_SHA256], 108), + encrypted_log_preimages_length: fields[110], + unencrypted_log_preimages_length: fields[111], block_data: HistoricBlockData { // Must match order in `private_circuit_public_inputs.hpp` - private_data_tree_root : fields[48], - nullifier_tree_root : fields[49], - contract_tree_root : fields[50], - l1_to_l2_messages_tree_root : fields[51], - blocks_tree_root : fields[52], - public_data_tree_root: fields[53], - global_variables_hash: fields[54], + private_data_tree_root : fields[112], + nullifier_tree_root : fields[113], + contract_tree_root : fields[114], + l1_to_l2_messages_tree_root : fields[115], + blocks_tree_root : fields[116], + public_data_tree_root: fields[117], + global_variables_hash: fields[118], }, contract_deployment_data: ContractDeploymentData { - deployer_public_key: Point::new(fields[55], fields[56]), - constructor_vk_hash : fields[57], - function_tree_root : fields[58], - contract_address_salt : fields[59], - portal_contract_address : fields[60], + deployer_public_key: Point::new(fields[119], fields[120]), + constructor_vk_hash : fields[121], + function_tree_root : fields[122], + contract_address_salt : fields[123], + portal_contract_address : fields[124], }, - chain_id: fields[61], - version: fields[62], + chain_id: fields[125], + version: fields[126], }, - is_execution_request: fields[63] as bool, + is_execution_request: fields[127] as bool, }; assert(contract_address == item.contract_address); assert(function_selector == item.function_data.function_selector); diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index 5d88bb50bd9..74a355905b9 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -356,7 +356,7 @@ describe('sequencer/solo_block_builder', () => { expect(contractTreeAfter.root).toEqual(expectedContractTreeAfter); expect(contractTreeAfter.size).toEqual(BigInt(totalCount)); }, - 10000, + 30000, ); it('builds an empty L2 block', async () => { @@ -372,11 +372,12 @@ describe('sequencer/solo_block_builder', () => { }, 10_000); it('builds a mixed L2 block', async () => { + // Ensure that each transaction has unique (non-intersecting nullifier values) const txs = await Promise.all([ - makeBloatedProcessedTx(32), - makeBloatedProcessedTx(64), - makeBloatedProcessedTx(96), - makeBloatedProcessedTx(128), + makeBloatedProcessedTx(1 * MAX_NEW_NULLIFIERS_PER_TX), + makeBloatedProcessedTx(2 * MAX_NEW_NULLIFIERS_PER_TX), + makeBloatedProcessedTx(3 * MAX_NEW_NULLIFIERS_PER_TX), + makeBloatedProcessedTx(4 * MAX_NEW_NULLIFIERS_PER_TX), ]); const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr); From a3d645978a6ccef279870498979733682f63e206 Mon Sep 17 00:00:00 2001 From: spypsy Date: Fri, 8 Sep 2023 11:09:21 +0100 Subject: [PATCH 008/104] fix: COMMIT_TAG arg value in canary Dockerfile (#2118) This change went in mistakenly, the value should stay empty # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- yarn-project/canary/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/canary/Dockerfile b/yarn-project/canary/Dockerfile index eace3990aab..fa9498350af 100644 --- a/yarn-project/canary/Dockerfile +++ b/yarn-project/canary/Dockerfile @@ -2,7 +2,7 @@ FROM node:18-alpine RUN apk update && apk add --no-cache udev ttf-freefont chromium curl jq bash ENV CHROME_BIN="/usr/bin/chromium-browser" PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" -ARG COMMIT_TAG="v0.1.0-alpha62" +ARG COMMIT_TAG="" #Build canary WORKDIR /usr/src/ From a1475822b20c360d19a88f6205a4a35d987fc2f5 Mon Sep 17 00:00:00 2001 From: Lasse Herskind <16536249+LHerskind@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:10:04 +0100 Subject: [PATCH 009/104] fix: minor annoyances (#2115) Fixes #2113 and #2114 # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .../circuits/rollup/base/native_base_rollup_circuit.cpp | 4 +++- .../sequencer-client/src/block_builder/solo_block_builder.ts | 2 +- yarn-project/sequencer-client/src/publisher/l1-publisher.ts | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp b/circuits/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp index f27e119755c..efed2fb3d5d 100644 --- a/circuits/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp +++ b/circuits/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp @@ -274,7 +274,9 @@ AppendOnlySnapshot check_nullifier_tree_non_membership_and_insert_to_tree(DummyB if (!(is_less_than_nullifier && is_next_greater_than)) { if (low_nullifier_preimage.next_index != 0 && low_nullifier_preimage.next_value != 0) { builder.do_assert(false, - format("Nullifier is not in the correct range. \n ", + format("Nullifier (", + nullifier, + ") is not in the correct range. \n ", "is_less_than_nullifier ", is_less_than_nullifier, "\n is_next_greater_than ", diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts index b5d6093953e..bd9ef821a12 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts @@ -64,7 +64,7 @@ export class SoloBlockBuilder implements BlockBuilder { protected vks: VerificationKeys, protected simulator: RollupSimulator, protected prover: RollupProver, - protected debug = createDebugLogger('aztec:sequencer'), + protected debug = createDebugLogger('aztec:sequencer:solo-block-builder'), ) {} /** diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts index 026c698edd7..e22880c6cc6 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts @@ -93,7 +93,7 @@ export class L1Publisher implements L2BlockReceiver { private interruptableSleep = new InterruptableSleep(); private sleepTimeMs: number; private interrupted = false; - private log = createDebugLogger('aztec:sequencer'); + private log = createDebugLogger('aztec:sequencer:publisher'); constructor(private txSender: L1PublisherTxSender, config?: PublisherConfig) { this.sleepTimeMs = config?.l1BlockPublishRetryIntervalMS ?? 60_000; From a5f2852966457b9e11012118f9772118682b12e1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:43:45 +0100 Subject: [PATCH 010/104] chore(master): release 0.1.0-alpha63 (#2078) :robot: I have created a new Aztec Packages release --- ## [0.1.0-alpha63](https://github.com/AztecProtocol/aztec-packages/compare/v0.1.0-alpha62...v0.1.0-alpha63) (2023-09-08) ### Features * `GrumpkinScalar` type ([#1919](https://github.com/AztecProtocol/aztec-packages/issues/1919)) ([3a9238a](https://github.com/AztecProtocol/aztec-packages/commit/3a9238a99a32259d8d6b85df6335a002c7bab354)) ### Bug Fixes * add retry to tag and docker actions ([#2099](https://github.com/AztecProtocol/aztec-packages/issues/2099)) ([9f741f4](https://github.com/AztecProtocol/aztec-packages/commit/9f741f4e181120edcb63c28fa6c50b5b5e2e26c9)) * **breaking change:** change embedded curve scalar mul to use two limbs to properly encode the scalar field ([#2105](https://github.com/AztecProtocol/aztec-packages/issues/2105)) ([070cc4c](https://github.com/AztecProtocol/aztec-packages/commit/070cc4cb31ada29e42846e16df1ec191100214a5)) * broken bootstrap.sh after renaming `aztec-cli` dir as `cli` ([#2097](https://github.com/AztecProtocol/aztec-packages/issues/2097)) ([2386781](https://github.com/AztecProtocol/aztec-packages/commit/2386781fd1fed9f552559961b4e9f60406095067)) * browser test in canary flow ([#2102](https://github.com/AztecProtocol/aztec-packages/issues/2102)) ([d52af6c](https://github.com/AztecProtocol/aztec-packages/commit/d52af6c0e2c5ed268747237e65603368645c9966)), closes [#2086](https://github.com/AztecProtocol/aztec-packages/issues/2086) * check a note is read before nullifying it. ([#2076](https://github.com/AztecProtocol/aztec-packages/issues/2076)) ([aabfb13](https://github.com/AztecProtocol/aztec-packages/commit/aabfb1383033364df9c045573098a4f13ca3a452)), closes [#1899](https://github.com/AztecProtocol/aztec-packages/issues/1899) * circuits issues when building with gcc ([#2107](https://github.com/AztecProtocol/aztec-packages/issues/2107)) ([4f5c4fe](https://github.com/AztecProtocol/aztec-packages/commit/4f5c4fe24f012988169d8a0a3d8ae5245e24d3ee)) * COMMIT_TAG arg value in canary Dockerfile ([#2118](https://github.com/AztecProtocol/aztec-packages/issues/2118)) ([a3d6459](https://github.com/AztecProtocol/aztec-packages/commit/a3d645978a6ccef279870498979733682f63e206)) * dont assume safety of nvm ([#2079](https://github.com/AztecProtocol/aztec-packages/issues/2079)) ([a4167e7](https://github.com/AztecProtocol/aztec-packages/commit/a4167e7e5ef55c9780c786959d078fe854093656)) * end-to-end aztec cli dependency issue ([#2092](https://github.com/AztecProtocol/aztec-packages/issues/2092)) ([16ee3e5](https://github.com/AztecProtocol/aztec-packages/commit/16ee3e530bd99c2a47b8bcda53f0a13f67df2ac6)) * minor annoyances ([#2115](https://github.com/AztecProtocol/aztec-packages/issues/2115)) ([a147582](https://github.com/AztecProtocol/aztec-packages/commit/a1475822b20c360d19a88f6205a4a35d987fc2f5)) * padded printing for e2e-cli ([#2106](https://github.com/AztecProtocol/aztec-packages/issues/2106)) ([5988014](https://github.com/AztecProtocol/aztec-packages/commit/5988014330c929e1fcb52c4fbba5a755fa013c16)) * remaining refs to clang15 ([#2077](https://github.com/AztecProtocol/aztec-packages/issues/2077)) ([2c16547](https://github.com/AztecProtocol/aztec-packages/commit/2c16547c450ac7591d5be7c734962be86be4310e)) * run e2e tests without spot ([#2081](https://github.com/AztecProtocol/aztec-packages/issues/2081)) ([f0aa3ca](https://github.com/AztecProtocol/aztec-packages/commit/f0aa3ca0de995f58ea5a18e64c18ee437b520675)) * updated CLI readme ([#2098](https://github.com/AztecProtocol/aztec-packages/issues/2098)) ([2226091](https://github.com/AztecProtocol/aztec-packages/commit/2226091e21d0aa0dbfa3bea4f95a0ea2a31a4c43)), closes [#1784](https://github.com/AztecProtocol/aztec-packages/issues/1784) ### Miscellaneous * **circuits:** - remove dead code from cbind of private kernel circuit ([#2088](https://github.com/AztecProtocol/aztec-packages/issues/2088)) ([43dc9d7](https://github.com/AztecProtocol/aztec-packages/commit/43dc9d7500fa3d11a0b557b8fc82da4495c4e605)) * **circuits:** remove dead code in cbind.cpp for public kernel ([#2094](https://github.com/AztecProtocol/aztec-packages/issues/2094)) ([861f960](https://github.com/AztecProtocol/aztec-packages/commit/861f960524436796263d9f79fa06a38d0e62ae84)) * Conservatively raise the minimum supported clang version in CMakeList ([#2023](https://github.com/AztecProtocol/aztec-packages/issues/2023)) ([f49c416](https://github.com/AztecProtocol/aztec-packages/commit/f49c4164387d307f8a86e93faff3eb96d7c99e36)) * **constants:** bump number of private reads and writes ([#2062](https://github.com/AztecProtocol/aztec-packages/issues/2062)) ([ab6c6b1](https://github.com/AztecProtocol/aztec-packages/commit/ab6c6b1cefdc1dd1da6e1198f99a211b31e73d85)) * **contracts:** Use autogenerated Noir interfaces where possible ([#2073](https://github.com/AztecProtocol/aztec-packages/issues/2073)) ([bd6368b](https://github.com/AztecProtocol/aztec-packages/commit/bd6368bd16159aad88906496cb9d6270e483a26e)), closes [#1604](https://github.com/AztecProtocol/aztec-packages/issues/1604) * merge bb release-please ([#2080](https://github.com/AztecProtocol/aztec-packages/issues/2080)) ([e89b043](https://github.com/AztecProtocol/aztec-packages/commit/e89b04358acbf6f43b72c346406cd97c0fa26af2)) * move storage into main.nr. ([#2068](https://github.com/AztecProtocol/aztec-packages/issues/2068)) ([2c2d72b](https://github.com/AztecProtocol/aztec-packages/commit/2c2d72b7799b24273e498805ecf4c36d69f08d7d)) * protogalaxy relations ([#1897](https://github.com/AztecProtocol/aztec-packages/issues/1897)) ([35407e2](https://github.com/AztecProtocol/aztec-packages/commit/35407e25081744702ec35efe3f95aa0137fe0ebb)) ### Documentation * **limitations:** limitations on ordering and logs of chopped notes ([#2085](https://github.com/AztecProtocol/aztec-packages/issues/2085)) ([315ad3d](https://github.com/AztecProtocol/aztec-packages/commit/315ad3d58eeb467361848a1e70fd32f3074b35d5)), closes [#1652](https://github.com/AztecProtocol/aztec-packages/issues/1652) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8de4c36c9d7..38dce7ba16d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # Changelog +## [0.1.0-alpha63](https://github.com/AztecProtocol/aztec-packages/compare/v0.1.0-alpha62...v0.1.0-alpha63) (2023-09-08) + + +### Features + +* `GrumpkinScalar` type ([#1919](https://github.com/AztecProtocol/aztec-packages/issues/1919)) ([3a9238a](https://github.com/AztecProtocol/aztec-packages/commit/3a9238a99a32259d8d6b85df6335a002c7bab354)) + + +### Bug Fixes + +* add retry to tag and docker actions ([#2099](https://github.com/AztecProtocol/aztec-packages/issues/2099)) ([9f741f4](https://github.com/AztecProtocol/aztec-packages/commit/9f741f4e181120edcb63c28fa6c50b5b5e2e26c9)) +* **breaking change:** change embedded curve scalar mul to use two limbs to properly encode the scalar field ([#2105](https://github.com/AztecProtocol/aztec-packages/issues/2105)) ([070cc4c](https://github.com/AztecProtocol/aztec-packages/commit/070cc4cb31ada29e42846e16df1ec191100214a5)) +* broken bootstrap.sh after renaming `aztec-cli` dir as `cli` ([#2097](https://github.com/AztecProtocol/aztec-packages/issues/2097)) ([2386781](https://github.com/AztecProtocol/aztec-packages/commit/2386781fd1fed9f552559961b4e9f60406095067)) +* browser test in canary flow ([#2102](https://github.com/AztecProtocol/aztec-packages/issues/2102)) ([d52af6c](https://github.com/AztecProtocol/aztec-packages/commit/d52af6c0e2c5ed268747237e65603368645c9966)), closes [#2086](https://github.com/AztecProtocol/aztec-packages/issues/2086) +* check a note is read before nullifying it. ([#2076](https://github.com/AztecProtocol/aztec-packages/issues/2076)) ([aabfb13](https://github.com/AztecProtocol/aztec-packages/commit/aabfb1383033364df9c045573098a4f13ca3a452)), closes [#1899](https://github.com/AztecProtocol/aztec-packages/issues/1899) +* circuits issues when building with gcc ([#2107](https://github.com/AztecProtocol/aztec-packages/issues/2107)) ([4f5c4fe](https://github.com/AztecProtocol/aztec-packages/commit/4f5c4fe24f012988169d8a0a3d8ae5245e24d3ee)) +* COMMIT_TAG arg value in canary Dockerfile ([#2118](https://github.com/AztecProtocol/aztec-packages/issues/2118)) ([a3d6459](https://github.com/AztecProtocol/aztec-packages/commit/a3d645978a6ccef279870498979733682f63e206)) +* dont assume safety of nvm ([#2079](https://github.com/AztecProtocol/aztec-packages/issues/2079)) ([a4167e7](https://github.com/AztecProtocol/aztec-packages/commit/a4167e7e5ef55c9780c786959d078fe854093656)) +* end-to-end aztec cli dependency issue ([#2092](https://github.com/AztecProtocol/aztec-packages/issues/2092)) ([16ee3e5](https://github.com/AztecProtocol/aztec-packages/commit/16ee3e530bd99c2a47b8bcda53f0a13f67df2ac6)) +* minor annoyances ([#2115](https://github.com/AztecProtocol/aztec-packages/issues/2115)) ([a147582](https://github.com/AztecProtocol/aztec-packages/commit/a1475822b20c360d19a88f6205a4a35d987fc2f5)) +* padded printing for e2e-cli ([#2106](https://github.com/AztecProtocol/aztec-packages/issues/2106)) ([5988014](https://github.com/AztecProtocol/aztec-packages/commit/5988014330c929e1fcb52c4fbba5a755fa013c16)) +* remaining refs to clang15 ([#2077](https://github.com/AztecProtocol/aztec-packages/issues/2077)) ([2c16547](https://github.com/AztecProtocol/aztec-packages/commit/2c16547c450ac7591d5be7c734962be86be4310e)) +* run e2e tests without spot ([#2081](https://github.com/AztecProtocol/aztec-packages/issues/2081)) ([f0aa3ca](https://github.com/AztecProtocol/aztec-packages/commit/f0aa3ca0de995f58ea5a18e64c18ee437b520675)) +* updated CLI readme ([#2098](https://github.com/AztecProtocol/aztec-packages/issues/2098)) ([2226091](https://github.com/AztecProtocol/aztec-packages/commit/2226091e21d0aa0dbfa3bea4f95a0ea2a31a4c43)), closes [#1784](https://github.com/AztecProtocol/aztec-packages/issues/1784) + + +### Miscellaneous + +* **circuits:** - remove dead code from cbind of private kernel circuit ([#2088](https://github.com/AztecProtocol/aztec-packages/issues/2088)) ([43dc9d7](https://github.com/AztecProtocol/aztec-packages/commit/43dc9d7500fa3d11a0b557b8fc82da4495c4e605)) +* **circuits:** remove dead code in cbind.cpp for public kernel ([#2094](https://github.com/AztecProtocol/aztec-packages/issues/2094)) ([861f960](https://github.com/AztecProtocol/aztec-packages/commit/861f960524436796263d9f79fa06a38d0e62ae84)) +* Conservatively raise the minimum supported clang version in CMakeList ([#2023](https://github.com/AztecProtocol/aztec-packages/issues/2023)) ([f49c416](https://github.com/AztecProtocol/aztec-packages/commit/f49c4164387d307f8a86e93faff3eb96d7c99e36)) +* **constants:** bump number of private reads and writes ([#2062](https://github.com/AztecProtocol/aztec-packages/issues/2062)) ([ab6c6b1](https://github.com/AztecProtocol/aztec-packages/commit/ab6c6b1cefdc1dd1da6e1198f99a211b31e73d85)) +* **contracts:** Use autogenerated Noir interfaces where possible ([#2073](https://github.com/AztecProtocol/aztec-packages/issues/2073)) ([bd6368b](https://github.com/AztecProtocol/aztec-packages/commit/bd6368bd16159aad88906496cb9d6270e483a26e)), closes [#1604](https://github.com/AztecProtocol/aztec-packages/issues/1604) +* merge bb release-please ([#2080](https://github.com/AztecProtocol/aztec-packages/issues/2080)) ([e89b043](https://github.com/AztecProtocol/aztec-packages/commit/e89b04358acbf6f43b72c346406cd97c0fa26af2)) +* move storage into main.nr. ([#2068](https://github.com/AztecProtocol/aztec-packages/issues/2068)) ([2c2d72b](https://github.com/AztecProtocol/aztec-packages/commit/2c2d72b7799b24273e498805ecf4c36d69f08d7d)) +* protogalaxy relations ([#1897](https://github.com/AztecProtocol/aztec-packages/issues/1897)) ([35407e2](https://github.com/AztecProtocol/aztec-packages/commit/35407e25081744702ec35efe3f95aa0137fe0ebb)) + + +### Documentation + +* **limitations:** limitations on ordering and logs of chopped notes ([#2085](https://github.com/AztecProtocol/aztec-packages/issues/2085)) ([315ad3d](https://github.com/AztecProtocol/aztec-packages/commit/315ad3d58eeb467361848a1e70fd32f3074b35d5)), closes [#1652](https://github.com/AztecProtocol/aztec-packages/issues/1652) + ## [0.1.0-alpha62](https://github.com/AztecProtocol/aztec-packages/compare/v0.1.0-alpha61...v0.1.0-alpha62) (2023-09-06) From 82823d8cd6882b191a7b363aa40344f66dfd7af7 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:51:56 +0100 Subject: [PATCH 011/104] chore(build): Unify barretenberg releases with aztec-packages (#2120) This PR unifies the release of barretenberg with the wider aztec-packages repo. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .../workflows/publish-bb.yml | 0 .github/workflows/release_please.yml | 45 ++++++----------- .release-please-manifest.json | 1 + .../.github/workflows/release-please.yml | 34 ------------- .../.release-please-manifest.json | 1 - .../barretenberg/release-please-config.json | 36 -------------- release-please-config.json | 49 +++++++++++++++++++ 7 files changed, 66 insertions(+), 100 deletions(-) rename circuits/cpp/barretenberg/.github/workflows/publish.yml => .github/workflows/publish-bb.yml (100%) create mode 100644 .release-please-manifest.json delete mode 100644 circuits/cpp/barretenberg/.github/workflows/release-please.yml delete mode 100644 circuits/cpp/barretenberg/.release-please-manifest.json delete mode 100644 circuits/cpp/barretenberg/release-please-config.json create mode 100644 release-please-config.json diff --git a/circuits/cpp/barretenberg/.github/workflows/publish.yml b/.github/workflows/publish-bb.yml similarity index 100% rename from circuits/cpp/barretenberg/.github/workflows/publish.yml rename to .github/workflows/publish-bb.yml diff --git a/.github/workflows/release_please.yml b/.github/workflows/release_please.yml index f65c7bdce51..636d4c57b59 100644 --- a/.github/workflows/release_please.yml +++ b/.github/workflows/release_please.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - pw/bb-releases permissions: contents: write @@ -12,35 +13,21 @@ permissions: jobs: release-please: + name: Create Release runs-on: ubuntu-latest steps: - - uses: google-github-actions/release-please-action@v3 + - name: Run Release Please + id: release + uses: google-github-actions/release-please-action@v3 with: - # Our release type is simple as all we really want is to update the changelog and trigger a github release - release-type: simple - # Self explanatory - package-name: aztec-packages - # Marks github releases as 'Pre-Release' - prerelease: true - # Our default branch - default-branch: master - # Uses the 'prerelease' versioning strategy to update the pre-release number only e.g. 0.1.0-alpha23 -> 0.1.0-alpha24 - versioning-strategy: prerelease - # Don't include the component name in the tag name - include-component-in-tag: false - # Influences the versioning strategy to only update the pre-release number - bump-minor-pre-major: true - # Influences the versioning strategy to only update the pre-release number - bump-patch-for-minor-pre-major: true - # Just a bit of test at the top of the 'Release PR' - pull-request-header: ":robot: I have created a new Aztec Packages release" - # The sections into which changes are grouped on the github release notes - changelog-types: > - [ - {"type":"feat","section":"Features","hidden":false}, - {"type":"fix","section":"Bug Fixes","hidden":false}, - {"type":"chore","section":"Miscellaneous","hidden":false}, - {"type":"test","section":"Miscellaneous","hidden":false}, - {"type":"refactor","section":"Miscellaneous","hidden":false}, - {"type":"docs","section":"Documentation","hidden":false} - ] + command: manifest + + - name: Dispatch to publish workflow + uses: benc-uk/workflow-dispatch@v1 + if: ${{ steps.release.outputs.tag_name }} + with: + workflow: publish-bb.yml + repo: AztecProtocol/aztec-packages + ref: master + token: ${{ secrets.GITHUB_TOKEN }} + inputs: '{ "tag": "${{ steps.release.outputs.tag_name }}", "publish": true }' diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000000..5619a3a47fc --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1 @@ +{ ".": "0.5.1", "barretenberg": "0.5.1", "ts": "0.5.1" } diff --git a/circuits/cpp/barretenberg/.github/workflows/release-please.yml b/circuits/cpp/barretenberg/.github/workflows/release-please.yml deleted file mode 100644 index 2bd3176eef1..00000000000 --- a/circuits/cpp/barretenberg/.github/workflows/release-please.yml +++ /dev/null @@ -1,34 +0,0 @@ -on: - push: - branches: - - master - -permissions: - contents: write - pull-requests: write - -name: release-please - -jobs: - release-please: - name: Create Release - runs-on: ubuntu-latest - steps: - - name: Run Release Please - id: release - uses: google-github-actions/release-please-action@v3 - with: - command: manifest - - - name: Dispatch to publish workflow - uses: benc-uk/workflow-dispatch@v1 - if: ${{ steps.release.outputs.tag_name }} - with: - workflow: publish.yml - repo: AztecProtocol/barretenberg - ref: master - token: ${{ secrets.GITHUB_TOKEN }} - inputs: '{ "tag": "${{ steps.release.outputs.tag_name }}", "publish": true }' - - - diff --git a/circuits/cpp/barretenberg/.release-please-manifest.json b/circuits/cpp/barretenberg/.release-please-manifest.json deleted file mode 100644 index 4d7f4dbe45e..00000000000 --- a/circuits/cpp/barretenberg/.release-please-manifest.json +++ /dev/null @@ -1 +0,0 @@ -{".":"0.5.1","ts":"0.5.1"} \ No newline at end of file diff --git a/circuits/cpp/barretenberg/release-please-config.json b/circuits/cpp/barretenberg/release-please-config.json deleted file mode 100644 index 2c95ad8f285..00000000000 --- a/circuits/cpp/barretenberg/release-please-config.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "release-type": "simple", - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "prerelease": true, - "group-pull-request-title-pattern": "chore(barretenberg): Release ${version}", - "packages": { - ".": { - "release-type": "simple", - "component": "barretenberg", - "package-name": "barretenberg", - "extra-files" : [ - "cpp/CMakeLists.txt", - "VERSION", - "barretenberg.nix", - "barretenberg-wasm.nix" - ] - }, - "ts": { - "release-type": "node", - "package-name": "barretenberg.js", - "component": "barretenberg.js" - } - }, - "plugins" : [ - { - "type": "linked-versions", - "groupName": "barretenberg", - "components": [ - "barretenberg", - "barretenberg.js" - ] - }, - "sentence-case" - ] -} \ No newline at end of file diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000000..62c868b0788 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,49 @@ +{ + "release-type": "simple", + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "prerelease": true, + "group-pull-request-title-pattern": "chore(master): Release ${version}", + "pull-request-header": ":robot: I have created a new Aztec Packages release", + "versioning": "default", + "include-component-in-tag": true, + "changelog-sections": [ + { "type": "feat", "section": "Features", "hidden": false }, + { "type": "fix", "section": "Bug Fixes", "hidden": false }, + { "type": "chore", "section": "Miscellaneous", "hidden": false }, + { "type": "test", "section": "Miscellaneous", "hidden": false }, + { "type": "refactor", "section": "Miscellaneous", "hidden": false }, + { "type": "docs", "section": "Documentation", "hidden": false } + ], + "packages": { + ".": { + "release-type": "simple", + "component": "aztec-packages", + "package-name": "aztec-packages" + }, + "barrentenberg/ts": { + "release-type": "node", + "package-name": "barretenberg.js", + "component": "barretenberg.js" + }, + "barretenberg": { + "release-type": "simple", + "component": "barretenberg", + "package-name": "barretenberg", + "extra-files": [ + "cpp/CMakeLists.txt", + "VERSION", + "barretenberg.nix", + "barretenberg-wasm.nix" + ] + } + }, + "plugins": [ + { + "type": "linked-versions", + "groupName": "aztec-packages", + "components": ["barretenberg", "barretenberg.js", "aztec-packages"] + }, + "sentence-case" + ] +} From f84711883f79852c808fcb8c618a8c63d02054e1 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 10:52:29 +0000 Subject: [PATCH 012/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "803cc1976" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "803cc1976" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 9f8dd37d198..6473209fce1 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 2281507f31ea3a34b42a3ae278d7071f7e08573a - parent = 070cc4cb31ada29e42846e16df1ec191100214a5 + commit = 803cc1976249da053b593426792815df3a44847c + parent = 82823d8cd6882b191a7b363aa40344f66dfd7af7 method = merge cmdver = 0.4.6 From 91faa668650b98306813e64e9ebe3064bd7a221e Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 12:03:53 +0100 Subject: [PATCH 013/104] chore(build): Fixed manifest (#2122) This PR corrects the release please manifest. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .release-please-manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 5619a3a47fc..e6f825752b2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{ ".": "0.5.1", "barretenberg": "0.5.1", "ts": "0.5.1" } +{ ".": "0.5.1", "barretenberg": "0.5.1", "barretenberg/ts": "0.5.1" } From 7b4f30dbdf29a907b7474e5f308849ca068f056e Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 12:17:52 +0100 Subject: [PATCH 014/104] fix(build): Config fixes for release please (#2123) This PR contains further build and release fixes # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .github/workflows/publish-bb.yml | 42 ++++++++++++++++---------------- release-please-config.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/publish-bb.yml b/.github/workflows/publish-bb.yml index a162603f0aa..5895d5ab9ca 100644 --- a/.github/workflows/publish-bb.yml +++ b/.github/workflows/publish-bb.yml @@ -37,7 +37,7 @@ jobs: run: | sudo apt-get update sudo apt-get -y install ninja-build - + - name: Install Clang16 run: | wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz @@ -46,16 +46,16 @@ jobs: sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/include/* /usr/local/include/ sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/lib/* /usr/local/lib/ sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/share/* /usr/local/share/ - + - name: Compile Barretenberg run: | - cd cpp + cd barretenberg/cpp cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - name: Tar and GZip bb Binary (Ubuntu) - working-directory: cpp/build/bin + working-directory: barretenberg/cpp/build/bin run: tar -cvzf barretenberg-x86_64-linux-gnu.tar.gz bb - name: Upload artifacts @@ -63,10 +63,10 @@ jobs: with: name: release-linux path: | - ./cpp/build/bin/barretenberg-x86_64-linux-gnu.tar.gz + ./barretenberg/cpp/build/bin/barretenberg-x86_64-linux-gnu.tar.gz build-wasm-ts: - name: Build WASM and deploy to TS + name: Build WASM and deploy to TS runs-on: ubuntu-20.04 steps: - name: Checkout Code @@ -83,7 +83,7 @@ jobs: run: | sudo apt-get update sudo apt-get -y install ninja-build yarn - + - name: Install Clang16 run: | wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz @@ -92,7 +92,7 @@ jobs: sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/include/* /usr/local/include/ sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/lib/* /usr/local/lib/ sudo cp -r clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/share/* /usr/local/share/ - + - name: Install yarn run: | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - @@ -100,21 +100,21 @@ jobs: sudo apt -y update && sudo apt -y install yarn - name: Install WASI-SDK run: | - cd cpp + cd barretenberg/cpp ./scripts/install-wasi-sdk.sh - name: Compile Typescript run: | - cd ts + cd barretenberg/ts yarn install && yarn && yarn build - name: Tar and GZip barretenberg.wasm - working-directory: cpp/build-wasm/bin + working-directory: barretenberg/cpp/build-wasm/bin run: tar -cvzf barretenberg.wasm.tar.gz barretenberg.wasm - name: Tar and GZip acvm_backend.wasm - working-directory: cpp/build-wasm/bin + working-directory: barretenberg/cpp/build-wasm/bin run: tar -cvzf acvm_backend.wasm.tar.gz acvm_backend.wasm - name: Setup Node.js @@ -126,7 +126,7 @@ jobs: - name: Deploy Typescript to NPM if: github.event.inputs.tag != 'nightly' && github.event.inputs.tag != '' # Do not deploy to npm if it is a nightly build run: | - cd ts + cd barretenberg/ts yarn deploy env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} @@ -136,8 +136,8 @@ jobs: with: name: release-wasm path: | - ./cpp/build-wasm/bin/barretenberg.wasm.tar.gz - ./cpp/build-wasm/bin/acvm_backend.wasm.tar.gz + ./barretenberg/cpp/build-wasm/bin/barretenberg.wasm.tar.gz + ./barretenberg/cpp/build-wasm/bin/acvm_backend.wasm.tar.gz build-mac: name: Build on Mac (${{ matrix.target }}) @@ -163,20 +163,20 @@ jobs: - name: Compile Barretenberg (x86_64) if: matrix.target == 'x86_64-apple-darwin' - working-directory: cpp + working-directory: barretenberg/cpp run: | cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - + - name: Compile Barretenberg (ARM) if: matrix.target == 'aarch64-apple-darwin' - working-directory: cpp + working-directory: barretenberg/cpp run: | cmake --toolchain ./cmake/toolchains/aarch64-darwin.cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - name: Package barretenberg artifact - working-directory: cpp/build/bin + working-directory: barretenberg/cpp/build/bin run: | mkdir dist cp ./bb ./dist/bb @@ -186,7 +186,7 @@ jobs: uses: actions/upload-artifact@v3 with: name: barretenberg-${{ matrix.target }} - path: ./cpp/build/bin/barretenberg-${{ matrix.target }}.tar.gz + path: ./barretenberg/cpp/build/bin/barretenberg-${{ matrix.target }}.tar.gz retention-days: 3 release: @@ -225,4 +225,4 @@ jobs: acvm_backend.wasm.tar.gz barretenberg-x86_64-linux-gnu.tar.gz barretenberg-x86_64-apple-darwin.tar.gz - barretenberg-aarch64-apple-darwin.tar.gz \ No newline at end of file + barretenberg-aarch64-apple-darwin.tar.gz diff --git a/release-please-config.json b/release-please-config.json index 62c868b0788..ad2f1a56895 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -21,7 +21,7 @@ "component": "aztec-packages", "package-name": "aztec-packages" }, - "barrentenberg/ts": { + "barretenberg/ts": { "release-type": "node", "package-name": "barretenberg.js", "component": "barretenberg.js" From 13d3f161cc2ee6b49e4448ae9e8d33dd7f6ce7d2 Mon Sep 17 00:00:00 2001 From: spypsy Date: Fri, 8 Sep 2023 12:24:43 +0100 Subject: [PATCH 015/104] fix: file reference to canary docker-compose file (#2124) Please provide a paragraph or two giving a summary of the change, including relevant motivation and context. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9c66dc1e4ad..e00eadcb9db 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1191,7 +1191,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary uniswap_trade_on_l1_from_l2.test.ts canary ./scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary uniswap_trade_on_l1_from_l2.test.ts canary scripts/docker-compose.yml run-deployment-canary-browser: docker: @@ -1202,7 +1202,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary aztec_js_browser.test.ts canary ./scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary aztec_js_browser.test.ts canary scripts/docker-compose.yml run-deployment-canary-cli: docker: @@ -1213,7 +1213,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary cli.test.ts canary ./scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary cli.test.ts canary scripts/docker-compose.yml # Repeatable config for defining the workflow below. tag_regex: &tag_regex /^v.*/ From a23b0370ae9395ca51ed8f94a1d71b57d35916a0 Mon Sep 17 00:00:00 2001 From: spypsy Date: Fri, 8 Sep 2023 12:55:55 +0100 Subject: [PATCH 016/104] fix: canary browser test transfer method (#2126) --- yarn-project/canary/src/aztec_js_browser.test.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/yarn-project/canary/src/aztec_js_browser.test.ts b/yarn-project/canary/src/aztec_js_browser.test.ts index 89614830021..4b3afb1e3c5 100644 --- a/yarn-project/canary/src/aztec_js_browser.test.ts +++ b/yarn-project/canary/src/aztec_js_browser.test.ts @@ -138,6 +138,7 @@ conditionalDescribe()('e2e_aztec.js_browser', () => { const wallet = await AztecJs.getSandboxAccountsWallet(client); const contract = await Contract.at(AztecAddress.fromString(contractAddress), PrivateTokenContractAbi, wallet); const balance = await contract.methods.getBalance(owner).view({ from: owner }); + console.log(`Owner's balance: ${balance}`); return balance; }, SANDBOX_URL, @@ -159,9 +160,13 @@ conditionalDescribe()('e2e_aztec.js_browser', () => { const receiver = accounts[1].address; const wallet = await AztecJs.getSandboxAccountsWallet(client); const contract = await Contract.at(AztecAddress.fromString(contractAddress), PrivateTokenContractAbi, wallet); - await contract.methods.transfer(transferAmount, owner, receiver).send({ origin: owner }).wait(); + await contract.methods.transfer(transferAmount, receiver).send({ origin: owner }).wait(); console.log(`Transferred ${transferAmount} tokens to new Account`); - return await contract.methods.getBalance(receiver).view({ from: receiver }); + const receiverBalance = await contract.methods.getBalance(receiver).view({ from: receiver }); + console.log(`Receiver's balance is now: ${receiverBalance}`); + const senderBalance = await contract.methods.getBalance(owner).view({ from: owner }); + console.log(`Updated sender balance: ${senderBalance}`); + return receiverBalance; }, SANDBOX_URL, (await getPrivateTokenAddress()).toString(), From 9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:00:44 +0200 Subject: [PATCH 017/104] chore(master): Release 0.6.0 (#2121) This release is too large to preview in the pull request body. View the full release notes here: https://github.com/AztecProtocol/aztec-packages/blob/release-please--branches--master--release-notes/release-notes.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 350 ++++++++++++++++++++++++++++++++++ barretenberg | 1 - barretenberg/CHANGELOG.md | 8 + barretenberg/ts/CHANGELOG.md | 8 + 5 files changed, 367 insertions(+), 2 deletions(-) delete mode 120000 barretenberg create mode 100644 barretenberg/CHANGELOG.md create mode 100644 barretenberg/ts/CHANGELOG.md diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e6f825752b2..f62e2f7a6d3 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{ ".": "0.5.1", "barretenberg": "0.5.1", "barretenberg/ts": "0.5.1" } +{".":"0.6.0","barretenberg":"0.6.0","barretenberg/ts":"0.6.0"} diff --git a/CHANGELOG.md b/CHANGELOG.md index 38dce7ba16d..15ae705da5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,355 @@ # Changelog +## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.1...aztec-packages-v0.6.0) (2023-09-08) + + +### ⚠ BREAKING CHANGES + +* update to acvm 0.24.0 ([#1925](https://github.com/AztecProtocol/aztec-packages/issues/1925)) +* Barretenberg binaries now take in the encoded circuit instead of a json file ([#1618](https://github.com/AztecProtocol/aztec-packages/issues/1618)) + +### Features + +* `CompleteAddress` type and overall AztecRPC refactor ([#1524](https://github.com/AztecProtocol/aztec-packages/issues/1524)) ([aa2c74c](https://github.com/AztecProtocol/aztec-packages/commit/aa2c74c8503469630611b7004c4052b80b5fe815)) +* `FunctionSelector` type ([#1518](https://github.com/AztecProtocol/aztec-packages/issues/1518)) ([942f705](https://github.com/AztecProtocol/aztec-packages/commit/942f7058adc706924ff26d2490bec7f7d57d7149)), closes [#1424](https://github.com/AztecProtocol/aztec-packages/issues/1424) +* `GrumpkinScalar` type ([#1919](https://github.com/AztecProtocol/aztec-packages/issues/1919)) ([3a9238a](https://github.com/AztecProtocol/aztec-packages/commit/3a9238a99a32259d8d6b85df6335a002c7bab354)) +* **892:** Add hints for matching transient read requests with correspondi… ([#1995](https://github.com/AztecProtocol/aztec-packages/issues/1995)) ([0955bb7](https://github.com/AztecProtocol/aztec-packages/commit/0955bb7b0903b12c4f041096d51a1dbb48f6359d)) +* Add `info` command to bb ([#2010](https://github.com/AztecProtocol/aztec-packages/issues/2010)) ([1fd8196](https://github.com/AztecProtocol/aztec-packages/commit/1fd8196f302ee49f540dea54ce5df4c450592d05)) +* Add ARM build for Mac + cleanup artifacts ([#1837](https://github.com/AztecProtocol/aztec-packages/issues/1837)) ([270a4ae](https://github.com/AztecProtocol/aztec-packages/commit/270a4ae4d1998149735251e2c3c1be73a9029f61)) +* Add msgpack defs to remaining circuit types ([#1538](https://github.com/AztecProtocol/aztec-packages/issues/1538)) ([22037d8](https://github.com/AztecProtocol/aztec-packages/commit/22037d89cc45c718bb0dc1a49e76d78cd6ba90dd)) +* Add support for assert messages & runtime call stacks ([#1997](https://github.com/AztecProtocol/aztec-packages/issues/1997)) ([ac68837](https://github.com/AztecProtocol/aztec-packages/commit/ac68837677a80897538d7a0790af8d04410c4446)) +* Add workflow to output to dev-bb.js ([#1299](https://github.com/AztecProtocol/aztec-packages/issues/1299)) ([624ffaf](https://github.com/AztecProtocol/aztec-packages/commit/624ffaf1c920d29a12458eb045c8fec7ce978a1a)) +* **aztec-js:** Account class ([#1429](https://github.com/AztecProtocol/aztec-packages/issues/1429)) ([e788745](https://github.com/AztecProtocol/aztec-packages/commit/e788745b73a5b7632a3e346e2a698dbbb2314ed7)) +* **aztec-js:** Remove sender from execution request and add batching ([#1415](https://github.com/AztecProtocol/aztec-packages/issues/1415)) ([05b6e86](https://github.com/AztecProtocol/aztec-packages/commit/05b6e869d89e9313f6e60580a3eef21f88f55446)) +* **aztec-js:** Return contract instance when awaiting deploy tx ([#1360](https://github.com/AztecProtocol/aztec-packages/issues/1360)) ([e9c945c](https://github.com/AztecProtocol/aztec-packages/commit/e9c945cc680974383023737d299bc35645771e85)) +* **aztec-js:** Tx.wait waits for rpc to be synced ([#1381](https://github.com/AztecProtocol/aztec-packages/issues/1381)) ([261032e](https://github.com/AztecProtocol/aztec-packages/commit/261032ee3d8244a12850add3e75e9aeddd68456b)), closes [#1340](https://github.com/AztecProtocol/aztec-packages/issues/1340) +* **aztec-noir:** Align public and private execution patterns ([#1515](https://github.com/AztecProtocol/aztec-packages/issues/1515)) ([35a81c3](https://github.com/AztecProtocol/aztec-packages/commit/35a81c38f0738d2121b57e2dbfc1c4a85c20d6b8)) +* **Aztec.nr:** Kernel return types abstraction ([#1924](https://github.com/AztecProtocol/aztec-packages/issues/1924)) ([3a8e702](https://github.com/AztecProtocol/aztec-packages/commit/3a8e7026ea10aa8564bdcc127efd4213ebd526de)) +* **bb:** Use an environment variable to set the transcript URL ([#1750](https://github.com/AztecProtocol/aztec-packages/issues/1750)) ([31488c1](https://github.com/AztecProtocol/aztec-packages/commit/31488c19acfdfd5ff0c3e7f242f94dc0aa049158)) +* **blocks_tree:** Compute block hashes within root rollup circuit ([#1214](https://github.com/AztecProtocol/aztec-packages/issues/1214)) ([71dc039](https://github.com/AztecProtocol/aztec-packages/commit/71dc03973455c320ad4edb1a21d059bdf417445a)) +* Broadcasting 'public key' and 'partial address' as L1 calldata ([#1801](https://github.com/AztecProtocol/aztec-packages/issues/1801)) ([78d6444](https://github.com/AztecProtocol/aztec-packages/commit/78d6444e82903fe3d0d17318cd38b1b262e81391)), closes [#1778](https://github.com/AztecProtocol/aztec-packages/issues/1778) +* CDP/Lending example contract ([#1554](https://github.com/AztecProtocol/aztec-packages/issues/1554)) ([ecf6df2](https://github.com/AztecProtocol/aztec-packages/commit/ecf6df201047dcaa61c270cdb512cdc62086b356)) +* Celer benchmark ([#1369](https://github.com/AztecProtocol/aztec-packages/issues/1369)) ([7ec6b32](https://github.com/AztecProtocol/aztec-packages/commit/7ec6b32620c851d73e133e939f888047474ebc71)) +* Check sandbox version matches CLI's ([#1849](https://github.com/AztecProtocol/aztec-packages/issues/1849)) ([7279730](https://github.com/AztecProtocol/aztec-packages/commit/72797305ac9ce8639abb09334cf2471f0932ca88)) +* Checking if origin is registered ([#1393](https://github.com/AztecProtocol/aztec-packages/issues/1393)) ([8b3a064](https://github.com/AztecProtocol/aztec-packages/commit/8b3a0641a5fc78c5906d88267d3c8f0e2753025d)), closes [#1230](https://github.com/AztecProtocol/aztec-packages/issues/1230) +* **ci:** Initial release please config ([#1769](https://github.com/AztecProtocol/aztec-packages/issues/1769)) ([4207559](https://github.com/AztecProtocol/aztec-packages/commit/42075590058b21f38b5e745af54b2062371f9ebe)) +* **circuits:** Hints nullifier transient commitments ([#2056](https://github.com/AztecProtocol/aztec-packages/issues/2056)) ([725b550](https://github.com/AztecProtocol/aztec-packages/commit/725b550a368494abd15a38e95b15b1379bc926bc)) +* **ci:** Use content hash in build system, restrict docs build to *.ts or *.cpp ([#1953](https://github.com/AztecProtocol/aztec-packages/issues/1953)) ([0036e07](https://github.com/AztecProtocol/aztec-packages/commit/0036e0742a67dfa8aa1fcdb498b89caca6441508)) +* **cli:** Noir contract compiler CLI ([#1561](https://github.com/AztecProtocol/aztec-packages/issues/1561)) ([4af4845](https://github.com/AztecProtocol/aztec-packages/commit/4af4845f80b1be548efa1ca79f5588bb1c7f1423)), closes [#1457](https://github.com/AztecProtocol/aztec-packages/issues/1457) +* **cli:** Retry on http errors ([#1606](https://github.com/AztecProtocol/aztec-packages/issues/1606)) ([7af5994](https://github.com/AztecProtocol/aztec-packages/commit/7af59942e8691fa49b834f036b58f5de26821171)) +* **cli:** Use options instead of args in get-logs ([#1559](https://github.com/AztecProtocol/aztec-packages/issues/1559)) ([9f40ef8](https://github.com/AztecProtocol/aztec-packages/commit/9f40ef80d7180bab42685453d51cfce8d770dfb0)) +* Compress debug symbols ([#1760](https://github.com/AztecProtocol/aztec-packages/issues/1760)) ([9464b25](https://github.com/AztecProtocol/aztec-packages/commit/9464b25c1a2a809db559ddc4e2d4ee5ade1fa65a)) +* Do not allow slot 0 in `noir-libs` ([#1884](https://github.com/AztecProtocol/aztec-packages/issues/1884)) ([54094b4](https://github.com/AztecProtocol/aztec-packages/commit/54094b464a4dc7aebf157ca54145cffce822bc6f)), closes [#1692](https://github.com/AztecProtocol/aztec-packages/issues/1692) +* **docs:** Add tabs for deploying contract with cli and aztec.js ([#1703](https://github.com/AztecProtocol/aztec-packages/issues/1703)) ([d2a284d](https://github.com/AztecProtocol/aztec-packages/commit/d2a284dabd30e05ec771e719f9d0c9963438d4af)) +* **docs:** Adding some nitpick suggestions before sandbox release ([#1859](https://github.com/AztecProtocol/aztec-packages/issues/1859)) ([c1144f7](https://github.com/AztecProtocol/aztec-packages/commit/c1144f7bcfe8ebe222b840b0edd3d901ca30bdaf)) +* **docs:** Cheatcode docs ([#1585](https://github.com/AztecProtocol/aztec-packages/issues/1585)) ([b1a2f8f](https://github.com/AztecProtocol/aztec-packages/commit/b1a2f8fa6b38a1c03a62c25428932c8d2a9a4fdb)) +* **docs:** Set up noir contracts in getting-started ([#1770](https://github.com/AztecProtocol/aztec-packages/issues/1770)) ([33eb99d](https://github.com/AztecProtocol/aztec-packages/commit/33eb99d4a00831f340b1b0de0352fc272cb66d14)) +* **docs:** Testing guide and getPrivateStorage method ([#1992](https://github.com/AztecProtocol/aztec-packages/issues/1992)) ([5a8c571](https://github.com/AztecProtocol/aztec-packages/commit/5a8c5719753549f71ceeec9114d69b8d1d640376)) +* Generate public context contract interfaces ([#1860](https://github.com/AztecProtocol/aztec-packages/issues/1860)) ([2f4045e](https://github.com/AztecProtocol/aztec-packages/commit/2f4045e22dbea0e316103da20c6ba8a667826777)), closes [#1782](https://github.com/AztecProtocol/aztec-packages/issues/1782) +* Goblin recursive verifier ([#1822](https://github.com/AztecProtocol/aztec-packages/issues/1822)) ([f962cb6](https://github.com/AztecProtocol/aztec-packages/commit/f962cb68f46d25047bf67a1ad2e7407a176ffc53)) +* Honk recursive verifier Pt. 1 ([#1488](https://github.com/AztecProtocol/aztec-packages/issues/1488)) ([4669555](https://github.com/AztecProtocol/aztec-packages/commit/466955559750bce4b4d81149ca81c02742b9246c)) +* Initial `is_valid` eip1271 style wallet + minimal test changes ([#1935](https://github.com/AztecProtocol/aztec-packages/issues/1935)) ([f264c54](https://github.com/AztecProtocol/aztec-packages/commit/f264c5421424bf58d983fe104aaf7c7126259e01)) +* Initial cheatcode `loadPublic` ([#1353](https://github.com/AztecProtocol/aztec-packages/issues/1353)) ([75c35a7](https://github.com/AztecProtocol/aztec-packages/commit/75c35a7506bcc5a9ae1afee90c70cfb95b08b347)) +* Initial portal docs + minor cleanups ([#1469](https://github.com/AztecProtocol/aztec-packages/issues/1469)) ([37316f4](https://github.com/AztecProtocol/aztec-packages/commit/37316f4fb484c7c03bd44e9a14cd576714f092c5)) +* Initial trazability of ACIR ([#1701](https://github.com/AztecProtocol/aztec-packages/issues/1701)) ([89e4e1a](https://github.com/AztecProtocol/aztec-packages/commit/89e4e1ac5e90905aa475ba2f8b6afb7b77dc772a)) +* Minimal barretenberg .circleci ([#1352](https://github.com/AztecProtocol/aztec-packages/issues/1352)) ([36e4239](https://github.com/AztecProtocol/aztec-packages/commit/36e4239eccf00bc009e42ec218d0922b5d1138da)) +* More reliable getTxReceipt api. ([#1793](https://github.com/AztecProtocol/aztec-packages/issues/1793)) ([ad16b22](https://github.com/AztecProtocol/aztec-packages/commit/ad16b2219bff44dfbc3482b81c86e29bf0d60fc5)) +* New NoteProcessor works through all blocks ([#1404](https://github.com/AztecProtocol/aztec-packages/issues/1404)) ([c8e7d53](https://github.com/AztecProtocol/aztec-packages/commit/c8e7d539b7a3f4d7b4eee7e4eef1499715711109)) +* New stdlib Transcript ([#1219](https://github.com/AztecProtocol/aztec-packages/issues/1219)) ([2f66de1](https://github.com/AztecProtocol/aztec-packages/commit/2f66de15212a5b6eb398e0919ae3ad4ec572fde0)) +* No unencrypted logs in private functions ([#1780](https://github.com/AztecProtocol/aztec-packages/issues/1780)) ([4d8002e](https://github.com/AztecProtocol/aztec-packages/commit/4d8002e0d101a14c465929d92ea05d0be6e8d99a)), closes [#1689](https://github.com/AztecProtocol/aztec-packages/issues/1689) +* No unlimited retries by default in aztec.js ([#1723](https://github.com/AztecProtocol/aztec-packages/issues/1723)) ([95d1350](https://github.com/AztecProtocol/aztec-packages/commit/95d1350b23b6205ff2a7d3de41a37e0bc9ee7640)) +* **noir-contracts:** `Option<T>` for get_notes ([#1272](https://github.com/AztecProtocol/aztec-packages/issues/1272)) ([584b70f](https://github.com/AztecProtocol/aztec-packages/commit/584b70f11d9cfd95201462f61b154ed2abdb685c)) +* **noir:** Autogenerate contract interface for calling from external contracts ([#1487](https://github.com/AztecProtocol/aztec-packages/issues/1487)) ([e9d0e6b](https://github.com/AztecProtocol/aztec-packages/commit/e9d0e6bbe6645c6f9a303f99c9952fc2ce7bcb03)) +* **noir:** Better NoteGetterOptions. ([#1695](https://github.com/AztecProtocol/aztec-packages/issues/1695)) ([2f78293](https://github.com/AztecProtocol/aztec-packages/commit/2f78293643186232d4f2013acdf56b263b89bf56)) +* **noir:** Use `#[aztec(private)]` and `#[aztec(public)` attributes ([#1735](https://github.com/AztecProtocol/aztec-packages/issues/1735)) ([89756fa](https://github.com/AztecProtocol/aztec-packages/commit/89756fae7d562274a84c60024beff5fae032f297)) +* Not retrying unrecoverable errors ([#1752](https://github.com/AztecProtocol/aztec-packages/issues/1752)) ([c0f2820](https://github.com/AztecProtocol/aztec-packages/commit/c0f28204f53152c941704ece66287eddfe13c047)) +* **oracle:** Add oracle to get portal contract address ([#1474](https://github.com/AztecProtocol/aztec-packages/issues/1474)) ([5cce848](https://github.com/AztecProtocol/aztec-packages/commit/5cce848fc776abe4fcf54fb39e1b1ed740fd3583)) +* Pin noir commit to aztec tag ([#1461](https://github.com/AztecProtocol/aztec-packages/issues/1461)) ([afe601a](https://github.com/AztecProtocol/aztec-packages/commit/afe601afa0f58c09c421a6d559645472d4b42ed3)) +* Public view functions (unconstrained can read public storage) ([#1421](https://github.com/AztecProtocol/aztec-packages/issues/1421)) ([912c1b4](https://github.com/AztecProtocol/aztec-packages/commit/912c1b44b83a87ce6da7e9c5a99b9d5d3ba8aaf4)) +* Recursive fn calls to spend more notes. ([#1779](https://github.com/AztecProtocol/aztec-packages/issues/1779)) ([94053e4](https://github.com/AztecProtocol/aztec-packages/commit/94053e44f4d2a702fe9066bfff3cdd35e6d1b645)) +* Register-public-key & CLI update to use options instead of args ([#1397](https://github.com/AztecProtocol/aztec-packages/issues/1397)) ([d142181](https://github.com/AztecProtocol/aztec-packages/commit/d14218184478a22cca1a011763801d2f82a40f65)) +* Simulate enqueued public functions and locate failing constraints on them ([#1853](https://github.com/AztecProtocol/aztec-packages/issues/1853)) ([a065fd5](https://github.com/AztecProtocol/aztec-packages/commit/a065fd53dde48a1f28616ebe130222dd39d07b11)) +* Throw when creating an instance of non-existent contract ([#1300](https://github.com/AztecProtocol/aztec-packages/issues/1300)) ([5353ed0](https://github.com/AztecProtocol/aztec-packages/commit/5353ed0ae5ecfd227fac36b8f2305c3d91d1c855)), closes [#1225](https://github.com/AztecProtocol/aztec-packages/issues/1225) +* Throwing when submitting a duplicate tx of a settled one ([#1880](https://github.com/AztecProtocol/aztec-packages/issues/1880)) ([9ad768f](https://github.com/AztecProtocol/aztec-packages/commit/9ad768f1af5344dc079a74e80ec601e062558fd5)), closes [#1810](https://github.com/AztecProtocol/aztec-packages/issues/1810) +* Timing in build system ([#1411](https://github.com/AztecProtocol/aztec-packages/issues/1411)) ([b30f43f](https://github.com/AztecProtocol/aztec-packages/commit/b30f43fa9ffd5d62b20ffd843c0deeef5e132e4f)) +* Typos, using Tx.clone functionality, better naming ([#1976](https://github.com/AztecProtocol/aztec-packages/issues/1976)) ([00bca67](https://github.com/AztecProtocol/aztec-packages/commit/00bca675cf7984052c960c3d1797c5b017f07f57)) +* Update safe_math and move to libraries ([#1803](https://github.com/AztecProtocol/aztec-packages/issues/1803)) ([b10656d](https://github.com/AztecProtocol/aztec-packages/commit/b10656d30622366dcbbe5adb5b3948b0702a06e7)) +* Updated noir version ([#1581](https://github.com/AztecProtocol/aztec-packages/issues/1581)) ([91f9047](https://github.com/AztecProtocol/aztec-packages/commit/91f9047da8489404718441ba498b9424c9d7000e)) +* Write debug-level log to local file in Sandbox ([#1846](https://github.com/AztecProtocol/aztec-packages/issues/1846)) ([0317e93](https://github.com/AztecProtocol/aztec-packages/commit/0317e93d3dffb3b66a926863e7fe8b8c15f61536)), closes [#1605](https://github.com/AztecProtocol/aztec-packages/issues/1605) +* **yarn:** Run workspace commands in parallel ([#1543](https://github.com/AztecProtocol/aztec-packages/issues/1543)) ([791f1cc](https://github.com/AztecProtocol/aztec-packages/commit/791f1ccecc4fa20eb48d0069061483c6a68b6d28)) + + +### Bug Fixes + +* Accidental git marker ([#2039](https://github.com/AztecProtocol/aztec-packages/issues/2039)) ([2be9908](https://github.com/AztecProtocol/aztec-packages/commit/2be990861ca25ec206f6bd02b604b73b30710ca8)) +* **acir:** When retrying failed ACIR tests it should not use the default CLI argument ([#1673](https://github.com/AztecProtocol/aztec-packages/issues/1673)) ([910b103](https://github.com/AztecProtocol/aztec-packages/commit/910b10392a9bb7472948bec5cc634eebea137288)) +* Add noir clean command & clean noir artifacts when building ([#1482](https://github.com/AztecProtocol/aztec-packages/issues/1482)) ([8e722c3](https://github.com/AztecProtocol/aztec-packages/commit/8e722c3a4deaab2794506092dae7dff4f977db04)) +* Add retry to tag and docker actions ([#2099](https://github.com/AztecProtocol/aztec-packages/issues/2099)) ([9f741f4](https://github.com/AztecProtocol/aztec-packages/commit/9f741f4e181120edcb63c28fa6c50b5b5e2e26c9)) +* Add retry_10 around ensure_repo ([#1963](https://github.com/AztecProtocol/aztec-packages/issues/1963)) ([0afde39](https://github.com/AztecProtocol/aztec-packages/commit/0afde390ac63d132b0ba85440500da3375fd2e22)) +* Adds Mac cross compile flags into barretenberg ([#1954](https://github.com/AztecProtocol/aztec-packages/issues/1954)) ([3aaf91e](https://github.com/AztecProtocol/aztec-packages/commit/3aaf91e03fc01f0cb12249f22dbcb007023f69d4)) +* Align bbmalloc implementations ([#1513](https://github.com/AztecProtocol/aztec-packages/issues/1513)) ([c512fcd](https://github.com/AztecProtocol/aztec-packages/commit/c512fcd23b43090f5e01819a2ead29747e7517ad)) +* Barretenberg binaries now take in the encoded circuit instead of a json file ([#1618](https://github.com/AztecProtocol/aztec-packages/issues/1618)) ([4bc551e](https://github.com/AztecProtocol/aztec-packages/commit/4bc551ef086c1e3d966f8ece5f5930405d8f5b11)) +* Bb meta-data ([#1960](https://github.com/AztecProtocol/aztec-packages/issues/1960)) ([712e0a0](https://github.com/AztecProtocol/aztec-packages/commit/712e0a088bff9ae2f49489901fab2a3fe0fb6d4b)) +* Bb sync take 2 ([#1669](https://github.com/AztecProtocol/aztec-packages/issues/1669)) ([fd09bc2](https://github.com/AztecProtocol/aztec-packages/commit/fd09bc26780dc08214d0ceca3d04ed10db23fead)) +* **bb.js:** (breaking change) bundles bb.js properly so that it works in the browser and in node ([#1855](https://github.com/AztecProtocol/aztec-packages/issues/1855)) ([1aa6f59](https://github.com/AztecProtocol/aztec-packages/commit/1aa6f5934cd97dd32d81e490013f8ef7d1e14ec7)) +* **bb:** Fix Typo ([#1709](https://github.com/AztecProtocol/aztec-packages/issues/1709)) ([287f5ae](https://github.com/AztecProtocol/aztec-packages/commit/287f5ae2cc556c1664d4240928baecadf92627e5)) +* Benchmark git repo ([#2041](https://github.com/AztecProtocol/aztec-packages/issues/2041)) ([3c696bb](https://github.com/AztecProtocol/aztec-packages/commit/3c696bba1ca4bd69c8e3f5bc004d1a07adb23cf1)) +* Benchmark preset uses clang16 ([#1902](https://github.com/AztecProtocol/aztec-packages/issues/1902)) ([4f7eeea](https://github.com/AztecProtocol/aztec-packages/commit/4f7eeea6c79604aea88433790dfc542a356aa898)) +* **breaking change:** Change embedded curve scalar mul to use two limbs to properly encode the scalar field ([#2105](https://github.com/AztecProtocol/aztec-packages/issues/2105)) ([070cc4c](https://github.com/AztecProtocol/aztec-packages/commit/070cc4cb31ada29e42846e16df1ec191100214a5)) +* Broken bootstrap.sh after renaming `aztec-cli` dir as `cli` ([#2097](https://github.com/AztecProtocol/aztec-packages/issues/2097)) ([2386781](https://github.com/AztecProtocol/aztec-packages/commit/2386781fd1fed9f552559961b4e9f60406095067)) +* Browser test in canary flow ([#2102](https://github.com/AztecProtocol/aztec-packages/issues/2102)) ([d52af6c](https://github.com/AztecProtocol/aztec-packages/commit/d52af6c0e2c5ed268747237e65603368645c9966)), closes [#2086](https://github.com/AztecProtocol/aztec-packages/issues/2086) +* Build ([#1906](https://github.com/AztecProtocol/aztec-packages/issues/1906)) ([8223be1](https://github.com/AztecProtocol/aztec-packages/commit/8223be18d98ebb4edb7700310b2fda5201bd04b9)) +* Build script ([#2017](https://github.com/AztecProtocol/aztec-packages/issues/2017)) ([23fce27](https://github.com/AztecProtocol/aztec-packages/commit/23fce277c44a06777ea168085ac498d62016b36e)) +* Build-system spot request cancellation ([#1339](https://github.com/AztecProtocol/aztec-packages/issues/1339)) ([0c8ce7d](https://github.com/AztecProtocol/aztec-packages/commit/0c8ce7d33483b6df5f747c7ad0aa8376b4f392a1)) +* **build-system:** Undefined IMAGE_TAG and ARG_TAG ([#2030](https://github.com/AztecProtocol/aztec-packages/issues/2030)) ([dfdba4b](https://github.com/AztecProtocol/aztec-packages/commit/dfdba4b5c6fb0c75f7f463e0b5eb71e6e7d1b667)) +* **build:** Config fixes for release please ([#2123](https://github.com/AztecProtocol/aztec-packages/issues/2123)) ([7b4f30d](https://github.com/AztecProtocol/aztec-packages/commit/7b4f30dbdf29a907b7474e5f308849ca068f056e)) +* **build:** Use semver version in docker version tag ([#2065](https://github.com/AztecProtocol/aztec-packages/issues/2065)) ([b3db0d0](https://github.com/AztecProtocol/aztec-packages/commit/b3db0d0ae6d6b7d8a6d7338a556e2b9507e2631a)) +* Canary browser test transfer method ([#2126](https://github.com/AztecProtocol/aztec-packages/issues/2126)) ([a23b037](https://github.com/AztecProtocol/aztec-packages/commit/a23b0370ae9395ca51ed8f94a1d71b57d35916a0)) +* Check a note is read before nullifying it. ([#2076](https://github.com/AztecProtocol/aztec-packages/issues/2076)) ([aabfb13](https://github.com/AztecProtocol/aztec-packages/commit/aabfb1383033364df9c045573098a4f13ca3a452)), closes [#1899](https://github.com/AztecProtocol/aztec-packages/issues/1899) +* **ci:** Incorrect content hash in some build targets ([#1973](https://github.com/AztecProtocol/aztec-packages/issues/1973)) ([0a2a515](https://github.com/AztecProtocol/aztec-packages/commit/0a2a515ecf52849cce1e45a7b39f44d420b43f34)) +* **ci:** Publish missing sandbox dependency ([#1599](https://github.com/AztecProtocol/aztec-packages/issues/1599)) ([52c7966](https://github.com/AztecProtocol/aztec-packages/commit/52c7966a118fdbe90bc739c006b9a116bc4c4dc0)) +* Circuits issues when building with gcc ([#2107](https://github.com/AztecProtocol/aztec-packages/issues/2107)) ([4f5c4fe](https://github.com/AztecProtocol/aztec-packages/commit/4f5c4fe24f012988169d8a0a3d8ae5245e24d3ee)) +* Circuits should not link openmp with -DMULTITHREADING ([#1929](https://github.com/AztecProtocol/aztec-packages/issues/1929)) ([cd1a685](https://github.com/AztecProtocol/aztec-packages/commit/cd1a685a3ecdd571d83cd2ad0844bd1d143fd9af)) +* Clang version in README and subrepo edge case ([#1730](https://github.com/AztecProtocol/aztec-packages/issues/1730)) ([26d836d](https://github.com/AztecProtocol/aztec-packages/commit/26d836d6453c2bc7fd9a1a091bdd63aefc4ed1dd)) +* Cli canary & deployment ([#2053](https://github.com/AztecProtocol/aztec-packages/issues/2053)) ([1ddd24a](https://github.com/AztecProtocol/aztec-packages/commit/1ddd24ad2f8702fd3d3c48ed015a652b3326bfd9)) +* **cli:** Fixes in get-logs and deploy commands ([#1572](https://github.com/AztecProtocol/aztec-packages/issues/1572)) ([493405b](https://github.com/AztecProtocol/aztec-packages/commit/493405b3d882706c592bf42142e1072aba650dbd)) +* COMMIT_TAG arg value in canary Dockerfile ([#2118](https://github.com/AztecProtocol/aztec-packages/issues/2118)) ([a3d6459](https://github.com/AztecProtocol/aztec-packages/commit/a3d645978a6ccef279870498979733682f63e206)) +* Compilation on homebrew clang 16.06 ([#1937](https://github.com/AztecProtocol/aztec-packages/issues/1937)) ([c611582](https://github.com/AztecProtocol/aztec-packages/commit/c611582239a057717410f0a6c0fd8202844a564e)) +* Complete JS call stacks across ACVM wasm boundaries ([#2013](https://github.com/AztecProtocol/aztec-packages/issues/2013)) ([8e84e46](https://github.com/AztecProtocol/aztec-packages/commit/8e84e460899f11eaf7f383863e20dc5395e45c6e)) +* Conditionally compile base64 command for bb binary ([#1851](https://github.com/AztecProtocol/aztec-packages/issues/1851)) ([be97185](https://github.com/AztecProtocol/aztec-packages/commit/be9718505c7e387bb46183299c9db855e6d7f91c)) +* Default color to light mode ([#1847](https://github.com/AztecProtocol/aztec-packages/issues/1847)) ([4fc8d39](https://github.com/AztecProtocol/aztec-packages/commit/4fc8d39041d437940bb18815e14f506b2ebe259e)) +* Deploy_ecr calculating CONTENT_HASH ([#2024](https://github.com/AztecProtocol/aztec-packages/issues/2024)) ([edee198](https://github.com/AztecProtocol/aztec-packages/commit/edee1981d8d795aef64bd6de738f09ea9a1a2547)) +* Disable uniswap until [#1367](https://github.com/AztecProtocol/aztec-packages/issues/1367) ([#1368](https://github.com/AztecProtocol/aztec-packages/issues/1368)) ([7a1c4f7](https://github.com/AztecProtocol/aztec-packages/commit/7a1c4f7901788f127e903d275d4efa2316eab848)) +* Disallow unregistered classes in JSON RPC interface and match by name ([#1820](https://github.com/AztecProtocol/aztec-packages/issues/1820)) ([35b8170](https://github.com/AztecProtocol/aztec-packages/commit/35b817055e1fe848e6d87d445a7881c5c128ad35)) +* Do not warn on mismatched cli/sandbox version ([#1894](https://github.com/AztecProtocol/aztec-packages/issues/1894)) ([a44a0f6](https://github.com/AztecProtocol/aztec-packages/commit/a44a0f6489b8ea7d648d1b9babf49fae8d593b7b)) +* Docs preprocessor line numbers and errors ([#1883](https://github.com/AztecProtocol/aztec-packages/issues/1883)) ([4e7e290](https://github.com/AztecProtocol/aztec-packages/commit/4e7e290478ae4ca9c128c0b6b4b26529965cc2a2)) +* **docs:** Fix code snippet preprocessor ([#1485](https://github.com/AztecProtocol/aztec-packages/issues/1485)) ([db0cc14](https://github.com/AztecProtocol/aztec-packages/commit/db0cc1414978b04518218c85e04cba424b64b942)) +* Don't include SRS in sandbox docker img ([#1704](https://github.com/AztecProtocol/aztec-packages/issues/1704)) ([aa7f662](https://github.com/AztecProtocol/aztec-packages/commit/aa7f662d3fe3a3c3833c594947c637790442477d)) +* Dont assume safety of nvm ([#2079](https://github.com/AztecProtocol/aztec-packages/issues/2079)) ([a4167e7](https://github.com/AztecProtocol/aztec-packages/commit/a4167e7e5ef55c9780c786959d078fe854093656)) +* Download SRS using one canonical URL across the codebase ([#1748](https://github.com/AztecProtocol/aztec-packages/issues/1748)) ([899b055](https://github.com/AztecProtocol/aztec-packages/commit/899b05557365a5bf97e64793dd563a1b4bfa0f3f)) +* End-to-end aztec cli dependency issue ([#2092](https://github.com/AztecProtocol/aztec-packages/issues/2092)) ([16ee3e5](https://github.com/AztecProtocol/aztec-packages/commit/16ee3e530bd99c2a47b8bcda53f0a13f67df2ac6)) +* Ensure CLI command doesn't fail due to missing client version ([#1895](https://github.com/AztecProtocol/aztec-packages/issues/1895)) ([88086e4](https://github.com/AztecProtocol/aztec-packages/commit/88086e4a80d7841d28188366a469800afa281693)) +* Ensure noir clean doesnt error ([#1613](https://github.com/AztecProtocol/aztec-packages/issues/1613)) ([ee00df5](https://github.com/AztecProtocol/aztec-packages/commit/ee00df5794b1d8e0ec4776fab8ec7d957d692fa5)) +* Ensure_repo undefined-safe ([#2025](https://github.com/AztecProtocol/aztec-packages/issues/2025)) ([e36fb6b](https://github.com/AztecProtocol/aztec-packages/commit/e36fb6bb8a1ee9a3d405c3e5340ffa4e589656e2)) +* Error handling in acir simulator ([#1907](https://github.com/AztecProtocol/aztec-packages/issues/1907)) ([165008e](https://github.com/AztecProtocol/aztec-packages/commit/165008ec3027d8f2f76256c37f63e5d7a669b5dd)) +* File reference to canary docker-compose file ([#2124](https://github.com/AztecProtocol/aztec-packages/issues/2124)) ([13d3f16](https://github.com/AztecProtocol/aztec-packages/commit/13d3f161cc2ee6b49e4448ae9e8d33dd7f6ce7d2)) +* Fix off by one in circuits.js when fetching points from transcript ([#1993](https://github.com/AztecProtocol/aztec-packages/issues/1993)) ([cec901f](https://github.com/AztecProtocol/aztec-packages/commit/cec901f3df440ebc0e3bdcfb2567b70fd9bde9dd)) +* Fix paths in `barretenberg` bootstrap.sh script ([#1662](https://github.com/AztecProtocol/aztec-packages/issues/1662)) ([24bbfd4](https://github.com/AztecProtocol/aztec-packages/commit/24bbfd446bf1f2b7fec8313dc010cd5094df0e71)) +* Fix race condition between RPC Server and Aztec Node ([#1700](https://github.com/AztecProtocol/aztec-packages/issues/1700)) ([4c89941](https://github.com/AztecProtocol/aztec-packages/commit/4c89941d0c3803ce72b86e76eead95a23d80d810)) +* Fixed a failing test and added a small fuzzer ([#1384](https://github.com/AztecProtocol/aztec-packages/issues/1384)) ([f258e08](https://github.com/AztecProtocol/aztec-packages/commit/f258e08aaa2e02c7a39d8d6b83a7037c0a5d36ea)) +* Fixing fuzzing build after composer splitting ([#1317](https://github.com/AztecProtocol/aztec-packages/issues/1317)) ([6b2e759](https://github.com/AztecProtocol/aztec-packages/commit/6b2e75940026e0133f9fa56080a4c424172172f0)) +* Format.sh issues ([#1946](https://github.com/AztecProtocol/aztec-packages/issues/1946)) ([f24814b](https://github.com/AztecProtocol/aztec-packages/commit/f24814b328c45316fa584cad1d9aa4784b6a0b2e)) +* Hack an ordering index for enqueued public calls ([#1639](https://github.com/AztecProtocol/aztec-packages/issues/1639)) ([87712e8](https://github.com/AztecProtocol/aztec-packages/commit/87712e82a504d8c09d2df5f8b8f57a03d88fae93)), closes [#1624](https://github.com/AztecProtocol/aztec-packages/issues/1624) +* Increment time by 1 for previous rollup was warped ([#1594](https://github.com/AztecProtocol/aztec-packages/issues/1594)) ([2a52107](https://github.com/AztecProtocol/aztec-packages/commit/2a521070397b6d1915e55b4ec702d4778563e683)) +* Master ([#1981](https://github.com/AztecProtocol/aztec-packages/issues/1981)) ([6bfb053](https://github.com/AztecProtocol/aztec-packages/commit/6bfb053fb2c4053a72a8daa18a241261380ee311)) +* Minor annoyances ([#2115](https://github.com/AztecProtocol/aztec-packages/issues/2115)) ([a147582](https://github.com/AztecProtocol/aztec-packages/commit/a1475822b20c360d19a88f6205a4a35d987fc2f5)) +* Mirror after direct bb merge ([#1651](https://github.com/AztecProtocol/aztec-packages/issues/1651)) ([5f08fff](https://github.com/AztecProtocol/aztec-packages/commit/5f08fff8355671e883bef0380bf06313429d3e1d)) +* More accurate c++ build pattern ([#1962](https://github.com/AztecProtocol/aztec-packages/issues/1962)) ([21c2f8e](https://github.com/AztecProtocol/aztec-packages/commit/21c2f8edd110da8749a0039c900c25aff8baa7a4)) +* Noir contract artifacts generation in CI ([#1366](https://github.com/AztecProtocol/aztec-packages/issues/1366)) ([f715a55](https://github.com/AztecProtocol/aztec-packages/commit/f715a55c8b66ddd6133e6cec70b82c4083575233)) +* **noir-ci:** Reinstate artifact builds ([#1396](https://github.com/AztecProtocol/aztec-packages/issues/1396)) ([2c43878](https://github.com/AztecProtocol/aztec-packages/commit/2c43878a72d9ce43e212416c1901bad40a0a763a)) +* Noir-contracts build ([#1362](https://github.com/AztecProtocol/aztec-packages/issues/1362)) ([71384b0](https://github.com/AztecProtocol/aztec-packages/commit/71384b098b0f81190329d6a685ddfc6c34536473)) +* **noir:** Add workaround for latest noir in account contracts ([#1781](https://github.com/AztecProtocol/aztec-packages/issues/1781)) ([eb8a052](https://github.com/AztecProtocol/aztec-packages/commit/eb8a052ad4e19394f096cc3a0f533c2560a7f5cc)) +* Option to fail silently when retrying ([#2015](https://github.com/AztecProtocol/aztec-packages/issues/2015)) ([453c9c1](https://github.com/AztecProtocol/aztec-packages/commit/453c9c1b234213fff4d63e117f2bc6c827040125)) +* Padded printing for e2e-cli ([#2106](https://github.com/AztecProtocol/aztec-packages/issues/2106)) ([5988014](https://github.com/AztecProtocol/aztec-packages/commit/5988014330c929e1fcb52c4fbba5a755fa013c16)) +* Polyfill by bundling fileURLToPath ([#1949](https://github.com/AztecProtocol/aztec-packages/issues/1949)) ([1b2de01](https://github.com/AztecProtocol/aztec-packages/commit/1b2de01df69a16f442c348cc302ade1392e74519)) +* Post bb merge sync ([#1697](https://github.com/AztecProtocol/aztec-packages/issues/1697)) ([d27a026](https://github.com/AztecProtocol/aztec-packages/commit/d27a026cdab57dbba12b162e2df75aab142130c9)) +* Proving fails when circuit has size > ~500K ([#1739](https://github.com/AztecProtocol/aztec-packages/issues/1739)) ([708b05c](https://github.com/AztecProtocol/aztec-packages/commit/708b05ca6638dc0d6ca7cb34fb8de76665a43b58)) +* Race condition ([#1427](https://github.com/AztecProtocol/aztec-packages/issues/1427)) ([cd78ec9](https://github.com/AztecProtocol/aztec-packages/commit/cd78ec9afa887b1e9ac0b446b110603fad29e7e2)) +* Remaining refs to clang15 ([#2077](https://github.com/AztecProtocol/aztec-packages/issues/2077)) ([2c16547](https://github.com/AztecProtocol/aztec-packages/commit/2c16547c450ac7591d5be7c734962be86be4310e)) +* Remove automatic update to `AztecProtocol/dev-bb.js` ([#1712](https://github.com/AztecProtocol/aztec-packages/issues/1712)) ([6969f6d](https://github.com/AztecProtocol/aztec-packages/commit/6969f6d41febcda0c884d9ea19fb0875f788f425)) +* Remove extra transfer arg in CLI Guide ([#1887](https://github.com/AztecProtocol/aztec-packages/issues/1887)) ([55728b8](https://github.com/AztecProtocol/aztec-packages/commit/55728b850c19403ba8b2aaefe89181640acbd9fd)) +* Reset keccak var inputs to 0 ([#1881](https://github.com/AztecProtocol/aztec-packages/issues/1881)) ([382f07e](https://github.com/AztecProtocol/aztec-packages/commit/382f07e3032c5ad3cf15e62e38bb5f0583ab46dd)) +* Retry git submodule fetch ([#1371](https://github.com/AztecProtocol/aztec-packages/issues/1371)) ([5cf9c20](https://github.com/AztecProtocol/aztec-packages/commit/5cf9c203e126b7613bf80960063d86cb9ee97954)) +* Return DecodedReturn instead of any[] ([#1540](https://github.com/AztecProtocol/aztec-packages/issues/1540)) ([2e344e1](https://github.com/AztecProtocol/aztec-packages/commit/2e344e13eaf628e3f380de625da6a526af4a6b0f)) +* Revert clang check bootstrap.sh ([#1734](https://github.com/AztecProtocol/aztec-packages/issues/1734)) ([a931e07](https://github.com/AztecProtocol/aztec-packages/commit/a931e077f2efac2aaa50c5336ead87a0e87a813e)) +* **rpc:** Fix bigint serialisation in API responses ([#1644](https://github.com/AztecProtocol/aztec-packages/issues/1644)) ([d1ce814](https://github.com/AztecProtocol/aztec-packages/commit/d1ce81478e8993e68257722df1fce6c9e8e0f9e8)) +* **rpc:** Fixes getNodeInfo serialisation ([#1991](https://github.com/AztecProtocol/aztec-packages/issues/1991)) ([0a29fa8](https://github.com/AztecProtocol/aztec-packages/commit/0a29fa8dd95b37e490c18df2db90a7324ebe762c)) +* **rpc:** Validate accounts registered in the rpc server are sound ([#1431](https://github.com/AztecProtocol/aztec-packages/issues/1431)) ([77b096b](https://github.com/AztecProtocol/aztec-packages/commit/77b096b716fa5454d23c0acbb51cc84640a464ff)) +* Run e2e tests without spot ([#2081](https://github.com/AztecProtocol/aztec-packages/issues/2081)) ([f0aa3ca](https://github.com/AztecProtocol/aztec-packages/commit/f0aa3ca0de995f58ea5a18e64c18ee437b520675)) +* **sandbox:** Build script for tagged commits ([#2057](https://github.com/AztecProtocol/aztec-packages/issues/2057)) ([c9d9722](https://github.com/AztecProtocol/aztec-packages/commit/c9d9722151de1e6f9a49a4cc6310e5646593ec01)) +* Selector name regression ([#1800](https://github.com/AztecProtocol/aztec-packages/issues/1800)) ([a5be8bb](https://github.com/AztecProtocol/aztec-packages/commit/a5be8bb92f858d266cf96671c46343b6e1ff400a)) +* Set correct version of RPC & Sandbox when deploying tagged commit ([#1914](https://github.com/AztecProtocol/aztec-packages/issues/1914)) ([898c50d](https://github.com/AztecProtocol/aztec-packages/commit/898c50d594b7515f6ca3b904d31ccf724b683ade)) +* Set side effect counter on contract reads ([#1870](https://github.com/AztecProtocol/aztec-packages/issues/1870)) ([1d8881e](https://github.com/AztecProtocol/aztec-packages/commit/1d8881e4872b39195ace523432c0e34bc9081f8d)), closes [#1588](https://github.com/AztecProtocol/aztec-packages/issues/1588) +* **simulator:** Use nullifier.value in client's `pendingNullifier` set so `set.has()` works ([#1534](https://github.com/AztecProtocol/aztec-packages/issues/1534)) ([a78daf7](https://github.com/AztecProtocol/aztec-packages/commit/a78daf75e3171d9cfafecba5507d5ae215fdd0ef)) +* **synchroniser:** Store most recent globals hash in the synchroniser, rather than fetching from the latest block ([#1539](https://github.com/AztecProtocol/aztec-packages/issues/1539)) ([1dd6225](https://github.com/AztecProtocol/aztec-packages/commit/1dd62256cc323831418808689496f0506d402fc4)) +* **sync:** Sync latest globals within merkle tree ops ([#1612](https://github.com/AztecProtocol/aztec-packages/issues/1612)) ([03b4cf6](https://github.com/AztecProtocol/aztec-packages/commit/03b4cf67cbd4c1629c2937dfae1ea714248d6d3b)) +* Truncate SRS size to the amount of points that we have downloaded ([#1862](https://github.com/AztecProtocol/aztec-packages/issues/1862)) ([0a7058c](https://github.com/AztecProtocol/aztec-packages/commit/0a7058cbda228c9baf378d69c906596e204d804f)) +* Try to catch last undefined safety issues ([#2027](https://github.com/AztecProtocol/aztec-packages/issues/2027)) ([12e7486](https://github.com/AztecProtocol/aztec-packages/commit/12e7486c0750f648f51d2b43317df843a3c52bec)) +* Typescript lookup of aztec.js types ([#1948](https://github.com/AztecProtocol/aztec-packages/issues/1948)) ([22901ae](https://github.com/AztecProtocol/aztec-packages/commit/22901ae8fa63b61ba1fbf4885f3940dc839b555c)) +* Undefined safety in master part 5 ([#2034](https://github.com/AztecProtocol/aztec-packages/issues/2034)) ([41eccaa](https://github.com/AztecProtocol/aztec-packages/commit/41eccaa516200bd65847e1b7b736c2f2cf858960)) +* Unify base64 interface between mac and linux (cherry-picked) ([#1968](https://github.com/AztecProtocol/aztec-packages/issues/1968)) ([ee24b52](https://github.com/AztecProtocol/aztec-packages/commit/ee24b52234956744d2b35b0eb0d3b5c2dcf7ed82)) +* Update barretenberg bootstrap.sh for mac ([#1732](https://github.com/AztecProtocol/aztec-packages/issues/1732)) ([83a212a](https://github.com/AztecProtocol/aztec-packages/commit/83a212a6f64cca5281411bdd3c0a844b1aca38aa)) +* Update bootstrap compilation order ([#1398](https://github.com/AztecProtocol/aztec-packages/issues/1398)) ([c03a6fa](https://github.com/AztecProtocol/aztec-packages/commit/c03a6faaa255b73ebe6f1a3e744df4804ad9d475)) +* Update decoder block specification comment ([#1690](https://github.com/AztecProtocol/aztec-packages/issues/1690)) ([5a0a4c4](https://github.com/AztecProtocol/aztec-packages/commit/5a0a4c4cc9dcfb7d8df93746f068b36c4a4db6ae)) +* Update docs search config ([#1920](https://github.com/AztecProtocol/aztec-packages/issues/1920)) ([c8764e6](https://github.com/AztecProtocol/aztec-packages/commit/c8764e6150b7d372c34ddc008be9925e5f5f6dfb)) +* Update docs search keys ([#1931](https://github.com/AztecProtocol/aztec-packages/issues/1931)) ([03b200c](https://github.com/AztecProtocol/aztec-packages/commit/03b200c10da71bd4b6fa3902edb254f9f625bf8b)) +* Updated CLI readme ([#2098](https://github.com/AztecProtocol/aztec-packages/issues/2098)) ([2226091](https://github.com/AztecProtocol/aztec-packages/commit/2226091e21d0aa0dbfa3bea4f95a0ea2a31a4c43)), closes [#1784](https://github.com/AztecProtocol/aztec-packages/issues/1784) +* Use COMMIT_TAG_VERSION properly in deploy_dockerhub ([#2033](https://github.com/AztecProtocol/aztec-packages/issues/2033)) ([064ddc3](https://github.com/AztecProtocol/aztec-packages/commit/064ddc3b345ac445fc9fe2385c8aee78b8fb6e47)) +* Use exit, not return in retry_10 ([#1468](https://github.com/AztecProtocol/aztec-packages/issues/1468)) ([a65727a](https://github.com/AztecProtocol/aztec-packages/commit/a65727a4e67ecf2ec61b4b5370d359c114ec55ef)) +* Use WARN or ERROR "tags" for warnings and errors ([#1589](https://github.com/AztecProtocol/aztec-packages/issues/1589)) ([fb80522](https://github.com/AztecProtocol/aztec-packages/commit/fb80522c45e49112797d53e3b475a58101cca131)), closes [#1607](https://github.com/AztecProtocol/aztec-packages/issues/1607) +* Used dumped state instead of fork ([#1399](https://github.com/AztecProtocol/aztec-packages/issues/1399)) ([c265e73](https://github.com/AztecProtocol/aztec-packages/commit/c265e73db0539919df6b3124ea03fef566bcc606)) +* Yarn install in canary ([#1454](https://github.com/AztecProtocol/aztec-packages/issues/1454)) ([9bbe79e](https://github.com/AztecProtocol/aztec-packages/commit/9bbe79e2a4d8d7f60a3eba46bbd2e287ee568d17)) + + +### Miscellaneous + +* `AztecRPC` API using sandbox ([#1568](https://github.com/AztecProtocol/aztec-packages/issues/1568)) ([b2662db](https://github.com/AztecProtocol/aztec-packages/commit/b2662dbc45b0149b380ae3c88d058b70174266cb)) +* **1074:** Remove read request data from final private kernel circuit public inputs ([#1840](https://github.com/AztecProtocol/aztec-packages/issues/1840)) ([c61557a](https://github.com/AztecProtocol/aztec-packages/commit/c61557ae926f89cead7306368197fdbe8f23dd6d)) +* **1407:** Remove forwarding witnesses ([#1930](https://github.com/AztecProtocol/aztec-packages/issues/1930)) ([cc8bc8f](https://github.com/AztecProtocol/aztec-packages/commit/cc8bc8f48b175479e1c4dfbcf9b92159f096c2cf)), closes [#1407](https://github.com/AztecProtocol/aztec-packages/issues/1407) +* **1879:** Add use of PrivateKernelPublicInputs in TS whenever relevant ([#1911](https://github.com/AztecProtocol/aztec-packages/issues/1911)) ([8d5f548](https://github.com/AztecProtocol/aztec-packages/commit/8d5f548e42d627da1685820f99fc28ff5f47abbe)) +* Acir tests are no longer base64 encoded ([#1854](https://github.com/AztecProtocol/aztec-packages/issues/1854)) ([7fffd16](https://github.com/AztecProtocol/aztec-packages/commit/7fffd1680d6246f64ee4d4ca965b9764c6c0ebb3)) +* Add back double verify proof to test suite ([#1986](https://github.com/AztecProtocol/aztec-packages/issues/1986)) ([f8688d7](https://github.com/AztecProtocol/aztec-packages/commit/f8688d7df05abcb6c650aafb130dedb707931950)) +* Add browser test to canary flow ([#1808](https://github.com/AztecProtocol/aztec-packages/issues/1808)) ([7f4fa43](https://github.com/AztecProtocol/aztec-packages/commit/7f4fa438bf2f4966338e3e53ece7c1d01e8dd054)) +* Add CLI test to canary flow ([#1918](https://github.com/AztecProtocol/aztec-packages/issues/1918)) ([cc68958](https://github.com/AztecProtocol/aztec-packages/commit/cc689585a845ce3c20ea9714ca744f4aa8837462)), closes [#1903](https://github.com/AztecProtocol/aztec-packages/issues/1903) +* Add FunctionData.fromAbi for QoL ([#1333](https://github.com/AztecProtocol/aztec-packages/issues/1333)) ([6f5fc3b](https://github.com/AztecProtocol/aztec-packages/commit/6f5fc3bbd54f633582a69d8104327bd405b1e3c4)) +* Add rebuild pattern for bb-bin-tests to rebuild when ts folder is changed and add target folder for bb-bin-test ([#1640](https://github.com/AztecProtocol/aztec-packages/issues/1640)) ([b3ee3d9](https://github.com/AztecProtocol/aztec-packages/commit/b3ee3d979172c9d4eae3f9090d0fbbc05fc5a613)) +* Add safemath noir testing ([#1967](https://github.com/AztecProtocol/aztec-packages/issues/1967)) ([cb1f1ec](https://github.com/AztecProtocol/aztec-packages/commit/cb1f1ece1fd050b00ad8cbe9086e76383f9e6377)) +* Add tests that check ordering of public state updates ([#1661](https://github.com/AztecProtocol/aztec-packages/issues/1661)) ([5b9aedd](https://github.com/AztecProtocol/aztec-packages/commit/5b9aeddd4a1bffcf9015786819dd3f6c1ff66fb4)) +* Add todo for using generator indices in note commitment and nullifier computation. ([#1762](https://github.com/AztecProtocol/aztec-packages/issues/1762)) ([2db6728](https://github.com/AztecProtocol/aztec-packages/commit/2db6728fcaf75ce8c98d821b65695543bb0c82a2)) +* Another pedantic change to public state naming ([#1359](https://github.com/AztecProtocol/aztec-packages/issues/1359)) ([cb77440](https://github.com/AztecProtocol/aztec-packages/commit/cb774405e89c71a622e32b51032aa761cd767959)) +* Aztec RPC interface cleanup ([#1423](https://github.com/AztecProtocol/aztec-packages/issues/1423)) ([1a6168a](https://github.com/AztecProtocol/aztec-packages/commit/1a6168abc9cdc092cf7c9843191194c9b90adae7)) +* **Aztec.nr:** Remove implicit imports ([#1901](https://github.com/AztecProtocol/aztec-packages/issues/1901)) ([c7d5190](https://github.com/AztecProtocol/aztec-packages/commit/c7d5190e48771c334bfa7062c361bcd623faa318)) +* **Aztec.nr:** Remove the open keyword from public functions ([#1917](https://github.com/AztecProtocol/aztec-packages/issues/1917)) ([4db8603](https://github.com/AztecProtocol/aztec-packages/commit/4db8603a4ee293c64a67be5ba74072bd654c7ec5)) +* **bb:** Refactor bb CLI interface ([#1672](https://github.com/AztecProtocol/aztec-packages/issues/1672)) ([a5bf6e0](https://github.com/AztecProtocol/aztec-packages/commit/a5bf6e008b19127bf15c8b12a5a699182b7ff4e7)), closes [#1671](https://github.com/AztecProtocol/aztec-packages/issues/1671) +* **bb:** Upgrade to clang16 for Linux builds ([#1705](https://github.com/AztecProtocol/aztec-packages/issues/1705)) ([feb53aa](https://github.com/AztecProtocol/aztec-packages/commit/feb53aa396f03e49c95f07b9e9635498a89d5807)) +* **blocks tree:** Remove historic roots trees ([#1355](https://github.com/AztecProtocol/aztec-packages/issues/1355)) ([ac935e1](https://github.com/AztecProtocol/aztec-packages/commit/ac935e1ea17f89c1dc6ca7d11a332a82bdc85d97)) +* Build-system submodule=>subrepo ([#1378](https://github.com/AztecProtocol/aztec-packages/issues/1378)) ([29ab491](https://github.com/AztecProtocol/aztec-packages/commit/29ab49130812918c51852b32b207f3e7cf633d66)) +* **build:** Fixed manifest ([#2122](https://github.com/AztecProtocol/aztec-packages/issues/2122)) ([91faa66](https://github.com/AztecProtocol/aztec-packages/commit/91faa668650b98306813e64e9ebe3064bd7a221e)) +* **build:** Unify barretenberg releases with aztec-packages ([#2120](https://github.com/AztecProtocol/aztec-packages/issues/2120)) ([82823d8](https://github.com/AztecProtocol/aztec-packages/commit/82823d8cd6882b191a7b363aa40344f66dfd7af7)) +* **ci:** Build docs on every pr ([#1955](https://github.com/AztecProtocol/aztec-packages/issues/1955)) ([c200bc5](https://github.com/AztecProtocol/aztec-packages/commit/c200bc5337da9d6122a2545fceeada98a28d7077)) +* **ci:** Clean up stale image tags ([#1818](https://github.com/AztecProtocol/aztec-packages/issues/1818)) ([3c8b7b8](https://github.com/AztecProtocol/aztec-packages/commit/3c8b7b84efe938e32c938bbcd744a335ffc50f49)) +* **ci:** Deploy sandbox dependencies to npm ([#1593](https://github.com/AztecProtocol/aztec-packages/issues/1593)) ([d90c460](https://github.com/AztecProtocol/aztec-packages/commit/d90c460d898724d742dbbf8a98def8de9db10ace)), closes [#1536](https://github.com/AztecProtocol/aztec-packages/issues/1536) +* **ci:** Fix output name in release please workflow ([#1858](https://github.com/AztecProtocol/aztec-packages/issues/1858)) ([857821f](https://github.com/AztecProtocol/aztec-packages/commit/857821fa1923aa013fe9470f12067208d5c494d1)) +* **circuits:** - remove dead code from cbind of private kernel circuit ([#2088](https://github.com/AztecProtocol/aztec-packages/issues/2088)) ([43dc9d7](https://github.com/AztecProtocol/aztec-packages/commit/43dc9d7500fa3d11a0b557b8fc82da4495c4e605)) +* **circuits:** - use msgpack for cbind routines of native private kernel circuits ([#1938](https://github.com/AztecProtocol/aztec-packages/issues/1938)) ([3dc5c07](https://github.com/AztecProtocol/aztec-packages/commit/3dc5c07358d99786df8809f46638fdb04b33a6c2)) +* **circuits:** Remove dead code in cbind.cpp for public kernel ([#2094](https://github.com/AztecProtocol/aztec-packages/issues/2094)) ([861f960](https://github.com/AztecProtocol/aztec-packages/commit/861f960524436796263d9f79fa06a38d0e62ae84)) +* **circuits:** Rename function to validate private call hash in PKC (it pops too) ([#1418](https://github.com/AztecProtocol/aztec-packages/issues/1418)) ([a76496f](https://github.com/AztecProtocol/aztec-packages/commit/a76496facb87d62f5032759cf930c885df1d5cc7)) +* **ci:** Set up nightly barretenberg releases ([#1761](https://github.com/AztecProtocol/aztec-packages/issues/1761)) ([e0078da](https://github.com/AztecProtocol/aztec-packages/commit/e0078dabfcd9e006c2a489c7142ab141d5d81b80)) +* **ci:** Update acir tests to reflect compilation based off of package name ([#1405](https://github.com/AztecProtocol/aztec-packages/issues/1405)) ([bb38c7a](https://github.com/AztecProtocol/aztec-packages/commit/bb38c7aef6f630aa34d3abb81c6fd1dc8e4f9884)) +* **ci:** Update build artifacts for recursion bin-test and enable bin-test ([#1326](https://github.com/AztecProtocol/aztec-packages/issues/1326)) ([48aa541](https://github.com/AztecProtocol/aztec-packages/commit/48aa5414c9b2c99175b304f4258d0d08ffbd8c7c)) +* **ci:** Updated release please config ([#1775](https://github.com/AztecProtocol/aztec-packages/issues/1775)) ([0085e8b](https://github.com/AztecProtocol/aztec-packages/commit/0085e8b17efc36256974f82525530c39ed182639)) +* **ci:** Updated release please configuration ([#1787](https://github.com/AztecProtocol/aztec-packages/issues/1787)) ([6eb2f7a](https://github.com/AztecProtocol/aztec-packages/commit/6eb2f7abc40bae88ebeec546ad9f8f2c7d810a24)) +* CLI tests ([#1786](https://github.com/AztecProtocol/aztec-packages/issues/1786)) ([2987065](https://github.com/AztecProtocol/aztec-packages/commit/298706557a8f2b73a87dfb10c81626ebf127cadb)), closes [#1450](https://github.com/AztecProtocol/aztec-packages/issues/1450) +* Compile minimal WASM binary needed for blackbox functions ([#1824](https://github.com/AztecProtocol/aztec-packages/issues/1824)) ([76a30b8](https://github.com/AztecProtocol/aztec-packages/commit/76a30b8b5b5e765a14fe7d896d8890897cad7756)) +* **compiler:** Remove wasm option from noir compiler ([#1628](https://github.com/AztecProtocol/aztec-packages/issues/1628)) ([c552322](https://github.com/AztecProtocol/aztec-packages/commit/c552322c1669b53016bea66beab02aded9c7c29c)) +* Conservatively raise the minimum supported clang version in CMakeList ([#2023](https://github.com/AztecProtocol/aztec-packages/issues/2023)) ([f49c416](https://github.com/AztecProtocol/aztec-packages/commit/f49c4164387d307f8a86e93faff3eb96d7c99e36)) +* Consistent block number method naming ([#1751](https://github.com/AztecProtocol/aztec-packages/issues/1751)) ([df1afe2](https://github.com/AztecProtocol/aztec-packages/commit/df1afe255d3095a9b2851b47480801c06d116eed)) +* **constants:** Bump number of private reads and writes ([#2062](https://github.com/AztecProtocol/aztec-packages/issues/2062)) ([ab6c6b1](https://github.com/AztecProtocol/aztec-packages/commit/ab6c6b1cefdc1dd1da6e1198f99a211b31e73d85)) +* **contracts:** Rename Schnorr multi key account to just Schnorr account ([#1447](https://github.com/AztecProtocol/aztec-packages/issues/1447)) ([3afd853](https://github.com/AztecProtocol/aztec-packages/commit/3afd853074be02ebf0a8d1f6187e49505513017e)) +* **contracts:** Use autogenerated Noir interfaces where possible ([#2073](https://github.com/AztecProtocol/aztec-packages/issues/2073)) ([bd6368b](https://github.com/AztecProtocol/aztec-packages/commit/bd6368bd16159aad88906496cb9d6270e483a26e)), closes [#1604](https://github.com/AztecProtocol/aztec-packages/issues/1604) +* Create fixtures folder in E2E ([#1419](https://github.com/AztecProtocol/aztec-packages/issues/1419)) ([b8972b4](https://github.com/AztecProtocol/aztec-packages/commit/b8972b4838df02004e8c2b40da446a484e1c0df4)) +* **deps:** Remove deprecated multiaddr dependency ([#1631](https://github.com/AztecProtocol/aztec-packages/issues/1631)) ([e72d226](https://github.com/AztecProtocol/aztec-packages/commit/e72d2261a5cbea536c591304d7e3feeed33c5612)) +* Disable fft functions for polynomials instantiated on Grumpkin ([#1471](https://github.com/AztecProtocol/aztec-packages/issues/1471)) ([f09909a](https://github.com/AztecProtocol/aztec-packages/commit/f09909ad13d77b21654d90894c018e1b39896105)) +* **docs:** API docs stucture ([#2014](https://github.com/AztecProtocol/aztec-packages/issues/2014)) ([9aab9dd](https://github.com/AztecProtocol/aztec-packages/commit/9aab9ddefac63d35ebc356afed573af268896b35)) +* **e2e:** Initial e2e test for CLI ([#1576](https://github.com/AztecProtocol/aztec-packages/issues/1576)) ([c2c30da](https://github.com/AztecProtocol/aztec-packages/commit/c2c30da82233a9e8eaae364d19711e4f3596d7d2)) +* **e2e:** Trigger public call stack ordering error ([#1637](https://github.com/AztecProtocol/aztec-packages/issues/1637)) ([5ef2a83](https://github.com/AztecProtocol/aztec-packages/commit/5ef2a830b33875bacebe7b4edb269cd15522879f)), closes [#1615](https://github.com/AztecProtocol/aztec-packages/issues/1615) +* Enable project-specific releases for dockerhub too ([#1721](https://github.com/AztecProtocol/aztec-packages/issues/1721)) ([5d2c082](https://github.com/AztecProtocol/aztec-packages/commit/5d2c0824eedb748ca3e2beaa8589410a21ba6e57)) +* Enable project-specific tagged releases ([#1425](https://github.com/AztecProtocol/aztec-packages/issues/1425)) ([28cbe7b](https://github.com/AztecProtocol/aztec-packages/commit/28cbe7b30cd5654b2e03d3288f70cfb8a4935fc3)) +* Enforce PR titles follow conventional commit specification ([#1706](https://github.com/AztecProtocol/aztec-packages/issues/1706)) ([eeb38ac](https://github.com/AztecProtocol/aztec-packages/commit/eeb38ac700048b9e760e02ca17d8963d2828944c)) +* Fix acir-tests ([#1435](https://github.com/AztecProtocol/aztec-packages/issues/1435)) ([4b9b3fe](https://github.com/AztecProtocol/aztec-packages/commit/4b9b3fea10671fee38a55852d283d8489d7965a6)) +* Fix dirty merge ([#1574](https://github.com/AztecProtocol/aztec-packages/issues/1574)) ([58dc9bf](https://github.com/AztecProtocol/aztec-packages/commit/58dc9bffa6c8f225640b7f2a2e7c18105cac8592)) +* Fix typo ([#1681](https://github.com/AztecProtocol/aztec-packages/issues/1681)) ([7ac25ea](https://github.com/AztecProtocol/aztec-packages/commit/7ac25ea060bdbf7b04ab5ff9defd4f24835f11df)) +* Fixed linter errors for `ecc`, `numeric` and `common` modules ([#1714](https://github.com/AztecProtocol/aztec-packages/issues/1714)) ([026273b](https://github.com/AztecProtocol/aztec-packages/commit/026273b42d8c41de9bc4a86f898162cbbb3ad35f)) +* Make stdlib bn254 naming match native version ([#1560](https://github.com/AztecProtocol/aztec-packages/issues/1560)) ([347a38a](https://github.com/AztecProtocol/aztec-packages/commit/347a38a54e0ea7f6da1b45a8640b8506c3712bb1)) +* Manually resolves barretenberg conflicts ([#1455](https://github.com/AztecProtocol/aztec-packages/issues/1455)) ([b137f85](https://github.com/AztecProtocol/aztec-packages/commit/b137f85689ee941d8efe04c1d9e596d8465fc7e1)) +* **master:** Release 0.1.0-alpha45 ([#1774](https://github.com/AztecProtocol/aztec-packages/issues/1774)) ([e910929](https://github.com/AztecProtocol/aztec-packages/commit/e9109297eb801d5e0bb1ee5ca8251af01988ce44)) +* **master:** Release 0.1.0-alpha46 ([#1777](https://github.com/AztecProtocol/aztec-packages/issues/1777)) ([13ab91d](https://github.com/AztecProtocol/aztec-packages/commit/13ab91d82214646ff8acee6c0ac8ab83ea5a219b)) +* **master:** Release 0.1.0-alpha47 ([#1788](https://github.com/AztecProtocol/aztec-packages/issues/1788)) ([1970651](https://github.com/AztecProtocol/aztec-packages/commit/1970651e641a323c1747d0dc64a81f5ac677c840)) +* **master:** Release 0.1.0-alpha48 ([#1804](https://github.com/AztecProtocol/aztec-packages/issues/1804)) ([e89cd26](https://github.com/AztecProtocol/aztec-packages/commit/e89cd267d2cf2c0919a602ec4dc5d5456f95d5d4)) +* **master:** Release 0.1.0-alpha49 ([#1882](https://github.com/AztecProtocol/aztec-packages/issues/1882)) ([685e3a9](https://github.com/AztecProtocol/aztec-packages/commit/685e3a95fc1054c76342119d7ec27053edf038d1)) +* **master:** Release 0.1.0-alpha50 ([#1900](https://github.com/AztecProtocol/aztec-packages/issues/1900)) ([8135fee](https://github.com/AztecProtocol/aztec-packages/commit/8135feef4ed2f394ec56461f8e2bd2ee77f97cc0)) +* **master:** Release 0.1.0-alpha51 ([#2018](https://github.com/AztecProtocol/aztec-packages/issues/2018)) ([c5d95c8](https://github.com/AztecProtocol/aztec-packages/commit/c5d95c8ee5b5fb1f0d5b2c88ea8fcf24fdb466b8)) +* **master:** Release 0.1.0-alpha52 ([#2020](https://github.com/AztecProtocol/aztec-packages/issues/2020)) ([0c6dd60](https://github.com/AztecProtocol/aztec-packages/commit/0c6dd60f62f0ebc425c36af5631a6905aeeeaf47)) +* **master:** Release 0.1.0-alpha53 ([#2026](https://github.com/AztecProtocol/aztec-packages/issues/2026)) ([1990779](https://github.com/AztecProtocol/aztec-packages/commit/1990779a7ea30b7f90569fcb7b00a4a7b5a1d088)) +* **master:** Release 0.1.0-alpha54 ([#2028](https://github.com/AztecProtocol/aztec-packages/issues/2028)) ([a0ccd4a](https://github.com/AztecProtocol/aztec-packages/commit/a0ccd4a1cec87121ff24e3b4e50c15030fedd5ff)) +* **master:** Release 0.1.0-alpha55 ([#2031](https://github.com/AztecProtocol/aztec-packages/issues/2031)) ([4c9a438](https://github.com/AztecProtocol/aztec-packages/commit/4c9a438f5a062a32198bad3a008a1ea03555b1a8)) +* **master:** Release 0.1.0-alpha56 ([#2032](https://github.com/AztecProtocol/aztec-packages/issues/2032)) ([7cac648](https://github.com/AztecProtocol/aztec-packages/commit/7cac64887994d7873704e2cf27e098a013884014)) +* **master:** Release 0.1.0-alpha57 ([#2035](https://github.com/AztecProtocol/aztec-packages/issues/2035)) ([6b93483](https://github.com/AztecProtocol/aztec-packages/commit/6b93483312a1a65ddc941579c9322732c2774175)) +* **master:** Release 0.1.0-alpha58 ([#2037](https://github.com/AztecProtocol/aztec-packages/issues/2037)) ([b652ca4](https://github.com/AztecProtocol/aztec-packages/commit/b652ca48f5438546ead9c7f5c9f612574e922fe3)) +* **master:** Release 0.1.0-alpha59 ([#2038](https://github.com/AztecProtocol/aztec-packages/issues/2038)) ([3f833c7](https://github.com/AztecProtocol/aztec-packages/commit/3f833c7e2bbb1c121d05d56ba4aebc3e700fc291)) +* **master:** Release 0.1.0-alpha60 ([#2040](https://github.com/AztecProtocol/aztec-packages/issues/2040)) ([fbd8b67](https://github.com/AztecProtocol/aztec-packages/commit/fbd8b672dbbdb46c5c484e5d06f2ac955b5db97f)) +* **master:** Release 0.1.0-alpha61 ([#2059](https://github.com/AztecProtocol/aztec-packages/issues/2059)) ([5324750](https://github.com/AztecProtocol/aztec-packages/commit/5324750404cf4fc37fd656009577ae80f75d58bb)) +* **master:** Release 0.1.0-alpha62 ([#2060](https://github.com/AztecProtocol/aztec-packages/issues/2060)) ([28a877b](https://github.com/AztecProtocol/aztec-packages/commit/28a877bc31012a748a0ab923fa6367271f5b6a75)) +* **master:** Release 0.1.0-alpha63 ([#2078](https://github.com/AztecProtocol/aztec-packages/issues/2078)) ([a5f2852](https://github.com/AztecProtocol/aztec-packages/commit/a5f2852966457b9e11012118f9772118682b12e1)) +* Merge bb release-please ([#2080](https://github.com/AztecProtocol/aztec-packages/issues/2080)) ([e89b043](https://github.com/AztecProtocol/aztec-packages/commit/e89b04358acbf6f43b72c346406cd97c0fa26af2)) +* Move jsdocs to interfaces ([#1356](https://github.com/AztecProtocol/aztec-packages/issues/1356)) ([7f7519d](https://github.com/AztecProtocol/aztec-packages/commit/7f7519d131409d87dfc8fce55a73e882bcf5f015)) +* Move storage into main.nr. ([#2068](https://github.com/AztecProtocol/aztec-packages/issues/2068)) ([2c2d72b](https://github.com/AztecProtocol/aztec-packages/commit/2c2d72b7799b24273e498805ecf4c36d69f08d7d)) +* **noir-lib:** Add unit tests for context utility functions ([#1481](https://github.com/AztecProtocol/aztec-packages/issues/1481)) ([1d2c5d4](https://github.com/AztecProtocol/aztec-packages/commit/1d2c5d46174548bac715298e26598f126d1a02c2)) +* **noir-libs:** TransparentNote rework ([#1412](https://github.com/AztecProtocol/aztec-packages/issues/1412)) ([22fb8fe](https://github.com/AztecProtocol/aztec-packages/commit/22fb8fe0281379bf23836e1be33766b4f38a1813)) +* **noir:** Silence warnings ([#1544](https://github.com/AztecProtocol/aztec-packages/issues/1544)) ([ac1dc4b](https://github.com/AztecProtocol/aztec-packages/commit/ac1dc4b6ca39c15a1846fb011116810b39e4fa4a)) +* Not breaking note processing on missing hash and nullifier func ([#1364](https://github.com/AztecProtocol/aztec-packages/issues/1364)) ([861db2a](https://github.com/AztecProtocol/aztec-packages/commit/861db2a6bdb0b94d8722539b1159bb8b903b7d97)) +* **p2p:** Updated libp2p dependencies ([#1792](https://github.com/AztecProtocol/aztec-packages/issues/1792)) ([79df831](https://github.com/AztecProtocol/aztec-packages/commit/79df83134e15655dc3a5ed9dae00dc52a3d40681)) +* Protogalaxy relations ([#1897](https://github.com/AztecProtocol/aztec-packages/issues/1897)) ([35407e2](https://github.com/AztecProtocol/aztec-packages/commit/35407e25081744702ec35efe3f95aa0137fe0ebb)) +* Re-enabling pubkey check ([#1720](https://github.com/AztecProtocol/aztec-packages/issues/1720)) ([5385b18](https://github.com/AztecProtocol/aztec-packages/commit/5385b1894aed030448a8d6d3e317072bf9924538)) +* Reduce max circuit size in bb binary ([#1942](https://github.com/AztecProtocol/aztec-packages/issues/1942)) ([c61439b](https://github.com/AztecProtocol/aztec-packages/commit/c61439b316829563c93bbfcb78b799bdc105ff71)) +* Reenable and refactor nested calls e2e tests ([#1868](https://github.com/AztecProtocol/aztec-packages/issues/1868)) ([570de80](https://github.com/AztecProtocol/aztec-packages/commit/570de803376de4af6a1824b7a3c95129c98e2fa0)), closes [#1587](https://github.com/AztecProtocol/aztec-packages/issues/1587) +* Refactor Cli interface to be more unix-like ([#1833](https://github.com/AztecProtocol/aztec-packages/issues/1833)) ([28d722e](https://github.com/AztecProtocol/aztec-packages/commit/28d722ef965d907b7b7820ccdd7ee0afc97c88fa)) +* Refactor hash.hpp to use const& ([#1578](https://github.com/AztecProtocol/aztec-packages/issues/1578)) ([4c329af](https://github.com/AztecProtocol/aztec-packages/commit/4c329af59e5665ce15d8e0465165c3993c4801bc)) +* Reference noir master for acir tests ([#1969](https://github.com/AztecProtocol/aztec-packages/issues/1969)) ([86b72e1](https://github.com/AztecProtocol/aztec-packages/commit/86b72e1e8da29a0335e40c6de4c46538d8138f2f)) +* Remove debug output from `run_acir_tests` script ([#1970](https://github.com/AztecProtocol/aztec-packages/issues/1970)) ([74c83c5](https://github.com/AztecProtocol/aztec-packages/commit/74c83c5e1436f391eef435926c2da1d508d67713)) +* Remove individual historic roots from privateCircuitPublicInputs ([#1571](https://github.com/AztecProtocol/aztec-packages/issues/1571)) ([088cbe5](https://github.com/AztecProtocol/aztec-packages/commit/088cbe5190d3f1a547844a12d4492c901c7b1116)) +* Remove Params concept ([#1541](https://github.com/AztecProtocol/aztec-packages/issues/1541)) ([f4bd85e](https://github.com/AztecProtocol/aztec-packages/commit/f4bd85efc286825b6d39b140630ded408e7b1eda)) +* Removed `getPreimagesAt` ([#1517](https://github.com/AztecProtocol/aztec-packages/issues/1517)) ([7e14e7b](https://github.com/AztecProtocol/aztec-packages/commit/7e14e7bbea7d092242ac2e6ae03086fe5b9a9ebf)), closes [#1502](https://github.com/AztecProtocol/aztec-packages/issues/1502) +* Rename public state serialisation interface structs for clarity ([#1338](https://github.com/AztecProtocol/aztec-packages/issues/1338)) ([cb2d210](https://github.com/AztecProtocol/aztec-packages/commit/cb2d210b6b8d065b2468cf678bb4fb53f883f14d)) +* Renamed take to limit ([#1361](https://github.com/AztecProtocol/aztec-packages/issues/1361)) ([ba9d00b](https://github.com/AztecProtocol/aztec-packages/commit/ba9d00b12f231722b5053b5641a949a825f0a4a8)), closes [#1231](https://github.com/AztecProtocol/aztec-packages/issues/1231) +* Renaming storage getters ([#1348](https://github.com/AztecProtocol/aztec-packages/issues/1348)) ([cb5ce9e](https://github.com/AztecProtocol/aztec-packages/commit/cb5ce9e1295e7d7b6572a052f4fe39f0b5d29631)) +* Required option in aztec-cli ([#1584](https://github.com/AztecProtocol/aztec-packages/issues/1584)) ([f287416](https://github.com/AztecProtocol/aztec-packages/commit/f2874165d0748e4c78e5057482907e483bb13cad)) +* Restructure documentation ([#1437](https://github.com/AztecProtocol/aztec-packages/issues/1437)) ([da74f58](https://github.com/AztecProtocol/aztec-packages/commit/da74f580e83e7b220573354203e93d756175353d)) +* Rework nonces ([#1210](https://github.com/AztecProtocol/aztec-packages/issues/1210)) ([#1331](https://github.com/AztecProtocol/aztec-packages/issues/1331)) ([665cb75](https://github.com/AztecProtocol/aztec-packages/commit/665cb753f50f003ccd21935755aa1f08bfb78deb)) +* Sandbox logging tweaks ([#1797](https://github.com/AztecProtocol/aztec-packages/issues/1797)) ([0e3914e](https://github.com/AztecProtocol/aztec-packages/commit/0e3914ed6ad63062add1cc08f6ea85646c068f8a)) +* **scripts:** Convenience script to update local generated artifacts ([#1349](https://github.com/AztecProtocol/aztec-packages/issues/1349)) ([317981a](https://github.com/AztecProtocol/aztec-packages/commit/317981a13c9faf791a2760a07e9808a8474ecae2)) +* Simplified AztecRpc.registerAccount function ([#1729](https://github.com/AztecProtocol/aztec-packages/issues/1729)) ([8e5f828](https://github.com/AztecProtocol/aztec-packages/commit/8e5f828c0aff0602c49575139883c8abc3cb6e91)) +* **simulator:** Initialize ACVM's SimulatedBackend separately (setup pedersen init only happens once) ([#1596](https://github.com/AztecProtocol/aztec-packages/issues/1596)) ([1a260ed](https://github.com/AztecProtocol/aztec-packages/commit/1a260ede0729b1f70b90e06c2e6588bcb5eb9fc3)) +* Split out yarn-project bootstrap.sh ([#1790](https://github.com/AztecProtocol/aztec-packages/issues/1790)) ([1788fe6](https://github.com/AztecProtocol/aztec-packages/commit/1788fe6259f5e7fd191929b27996a7342e3f13e5)) +* Split SumcheckRound into Prover/Verifier classes ([#1373](https://github.com/AztecProtocol/aztec-packages/issues/1373)) ([8b1d48a](https://github.com/AztecProtocol/aztec-packages/commit/8b1d48a52c41f4f6cf436b481823f59582611b81)) +* Start sandbox as a bin from npm package ([#1595](https://github.com/AztecProtocol/aztec-packages/issues/1595)) ([3f793b9](https://github.com/AztecProtocol/aztec-packages/commit/3f793b96674a677472241259d92d352d00f8a6ef)) +* Storing `&mut context` in state vars ([#1926](https://github.com/AztecProtocol/aztec-packages/issues/1926)) ([89a7a3f](https://github.com/AztecProtocol/aztec-packages/commit/89a7a3ff22ebc469fe1b58d929af5ef162514c17)), closes [#1805](https://github.com/AztecProtocol/aztec-packages/issues/1805) +* Sync bb master ([#1710](https://github.com/AztecProtocol/aztec-packages/issues/1710)) ([0039c4f](https://github.com/AztecProtocol/aztec-packages/commit/0039c4fdf7c713d9f375d6abda15353325e38d56)) +* Sync bb master ([#1713](https://github.com/AztecProtocol/aztec-packages/issues/1713)) ([ec5241c](https://github.com/AztecProtocol/aztec-packages/commit/ec5241c34a9c1214ff66a20133ad6cc5e4081d77)) +* Sync bb master ([#1776](https://github.com/AztecProtocol/aztec-packages/issues/1776)) ([7c6fb15](https://github.com/AztecProtocol/aztec-packages/commit/7c6fb15979b48d4d4d5eb5a1ea83d3c0d0ee3b5e)) +* Sync bb master ([#1842](https://github.com/AztecProtocol/aztec-packages/issues/1842)) ([2c1ff72](https://github.com/AztecProtocol/aztec-packages/commit/2c1ff729fd1994270644a96da5a954ce2ec72382)) +* Sync bb master ([#1852](https://github.com/AztecProtocol/aztec-packages/issues/1852)) ([f979878](https://github.com/AztecProtocol/aztec-packages/commit/f979878cb84dd1b0506cedd59e9df1bb65a99b0a)) +* Sync bb master ([#1866](https://github.com/AztecProtocol/aztec-packages/issues/1866)) ([e681a49](https://github.com/AztecProtocol/aztec-packages/commit/e681a4901ee51cdd133c126d299881be6fad3680)) +* Sync bb master ([#1947](https://github.com/AztecProtocol/aztec-packages/issues/1947)) ([eed58e1](https://github.com/AztecProtocol/aztec-packages/commit/eed58e157c2740043ad6f53c76b13ba9924c5d93)) +* **tests:** Use account class for e2e browser tests ([#1446](https://github.com/AztecProtocol/aztec-packages/issues/1446)) ([ff7ad30](https://github.com/AztecProtocol/aztec-packages/commit/ff7ad3030cc786ceb8525fec488555d42343a02f)) +* **tests:** Use new account class in e2e tests ([#1433](https://github.com/AztecProtocol/aztec-packages/issues/1433)) ([fe41757](https://github.com/AztecProtocol/aztec-packages/commit/fe4175759b4c311982026cd4c22ecce699f385a5)) +* Typescript script names should be consistent ([#1843](https://github.com/AztecProtocol/aztec-packages/issues/1843)) ([eff8fe7](https://github.com/AztecProtocol/aztec-packages/commit/eff8fe7ea9f2674383b7b8ea1232be49626fc595)) +* Update bootstrap.sh in Barretenberg to check for clang 16 ([#1717](https://github.com/AztecProtocol/aztec-packages/issues/1717)) ([87815d7](https://github.com/AztecProtocol/aztec-packages/commit/87815d7e0c6182973d98155c23d2f60b7c66314c)) +* Update formatting ([#1874](https://github.com/AztecProtocol/aztec-packages/issues/1874)) ([fb973ca](https://github.com/AztecProtocol/aztec-packages/commit/fb973caeabc2d10daaf052046987e54f563b7e4b)) +* Update function selector computation ([#2001](https://github.com/AztecProtocol/aztec-packages/issues/2001)) ([e07ea1a](https://github.com/AztecProtocol/aztec-packages/commit/e07ea1a887484f3a1a2ba8b5328af5abf6ccc6a2)) +* Update noir readme alter noir bootstrap to always install tagged version ([#1563](https://github.com/AztecProtocol/aztec-packages/issues/1563)) ([bfc79c2](https://github.com/AztecProtocol/aztec-packages/commit/bfc79c268ff26fec20997e6f7227625b60dc12bd)) +* Update pull request template ([#1379](https://github.com/AztecProtocol/aztec-packages/issues/1379)) ([a463dff](https://github.com/AztecProtocol/aztec-packages/commit/a463dffbc2df23dbdbeacc14a47f839906d4b29b)) +* Update to acvm 0.24.0 ([#1925](https://github.com/AztecProtocol/aztec-packages/issues/1925)) ([e728304](https://github.com/AztecProtocol/aztec-packages/commit/e72830468362f2ea26b3f830b7e056b096f56d6a)) +* Update to acvm 0.24.1 ([#1978](https://github.com/AztecProtocol/aztec-packages/issues/1978)) ([31c0a02](https://github.com/AztecProtocol/aztec-packages/commit/31c0a0219330bce94a16dea9833fd900e61d93b4)) +* Updating docs to clang16 ([#1875](https://github.com/AztecProtocol/aztec-packages/issues/1875)) ([a248dae](https://github.com/AztecProtocol/aztec-packages/commit/a248dae54af9cb7ca64b2a7780a4b90e3848a69b)) +* Use 2^19 as `MAX_CIRCUIT_SIZE` for NodeJS CLI ([#1834](https://github.com/AztecProtocol/aztec-packages/issues/1834)) ([c573282](https://github.com/AztecProtocol/aztec-packages/commit/c573282fd59e44df70ae125f68281ebb67b7453d)) +* Use context instead of custom oracles for public functions ([#1754](https://github.com/AztecProtocol/aztec-packages/issues/1754)) ([46de77a](https://github.com/AztecProtocol/aztec-packages/commit/46de77ad3e5e91b9276146410381c69ccba1ae2b)) + + +### Documentation + +* Account contract tutorial ([#1772](https://github.com/AztecProtocol/aztec-packages/issues/1772)) ([0faefba](https://github.com/AztecProtocol/aztec-packages/commit/0faefba283a7c654c0771ba8f15d5bb6346282ab)) +* Compile guide ([#1575](https://github.com/AztecProtocol/aztec-packages/issues/1575)) ([d93fa96](https://github.com/AztecProtocol/aztec-packages/commit/d93fa96e6c1229a7c1f3dbb583f49d27378d8603)), closes [#1569](https://github.com/AztecProtocol/aztec-packages/issues/1569) +* Convert quick start guides into e2e tests ([#1726](https://github.com/AztecProtocol/aztec-packages/issues/1726)) ([802a678](https://github.com/AztecProtocol/aztec-packages/commit/802a678e3dd19339cd88b105a0ce341026b58054)), closes [#1564](https://github.com/AztecProtocol/aztec-packages/issues/1564) +* Deploy command fix ([#1634](https://github.com/AztecProtocol/aztec-packages/issues/1634)) ([a0a43d6](https://github.com/AztecProtocol/aztec-packages/commit/a0a43d68189896b8d05ca92f1cecc77adc5ad6be)) +* Deploying contracs fixes ([#1633](https://github.com/AztecProtocol/aztec-packages/issues/1633)) ([5036b31](https://github.com/AztecProtocol/aztec-packages/commit/5036b3140bb9d2dc5cc130c3760049ff40bb987f)) +* Deploying contracts using `aztec-cli` ([#1592](https://github.com/AztecProtocol/aztec-packages/issues/1592)) ([b43d7a0](https://github.com/AztecProtocol/aztec-packages/commit/b43d7a008dd6672df67090390432893b597bcd62)) +* Derivation is not yet implemented for keys ([#1632](https://github.com/AztecProtocol/aztec-packages/issues/1632)) ([881bc71](https://github.com/AztecProtocol/aztec-packages/commit/881bc715d3d69de03bb6413d671f8a4e1cc7a5d6)) +* Developer/wallet-providers/keys ([#1271](https://github.com/AztecProtocol/aztec-packages/issues/1271)) ([d70c45b](https://github.com/AztecProtocol/aztec-packages/commit/d70c45b9a27189258daf767f2860bfc3894783a1)) +* Events ([#1768](https://github.com/AztecProtocol/aztec-packages/issues/1768)) ([5a38cea](https://github.com/AztecProtocol/aztec-packages/commit/5a38cea3f7c1567a8eea3d6c2c58cad6f79b05f2)), closes [#1756](https://github.com/AztecProtocol/aztec-packages/issues/1756) +* Including "real" code in keys docs ([#1767](https://github.com/AztecProtocol/aztec-packages/issues/1767)) ([cd9cadb](https://github.com/AztecProtocol/aztec-packages/commit/cd9cadbfb6b0311c381586799588a5f64df98f29)) +* **keys:** Complete addresses are now broadcast ([#1975](https://github.com/AztecProtocol/aztec-packages/issues/1975)) ([92068ad](https://github.com/AztecProtocol/aztec-packages/commit/92068ad4249b2a20a4c83d82b82517ccdcbfe7f9)), closes [#1936](https://github.com/AztecProtocol/aztec-packages/issues/1936) +* Limitations, privacy, roadmap ([#1759](https://github.com/AztecProtocol/aztec-packages/issues/1759)) ([0cdb27a](https://github.com/AztecProtocol/aztec-packages/commit/0cdb27af8359b61b4a1f51a829ddfc4995ec1d30)) +* **limitations:** Limitations on ordering and logs of chopped notes ([#2085](https://github.com/AztecProtocol/aztec-packages/issues/2085)) ([315ad3d](https://github.com/AztecProtocol/aztec-packages/commit/315ad3d58eeb467361848a1e70fd32f3074b35d5)), closes [#1652](https://github.com/AztecProtocol/aztec-packages/issues/1652) +* Link to local ethereum nodes in testing guide ([#2061](https://github.com/AztecProtocol/aztec-packages/issues/2061)) ([e29148b](https://github.com/AztecProtocol/aztec-packages/commit/e29148b379a435a9fefd846cc5fe78af6be7021d)) +* Lists of questions to be addressed ([#1414](https://github.com/AztecProtocol/aztec-packages/issues/1414)) ([64bf57b](https://github.com/AztecProtocol/aztec-packages/commit/64bf57b0788f5db78f74b1aa1fb93c50ff72271b)) +* Put dev docs before spec ([#1944](https://github.com/AztecProtocol/aztec-packages/issues/1944)) ([f1b29cd](https://github.com/AztecProtocol/aztec-packages/commit/f1b29cd7c7bc0ace2cef55d54f647077e94facad)) +* Quick start guide for up page ([#1573](https://github.com/AztecProtocol/aztec-packages/issues/1573)) ([b102517](https://github.com/AztecProtocol/aztec-packages/commit/b102517c24cb4ed5fa05d0078a3eddd2bcc7cb77)) +* Some initial noir contract docs ([#1449](https://github.com/AztecProtocol/aztec-packages/issues/1449)) ([a3514c3](https://github.com/AztecProtocol/aztec-packages/commit/a3514c30438c7ef5c1aa9eb4640d228649ee4410)) +* Storage and state variables ([#1725](https://github.com/AztecProtocol/aztec-packages/issues/1725)) ([fc72f84](https://github.com/AztecProtocol/aztec-packages/commit/fc72f84a5bf21f083eddf3b8c59a00321dce26fd)) +* Use the pre-processor code snippet import method ([#1719](https://github.com/AztecProtocol/aztec-packages/issues/1719)) ([54f6410](https://github.com/AztecProtocol/aztec-packages/commit/54f641081c141e035097a39935952de6be3090fc)) +* Wallet dev docs ([#1746](https://github.com/AztecProtocol/aztec-packages/issues/1746)) ([9b4281d](https://github.com/AztecProtocol/aztec-packages/commit/9b4281dab16868cdda86a8f59d6d62aaaa8a90d6)), closes [#1744](https://github.com/AztecProtocol/aztec-packages/issues/1744) + ## [0.1.0-alpha63](https://github.com/AztecProtocol/aztec-packages/compare/v0.1.0-alpha62...v0.1.0-alpha63) (2023-09-08) diff --git a/barretenberg b/barretenberg deleted file mode 120000 index be0e6e60034..00000000000 --- a/barretenberg +++ /dev/null @@ -1 +0,0 @@ -./circuits/cpp/barretenberg \ No newline at end of file diff --git a/barretenberg/CHANGELOG.md b/barretenberg/CHANGELOG.md new file mode 100644 index 00000000000..ed5349f8ed4 --- /dev/null +++ b/barretenberg/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.1...barretenberg-v0.6.0) (2023-09-08) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions diff --git a/barretenberg/ts/CHANGELOG.md b/barretenberg/ts/CHANGELOG.md new file mode 100644 index 00000000000..671bded009e --- /dev/null +++ b/barretenberg/ts/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.1...barretenberg.js-v0.6.0) (2023-09-08) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions From b588e3aad944c7a7f555718794609a9b2559e18a Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 13:17:12 +0100 Subject: [PATCH 018/104] fix(build): Don't include component in tag (#2128) This PR contains a fix for the release please config. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- release-please-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index ad2f1a56895..fc4498e454e 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -6,7 +6,7 @@ "group-pull-request-title-pattern": "chore(master): Release ${version}", "pull-request-header": ":robot: I have created a new Aztec Packages release", "versioning": "default", - "include-component-in-tag": true, + "include-component-in-tag": false, "changelog-sections": [ { "type": "feat", "section": "Features", "hidden": false }, { "type": "fix", "section": "Bug Fixes", "hidden": false }, From 73b484f474a16b53920fa1dc4f71cbe1ff2bf9ce Mon Sep 17 00:00:00 2001 From: Suyash Bagad Date: Fri, 8 Sep 2023 17:57:03 +0530 Subject: [PATCH 019/104] chore(documentation): document noteCommitment vs noteHash (#2127) resolves #1679 --- docs/docs/dev_docs/limitations/main.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/dev_docs/limitations/main.md b/docs/docs/dev_docs/limitations/main.md index b1b68edad2c..d4198b7327e 100644 --- a/docs/docs/dev_docs/limitations/main.md +++ b/docs/docs/dev_docs/limitations/main.md @@ -247,6 +247,10 @@ A note which is created and nullified during the very same transaction is called For the time being, such chopped notes are still emitted through encrypted logs (which is the communication channel to transmit notes). When a log containing a chopped note is processed, a warning will be logged about a decrypted note which does not exist in data tree. We [improved](https://github.com/AztecProtocol/aztec-packages/issues/1603) error logging to help identify such an occurence. However, this might be a source of confusion. This issue is tracked in ticket [#1641](https://github.com/AztecProtocol/aztec-packages/issues/1641). +### Note Terminology: Note Commitments and Note Hashes + +The notes or UTXOs in Aztec need to be compressed before they are added to the trees. To do so, we need to hash all the data inside a note using a collision-resistant hash function. Currently, we use Pedersen hash (using lookup tables) to compress note data. The compressed note data is referred to as "note commitments" in our architecture. However, note commitments are referred to as "note hashes" in aztec-noir code. Be mindful of that fact that note commitments and note hashes mean the same thing. Note that we only mean to talk about terminology here and in no way one should infer security/cryptographic properties (e.g., hiding, binding) based on the name. Namely, notes come with different flavours of security properties depending on the use case. + ## There's more See the [GitHub issues](https://github.com/AztecProtocol/aztec-packages/issues) for all known bugs fixes and features currently being worked on. \ No newline at end of file From 685aba71b2f9eb9be07f0126c41a44f25e93ad1f Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 12:27:32 +0000 Subject: [PATCH 020/104] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "00d33529c" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "00d33529c" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index c6c9d3a60db..794f4ba1140 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = dd9ca047380145de166fba0ed6010517ecd0b1f1 - parent = aabfb1383033364df9c045573098a4f13ca3a452 + commit = 00d33529c9c7737a1eca09876c999f9fe967e81c + parent = 73b484f474a16b53920fa1dc4f71cbe1ff2bf9ce method = merge cmdver = 0.4.6 From 30f993502eb6b312fa57f0e995d359ed55b037f5 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 13:30:47 +0100 Subject: [PATCH 021/104] fix(build): Updated version file (#2131) Use the correct version file in aztec-packages # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 085135ec98c..28e75698839 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.1 +v0.6.0 x-release-please-version From 750a7570c91262e3320bc786fc2944c097427d94 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:03:14 +0100 Subject: [PATCH 022/104] chore(build): Reset version back (#2132) This PR retries the release please process # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .release-please-manifest.json | 2 +- VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f62e2f7a6d3..e6f825752b2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{".":"0.6.0","barretenberg":"0.6.0","barretenberg/ts":"0.6.0"} +{ ".": "0.5.1", "barretenberg": "0.5.1", "barretenberg/ts": "0.5.1" } diff --git a/VERSION b/VERSION index 28e75698839..f40eabb09c4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.0 x-release-please-version +v0.5.1 x-release-please-version From 7265c2adc64445ae635779351683e479d345fcaf Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 10:40:21 -0400 Subject: [PATCH 023/104] fix: retry with -eu was suspect in retrospect (#2110) --- build-system/scripts/retry | 1 - 1 file changed, 1 deletion(-) diff --git a/build-system/scripts/retry b/build-system/scripts/retry index 6559d67499e..88cbeb6789e 100755 --- a/build-system/scripts/retry +++ b/build-system/scripts/retry @@ -1,4 +1,3 @@ -set -eu ATTEMPTS=3 # Retries up to 3 times with 10 second intervals for i in $(seq 1 $ATTEMPTS); do From ff662f92bc3642b6ccc4a6bf06df579284ee80f1 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 14:40:44 +0000 Subject: [PATCH 024/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "26e1d4c23" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "26e1d4c23" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index 337161cb90f..d7a72a63a09 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = 3c9e2587706e0d87b67ec832f769502173db79b0 - parent = 9f741f4e181120edcb63c28fa6c50b5b5e2e26c9 + commit = 26e1d4c2303af8cd5bb42e47b9dab20e42f9a940 + parent = 7265c2adc64445ae635779351683e479d345fcaf method = merge cmdver = 0.4.6 From f26c9a0df2889c1e1bfbc706199abed67ed3efc4 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:44:00 +0100 Subject: [PATCH 025/104] chore(build): Force a rebuild (#2136) This PR is simply to force a rebuild an invoke a new release PR. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- yarn-project/aztec-sandbox/src/server.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn-project/aztec-sandbox/src/server.ts b/yarn-project/aztec-sandbox/src/server.ts index 7d8893e05c2..e749c4cc79c 100644 --- a/yarn-project/aztec-sandbox/src/server.ts +++ b/yarn-project/aztec-sandbox/src/server.ts @@ -27,5 +27,6 @@ export function startHttpRpcServer( const httpServer = http.createServer(app.callback()); httpServer.listen(port); + return httpServer; } From 0f988b77ed4c1d0b01916763433344b54765e65a Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 12:07:01 -0400 Subject: [PATCH 026/104] chore: Delete broken bb Dockerfile.arm64-linux-gcc (#2138) --- build_manifest.json | 16 - .../cpp/crosstool/arm64-linux.config | 799 ------------------ .../dockerfiles/Dockerfile.arm64-linux-gcc | 8 - ...e.circuits-wasm-linux-clang-builder-runner | 8 - ...circuits-x86_64-linux-clang-builder-runner | 18 - .../cpp/dockerfiles/Dockerfile.crosstool-ng | 16 - .../dockerfiles/Dockerfile.crosstool-ng-arm64 | 28 - .../dockerfiles/Dockerfile.arm64-linux-gcc | 7 - .../cpp/dockerfiles/Dockerfile.crosstool-ng | 16 - .../dockerfiles/Dockerfile.crosstool-ng-arm64 | 28 - 10 files changed, 944 deletions(-) delete mode 100644 circuits/cpp/barretenberg/cpp/crosstool/arm64-linux.config delete mode 100644 circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.arm64-linux-gcc delete mode 100644 circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner delete mode 100644 circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-x86_64-linux-clang-builder-runner delete mode 100644 circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng delete mode 100644 circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 delete mode 100644 circuits/cpp/dockerfiles/Dockerfile.arm64-linux-gcc delete mode 100644 circuits/cpp/dockerfiles/Dockerfile.crosstool-ng delete mode 100644 circuits/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 diff --git a/build_manifest.json b/build_manifest.json index bbb6aea3a9f..1f66e42c979 100644 --- a/build_manifest.json +++ b/build_manifest.json @@ -39,22 +39,6 @@ ], "dependencies": [] }, - "barretenberg-circuits-x86_64-linux-clang-builder-runner": { - "buildDir": "circuits/cpp/barretenberg/cpp", - "dockerfile": "dockerfiles/Dockerfile.circuits-x86_64-linux-clang-builder-runner", - "rebuildPatterns": [ - "^circuits/cpp/barretenberg/.*\\.(cpp|cc|cxx|c\\+\\+|h|hpp|hxx|h\\+\\+|c|h|inl|inc|ipp|tpp|cmake)$|^circuits/cpp/barretenberg/.*CMakeLists\\.txt$" - ], - "dependencies": [] - }, - "barretenberg-circuits-wasm-linux-clang-builder-runner": { - "buildDir": "circuits/cpp/barretenberg/cpp", - "dockerfile": "dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner", - "rebuildPatterns": [ - "^circuits/cpp/barretenberg/.*\\.(cpp|cc|cxx|c\\+\\+|h|hpp|hxx|h\\+\\+|c|h|inl|inc|ipp|tpp|cmake)$|^circuits/cpp/barretenberg/.*CMakeLists\\.txt$" - ], - "dependencies": [] - }, "bb.js": { "buildDir": "circuits/cpp/barretenberg/ts", "rebuildPatterns": ["^circuits/cpp/barretenberg/ts/"], diff --git a/circuits/cpp/barretenberg/cpp/crosstool/arm64-linux.config b/circuits/cpp/barretenberg/cpp/crosstool/arm64-linux.config deleted file mode 100644 index 560dc0300fb..00000000000 --- a/circuits/cpp/barretenberg/cpp/crosstool/arm64-linux.config +++ /dev/null @@ -1,799 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# crosstool-NG Configuration -# -CT_CONFIGURE_has_static_link=y -CT_CONFIGURE_has_cxx11=y -CT_CONFIGURE_has_wget=y -CT_CONFIGURE_has_make_3_81_or_newer=y -CT_CONFIGURE_has_make_4_0_or_newer=y -CT_CONFIGURE_has_libtool_2_4_or_newer=y -CT_CONFIGURE_has_libtoolize_2_4_or_newer=y -CT_CONFIGURE_has_autoconf_2_65_or_newer=y -CT_CONFIGURE_has_autoreconf_2_65_or_newer=y -CT_CONFIGURE_has_automake_1_15_or_newer=y -CT_CONFIGURE_has_gnu_m4_1_4_12_or_newer=y -CT_CONFIGURE_has_bison_2_7_or_newer=y -CT_CONFIGURE_has_python=y -CT_CONFIGURE_has_git=y -CT_CONFIGURE_has_md5sum=y -CT_CONFIGURE_has_sha1sum=y -CT_CONFIGURE_has_sha256sum=y -CT_CONFIGURE_has_sha512sum=y -CT_CONFIGURE_has_install_with_strip_program=y -CT_CONFIG_VERSION_CURRENT="3" -CT_CONFIG_VERSION="3" -CT_MODULES=y - -# -# Paths and misc options -# - -# -# crosstool-NG behavior -# -# CT_OBSOLETE is not set -# CT_EXPERIMENTAL is not set -# CT_DEBUG_CT is not set - -# -# Paths -# -CT_LOCAL_TARBALLS_DIR="${HOME}/src" -CT_SAVE_TARBALLS=y -# CT_TARBALLS_BUILDROOT_LAYOUT is not set -CT_WORK_DIR="${CT_TOP_DIR}/.build" -CT_BUILD_TOP_DIR="${CT_WORK_DIR:-${CT_TOP_DIR}/.build}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}" -CT_PREFIX_DIR="${CT_PREFIX:-${HOME}/x-tools}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}" -CT_RM_RF_PREFIX_DIR=y -CT_REMOVE_DOCS=y -CT_INSTALL_LICENSES=y -CT_PREFIX_DIR_RO=y -CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y -# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set - -# -# Downloading -# -CT_DOWNLOAD_AGENT_WGET=y -# CT_DOWNLOAD_AGENT_NONE is not set -# CT_FORBID_DOWNLOAD is not set -# CT_FORCE_DOWNLOAD is not set -CT_CONNECT_TIMEOUT=10 -CT_DOWNLOAD_WGET_OPTIONS="--passive-ftp --tries=3 -nc --progress=dot:binary" -# CT_ONLY_DOWNLOAD is not set -# CT_USE_MIRROR is not set -CT_VERIFY_DOWNLOAD_DIGEST=y -CT_VERIFY_DOWNLOAD_DIGEST_SHA512=y -# CT_VERIFY_DOWNLOAD_DIGEST_SHA256 is not set -# CT_VERIFY_DOWNLOAD_DIGEST_SHA1 is not set -# CT_VERIFY_DOWNLOAD_DIGEST_MD5 is not set -CT_VERIFY_DOWNLOAD_DIGEST_ALG="sha512" -# CT_VERIFY_DOWNLOAD_SIGNATURE is not set - -# -# Extracting -# -# CT_FORCE_EXTRACT is not set -CT_OVERRIDE_CONFIG_GUESS_SUB=y -# CT_ONLY_EXTRACT is not set -CT_PATCH_BUNDLED=y -# CT_PATCH_BUNDLED_LOCAL is not set -CT_PATCH_ORDER="bundled" - -# -# Build behavior -# -CT_PARALLEL_JOBS=0 -CT_LOAD="" -CT_USE_PIPES=y -CT_EXTRA_CFLAGS_FOR_BUILD="" -CT_EXTRA_LDFLAGS_FOR_BUILD="" -CT_EXTRA_CFLAGS_FOR_HOST="" -CT_EXTRA_LDFLAGS_FOR_HOST="" -# CT_CONFIG_SHELL_SH is not set -# CT_CONFIG_SHELL_ASH is not set -CT_CONFIG_SHELL_BASH=y -# CT_CONFIG_SHELL_CUSTOM is not set -CT_CONFIG_SHELL="${bash}" - -# -# Logging -# -# CT_LOG_ERROR is not set -# CT_LOG_WARN is not set -# CT_LOG_INFO is not set -CT_LOG_EXTRA=y -# CT_LOG_ALL is not set -# CT_LOG_DEBUG is not set -CT_LOG_LEVEL_MAX="EXTRA" -# CT_LOG_SEE_TOOLS_WARN is not set -CT_LOG_PROGRESS_BAR=y -CT_LOG_TO_FILE=y -CT_LOG_FILE_COMPRESS=y - -# -# Target options -# -# CT_ARCH_ALPHA is not set -# CT_ARCH_ARC is not set -CT_ARCH_ARM=y -# CT_ARCH_AVR is not set -# CT_ARCH_M68K is not set -# CT_ARCH_MIPS is not set -# CT_ARCH_NIOS2 is not set -# CT_ARCH_POWERPC is not set -# CT_ARCH_S390 is not set -# CT_ARCH_SH is not set -# CT_ARCH_SPARC is not set -# CT_ARCH_X86 is not set -# CT_ARCH_XTENSA is not set -CT_ARCH="arm" -CT_ARCH_CHOICE_KSYM="ARM" -CT_ARCH_CPU="" -CT_ARCH_TUNE="" -CT_ARCH_ARM_SHOW=y - -# -# Options for arm -# -CT_ARCH_ARM_PKG_KSYM="" -CT_ALL_ARCH_CHOICES="ALPHA ARC ARM AVR M68K MICROBLAZE MIPS MOXIE MSP430 NIOS2 POWERPC RISCV S390 SH SPARC X86 XTENSA" -CT_ARCH_SUFFIX="" -# CT_OMIT_TARGET_VENDOR is not set - -# -# Generic target options -# -# CT_MULTILIB is not set -CT_DEMULTILIB=y -CT_ARCH_SUPPORTS_BOTH_MMU=y -CT_ARCH_DEFAULT_HAS_MMU=y -CT_ARCH_USE_MMU=y -CT_ARCH_SUPPORTS_FLAT_FORMAT=y -CT_ARCH_SUPPORTS_EITHER_ENDIAN=y -CT_ARCH_DEFAULT_LE=y -# CT_ARCH_BE is not set -CT_ARCH_LE=y -CT_ARCH_ENDIAN="little" -CT_ARCH_SUPPORTS_32=y -CT_ARCH_SUPPORTS_64=y -CT_ARCH_DEFAULT_32=y -CT_ARCH_BITNESS=64 -# CT_ARCH_32 is not set -CT_ARCH_64=y - -# -# Target optimisations -# -CT_ARCH_SUPPORTS_WITH_ARCH=y -CT_ARCH_SUPPORTS_WITH_CPU=y -CT_ARCH_SUPPORTS_WITH_TUNE=y -CT_ARCH_EXCLUSIVE_WITH_CPU=y -CT_ARCH_ARCH="" -CT_TARGET_CFLAGS="" -CT_TARGET_LDFLAGS="" - -# -# Toolchain options -# - -# -# General toolchain options -# -CT_FORCE_SYSROOT=y -CT_USE_SYSROOT=y -CT_SYSROOT_NAME="sysroot" -CT_SYSROOT_DIR_PREFIX="" -CT_WANTS_STATIC_LINK=y -CT_WANTS_STATIC_LINK_CXX=y -# CT_STATIC_TOOLCHAIN is not set -CT_SHOW_CT_VERSION=y -CT_TOOLCHAIN_PKGVERSION="" -CT_TOOLCHAIN_BUGURL="" - -# -# Tuple completion and aliasing -# -CT_TARGET_VENDOR="" -CT_TARGET_ALIAS_SED_EXPR="" -CT_TARGET_ALIAS="" - -# -# Toolchain type -# -CT_CROSS=y -# CT_CANADIAN is not set -CT_TOOLCHAIN_TYPE="cross" - -# -# Build system -# -CT_BUILD="" -CT_BUILD_PREFIX="" -CT_BUILD_SUFFIX="" - -# -# Misc options -# -# CT_TOOLCHAIN_ENABLE_NLS is not set - -# -# Operating System -# -CT_KERNEL_SUPPORTS_SHARED_LIBS=y -# CT_KERNEL_BARE_METAL is not set -CT_KERNEL_LINUX=y -CT_KERNEL="linux" -CT_KERNEL_CHOICE_KSYM="LINUX" -CT_KERNEL_LINUX_SHOW=y - -# -# Options for linux -# -CT_KERNEL_LINUX_PKG_KSYM="LINUX" -CT_LINUX_DIR_NAME="linux" -CT_LINUX_PKG_NAME="linux" -CT_LINUX_SRC_RELEASE=y -CT_LINUX_PATCH_ORDER="global" -# CT_LINUX_V_4_20 is not set -# CT_LINUX_V_4_19 is not set -# CT_LINUX_V_4_18 is not set -# CT_LINUX_V_4_17 is not set -# CT_LINUX_V_4_16 is not set -# CT_LINUX_V_4_15 is not set -# CT_LINUX_V_4_14 is not set -# CT_LINUX_V_4_13 is not set -# CT_LINUX_V_4_12 is not set -# CT_LINUX_V_4_11 is not set -CT_LINUX_V_4_10=y -# CT_LINUX_V_4_9 is not set -# CT_LINUX_V_4_4 is not set -# CT_LINUX_V_4_1 is not set -# CT_LINUX_V_3_16 is not set -# CT_LINUX_V_3_13 is not set -# CT_LINUX_V_3_12 is not set -# CT_LINUX_V_3_10 is not set -# CT_LINUX_NO_VERSIONS is not set -CT_LINUX_VERSION="4.10.17" -CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})" -CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_LINUX_ARCHIVE_FORMATS=".tar.xz .tar.gz" -CT_LINUX_SIGNATURE_FORMAT="unpacked/.sign" -CT_LINUX_later_than_4_8=y -CT_LINUX_4_8_or_later=y -CT_LINUX_later_than_3_7=y -CT_LINUX_3_7_or_later=y -CT_LINUX_REQUIRE_3_7_or_later=y -CT_LINUX_later_than_3_2=y -CT_LINUX_3_2_or_later=y -CT_LINUX_REQUIRE_3_2_or_later=y -CT_KERNEL_LINUX_VERBOSITY_0=y -# CT_KERNEL_LINUX_VERBOSITY_1 is not set -# CT_KERNEL_LINUX_VERBOSITY_2 is not set -CT_KERNEL_LINUX_VERBOSE_LEVEL=0 -CT_KERNEL_LINUX_INSTALL_CHECK=y -CT_ALL_KERNEL_CHOICES="BARE_METAL LINUX WINDOWS" - -# -# Common kernel options -# -CT_SHARED_LIBS=y - -# -# Binary utilities -# -CT_ARCH_BINFMT_ELF=y -CT_BINUTILS_BINUTILS=y -CT_BINUTILS="binutils" -CT_BINUTILS_CHOICE_KSYM="BINUTILS" -CT_BINUTILS_BINUTILS_SHOW=y - -# -# Options for binutils -# -CT_BINUTILS_BINUTILS_PKG_KSYM="BINUTILS" -CT_BINUTILS_DIR_NAME="binutils" -CT_BINUTILS_USE_GNU=y -CT_BINUTILS_USE="BINUTILS" -CT_BINUTILS_PKG_NAME="binutils" -CT_BINUTILS_SRC_RELEASE=y -CT_BINUTILS_PATCH_ORDER="global" -# CT_BINUTILS_V_2_29 is not set -CT_BINUTILS_V_2_28=y -# CT_BINUTILS_V_2_27 is not set -# CT_BINUTILS_V_2_26 is not set -# CT_BINUTILS_NO_VERSIONS is not set -CT_BINUTILS_VERSION="2.28.1" -CT_BINUTILS_MIRRORS="$(CT_Mirrors GNU binutils) $(CT_Mirrors sourceware binutils/releases)" -CT_BINUTILS_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_BINUTILS_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_BINUTILS_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz" -CT_BINUTILS_SIGNATURE_FORMAT="packed/.sig" -CT_BINUTILS_2_30_or_older=y -CT_BINUTILS_older_than_2_30=y -CT_BINUTILS_REQUIRE_older_than_2_30=y -CT_BINUTILS_later_than_2_27=y -CT_BINUTILS_2_27_or_later=y -CT_BINUTILS_later_than_2_25=y -CT_BINUTILS_2_25_or_later=y -CT_BINUTILS_later_than_2_23=y -CT_BINUTILS_2_23_or_later=y - -# -# GNU binutils -# -CT_BINUTILS_HAS_HASH_STYLE=y -CT_BINUTILS_HAS_GOLD=y -CT_BINUTILS_HAS_PLUGINS=y -CT_BINUTILS_HAS_PKGVERSION_BUGURL=y -CT_BINUTILS_GOLD_SUPPORTS_ARCH=y -CT_BINUTILS_GOLD_SUPPORT=y -CT_BINUTILS_FORCE_LD_BFD_DEFAULT=y -# CT_BINUTILS_LINKER_LD is not set -CT_BINUTILS_LINKER_LD_GOLD=y -CT_BINUTILS_GOLD_INSTALLED=y -CT_BINUTILS_GOLD_THREADS=y -CT_BINUTILS_LINKER_BOTH=y -CT_BINUTILS_LINKERS_LIST="ld,gold" -CT_BINUTILS_LD_WRAPPER=y -CT_BINUTILS_LINKER_DEFAULT="bfd" -CT_BINUTILS_PLUGINS=y -CT_BINUTILS_RELRO=m -CT_BINUTILS_EXTRA_CONFIG_ARRAY="" -# CT_BINUTILS_FOR_TARGET is not set -CT_ALL_BINUTILS_CHOICES="BINUTILS" - -# -# C-library -# -CT_LIBC_GLIBC=y -# CT_LIBC_UCLIBC is not set -CT_LIBC="glibc" -CT_LIBC_CHOICE_KSYM="GLIBC" -CT_THREADS="nptl" -CT_LIBC_GLIBC_SHOW=y - -# -# Options for glibc -# -CT_LIBC_GLIBC_PKG_KSYM="GLIBC" -CT_GLIBC_DIR_NAME="glibc" -CT_GLIBC_USE_GNU=y -CT_GLIBC_USE="GLIBC" -CT_GLIBC_PKG_NAME="glibc" -CT_GLIBC_SRC_RELEASE=y -CT_GLIBC_PATCH_ORDER="global" -# CT_GLIBC_V_2_28 is not set -# CT_GLIBC_V_2_27 is not set -# CT_GLIBC_V_2_26 is not set -CT_GLIBC_V_2_25=y -# CT_GLIBC_V_2_24 is not set -# CT_GLIBC_V_2_23 is not set -# CT_GLIBC_V_2_19 is not set -# CT_GLIBC_V_2_17 is not set -# CT_GLIBC_V_2_12_1 is not set -# CT_GLIBC_NO_VERSIONS is not set -CT_GLIBC_VERSION="2.25" -CT_GLIBC_MIRRORS="$(CT_Mirrors GNU glibc)" -CT_GLIBC_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_GLIBC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_GLIBC_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz" -CT_GLIBC_SIGNATURE_FORMAT="packed/.sig" -CT_GLIBC_2_29_or_older=y -CT_GLIBC_older_than_2_29=y -CT_GLIBC_REQUIRE_older_than_2_29=y -CT_GLIBC_2_27_or_older=y -CT_GLIBC_older_than_2_27=y -CT_GLIBC_2_26_or_older=y -CT_GLIBC_older_than_2_26=y -CT_GLIBC_2_25_or_later=y -CT_GLIBC_2_25_or_older=y -CT_GLIBC_later_than_2_24=y -CT_GLIBC_2_24_or_later=y -CT_GLIBC_later_than_2_23=y -CT_GLIBC_2_23_or_later=y -CT_GLIBC_later_than_2_20=y -CT_GLIBC_2_20_or_later=y -CT_GLIBC_later_than_2_17=y -CT_GLIBC_2_17_or_later=y -CT_GLIBC_later_than_2_14=y -CT_GLIBC_2_14_or_later=y -CT_GLIBC_DEP_KERNEL_HEADERS_VERSION=y -CT_GLIBC_DEP_BINUTILS=y -CT_GLIBC_DEP_GCC=y -CT_GLIBC_DEP_PYTHON=y -CT_GLIBC_BUILD_SSP=y -CT_GLIBC_HAS_LIBIDN_ADDON=y -# CT_GLIBC_USE_LIBIDN_ADDON is not set -CT_GLIBC_NO_SPARC_V8=y -CT_GLIBC_HAS_OBSOLETE_RPC=y -CT_GLIBC_EXTRA_CONFIG_ARRAY="" -CT_GLIBC_CONFIGPARMS="" -CT_GLIBC_EXTRA_CFLAGS="" -CT_GLIBC_ENABLE_OBSOLETE_RPC=y -# CT_GLIBC_DISABLE_VERSIONING is not set -CT_GLIBC_OLDEST_ABI="" -CT_GLIBC_FORCE_UNWIND=y -# CT_GLIBC_LOCALES is not set -# CT_GLIBC_KERNEL_VERSION_NONE is not set -CT_GLIBC_KERNEL_VERSION_AS_HEADERS=y -# CT_GLIBC_KERNEL_VERSION_CHOSEN is not set -CT_GLIBC_MIN_KERNEL="4.10.17" -CT_GLIBC_SSP_DEFAULT=y -# CT_GLIBC_SSP_NO is not set -# CT_GLIBC_SSP_YES is not set -# CT_GLIBC_SSP_ALL is not set -# CT_GLIBC_SSP_STRONG is not set -CT_GLIBC_ENABLE_WERROR=y -CT_ALL_LIBC_CHOICES="AVR_LIBC BIONIC GLIBC MINGW_W64 MOXIEBOX MUSL NEWLIB NONE UCLIBC" -CT_LIBC_SUPPORT_THREADS_ANY=y -CT_LIBC_SUPPORT_THREADS_NATIVE=y - -# -# Common C library options -# -CT_THREADS_NATIVE=y -# CT_CREATE_LDSO_CONF is not set -CT_LIBC_XLDD=y - -# -# C compiler -# -CT_CC_CORE_PASSES_NEEDED=y -CT_CC_CORE_PASS_1_NEEDED=y -CT_CC_CORE_PASS_2_NEEDED=y -CT_CC_SUPPORT_CXX=y -CT_CC_SUPPORT_FORTRAN=y -CT_CC_SUPPORT_ADA=y -CT_CC_SUPPORT_OBJC=y -CT_CC_SUPPORT_OBJCXX=y -CT_CC_SUPPORT_GOLANG=y -CT_CC_GCC=y -CT_CC="gcc" -CT_CC_CHOICE_KSYM="GCC" -CT_CC_GCC_SHOW=y - -# -# Options for gcc -# -CT_CC_GCC_PKG_KSYM="GCC" -CT_GCC_DIR_NAME="gcc" -CT_GCC_USE_GNU=y -CT_GCC_USE="GCC" -CT_GCC_PKG_NAME="gcc" -CT_GCC_SRC_RELEASE=y -CT_GCC_PATCH_ORDER="global" -# CT_GCC_V_8 is not set -CT_GCC_V_7=y -# CT_GCC_V_6 is not set -# CT_GCC_V_5 is not set -# CT_GCC_V_4_9 is not set -# CT_GCC_NO_VERSIONS is not set -CT_GCC_VERSION="7.4.0" -CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})" -CT_GCC_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_GCC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_GCC_ARCHIVE_FORMATS=".tar.xz .tar.gz" -CT_GCC_SIGNATURE_FORMAT="" -CT_GCC_later_than_7=y -CT_GCC_7_or_later=y -CT_GCC_later_than_6=y -CT_GCC_6_or_later=y -CT_GCC_later_than_5=y -CT_GCC_5_or_later=y -CT_GCC_later_than_4_9=y -CT_GCC_4_9_or_later=y -CT_GCC_later_than_4_8=y -CT_GCC_4_8_or_later=y -CT_CC_GCC_ENABLE_PLUGINS=y -CT_CC_GCC_GOLD=y -CT_CC_GCC_HAS_LIBMPX=y -CT_CC_GCC_ENABLE_CXX_FLAGS="" -CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY="" -CT_CC_GCC_EXTRA_CONFIG_ARRAY="" -CT_CC_GCC_STATIC_LIBSTDCXX=y -# CT_CC_GCC_SYSTEM_ZLIB is not set -CT_CC_GCC_CONFIG_TLS=m - -# -# Optimisation features -# -CT_CC_GCC_USE_GRAPHITE=y -CT_CC_GCC_USE_LTO=y - -# -# Settings for libraries running on target -# -CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y -# CT_CC_GCC_LIBMUDFLAP is not set -CT_CC_GCC_LIBGOMP=y -# CT_CC_GCC_LIBSSP is not set -# CT_CC_GCC_LIBQUADMATH is not set -# CT_CC_GCC_LIBSANITIZER is not set - -# -# Misc. obscure options. -# -CT_CC_CXA_ATEXIT=y -# CT_CC_GCC_DISABLE_PCH is not set -CT_CC_GCC_SJLJ_EXCEPTIONS=m -CT_CC_GCC_LDBL_128=m -# CT_CC_GCC_BUILD_ID is not set -CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y -# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set -# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set -# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set -CT_CC_GCC_LNK_HASH_STYLE="" -CT_CC_GCC_DEC_FLOAT_AUTO=y -# CT_CC_GCC_DEC_FLOAT_BID is not set -# CT_CC_GCC_DEC_FLOAT_DPD is not set -# CT_CC_GCC_DEC_FLOATS_NO is not set -CT_ALL_CC_CHOICES="GCC" - -# -# Additional supported languages: -# -CT_CC_LANG_CXX=y -CT_CC_LANG_FORTRAN=y - -# -# Debug facilities -# -# CT_DEBUG_DUMA is not set -# CT_DEBUG_GDB is not set -# CT_GDB_USE_GNU is not set -# CT_GDB_SRC_RELEASE is not set -# CT_GDB_V_8_2 is not set -# CT_GDB_V_8_1 is not set -# CT_GDB_V_8_0 is not set -# CT_GDB_V_7_12 is not set -# CT_GDB_V_7_11 is not set -# CT_DEBUG_LTRACE is not set -# CT_DEBUG_STRACE is not set -CT_ALL_DEBUG_CHOICES="DUMA GDB LTRACE STRACE" - -# -# Companion libraries -# -# CT_COMPLIBS_CHECK is not set -CT_COMP_LIBS_CLOOG=y -CT_COMP_LIBS_CLOOG_PKG_KSYM="CLOOG" -CT_CLOOG_DIR_NAME="cloog" -CT_CLOOG_PKG_NAME="cloog" -CT_CLOOG_SRC_RELEASE=y -CT_CLOOG_PATCH_ORDER="global" -CT_CLOOG_V_0_18_4=y -# CT_CLOOG_NO_VERSIONS is not set -CT_CLOOG_VERSION="0.18.4" -CT_CLOOG_MIRRORS="http://www.bastoul.net/cloog/pages/download ftp://gcc.gnu.org/pub/gcc/infrastructure" -CT_CLOOG_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_CLOOG_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_CLOOG_ARCHIVE_FORMATS=".tar.gz" -CT_CLOOG_SIGNATURE_FORMAT="" -CT_CLOOG_0_18_4_or_later=y -CT_CLOOG_0_18_4_or_older=y -CT_CLOOG_later_than_0_18_1=y -CT_CLOOG_0_18_1_or_later=y -CT_COMP_LIBS_EXPAT=y -CT_COMP_LIBS_EXPAT_PKG_KSYM="EXPAT" -CT_EXPAT_DIR_NAME="expat" -CT_EXPAT_PKG_NAME="expat" -CT_EXPAT_SRC_RELEASE=y -CT_EXPAT_PATCH_ORDER="global" -CT_EXPAT_V_2_2=y -# CT_EXPAT_NO_VERSIONS is not set -CT_EXPAT_VERSION="2.2.6" -CT_EXPAT_MIRRORS="http://downloads.sourceforge.net/project/expat/expat/${CT_EXPAT_VERSION}" -CT_EXPAT_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_EXPAT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_EXPAT_ARCHIVE_FORMATS=".tar.bz2" -CT_EXPAT_SIGNATURE_FORMAT="" -CT_COMP_LIBS_GETTEXT=y -CT_COMP_LIBS_GETTEXT_PKG_KSYM="GETTEXT" -CT_GETTEXT_DIR_NAME="gettext" -CT_GETTEXT_PKG_NAME="gettext" -CT_GETTEXT_SRC_RELEASE=y -CT_GETTEXT_PATCH_ORDER="global" -CT_GETTEXT_V_0_19_8_1=y -# CT_GETTEXT_NO_VERSIONS is not set -CT_GETTEXT_VERSION="0.19.8.1" -CT_GETTEXT_MIRRORS="$(CT_Mirrors GNU gettext)" -CT_GETTEXT_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_GETTEXT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_GETTEXT_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.gz" -CT_GETTEXT_SIGNATURE_FORMAT="packed/.sig" -CT_COMP_LIBS_GMP=y -CT_COMP_LIBS_GMP_PKG_KSYM="GMP" -CT_GMP_DIR_NAME="gmp" -CT_GMP_PKG_NAME="gmp" -CT_GMP_SRC_RELEASE=y -CT_GMP_PATCH_ORDER="global" -CT_GMP_V_6_1=y -# CT_GMP_NO_VERSIONS is not set -CT_GMP_VERSION="6.1.2" -CT_GMP_MIRRORS="https://gmplib.org/download/gmp https://gmplib.org/download/gmp/archive $(CT_Mirrors GNU gmp)" -CT_GMP_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_GMP_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_GMP_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2" -CT_GMP_SIGNATURE_FORMAT="packed/.sig" -CT_GMP_later_than_5_1_0=y -CT_GMP_5_1_0_or_later=y -CT_GMP_later_than_5_0_0=y -CT_GMP_5_0_0_or_later=y -CT_COMP_LIBS_ISL=y -CT_COMP_LIBS_ISL_PKG_KSYM="ISL" -CT_ISL_DIR_NAME="isl" -CT_ISL_PKG_NAME="isl" -CT_ISL_SRC_RELEASE=y -CT_ISL_PATCH_ORDER="global" -# CT_ISL_V_0_20 is not set -# CT_ISL_V_0_19 is not set -# CT_ISL_V_0_18 is not set -# CT_ISL_V_0_17 is not set -# CT_ISL_V_0_16 is not set -CT_ISL_V_0_15=y -# CT_ISL_NO_VERSIONS is not set -CT_ISL_VERSION="0.15" -CT_ISL_MIRRORS="http://isl.gforge.inria.fr" -CT_ISL_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_ISL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_ISL_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz" -CT_ISL_SIGNATURE_FORMAT="" -CT_ISL_0_18_or_older=y -CT_ISL_older_than_0_18=y -CT_ISL_0_15_or_later=y -CT_ISL_0_15_or_older=y -CT_ISL_REQUIRE_0_15_or_later=y -CT_ISL_later_than_0_14=y -CT_ISL_0_14_or_later=y -CT_ISL_REQUIRE_0_14_or_later=y -CT_ISL_later_than_0_13=y -CT_ISL_0_13_or_later=y -CT_ISL_later_than_0_12=y -CT_ISL_0_12_or_later=y -CT_ISL_REQUIRE_0_12_or_later=y -# CT_COMP_LIBS_LIBELF is not set -CT_COMP_LIBS_LIBICONV=y -CT_COMP_LIBS_LIBICONV_PKG_KSYM="LIBICONV" -CT_LIBICONV_DIR_NAME="libiconv" -CT_LIBICONV_PKG_NAME="libiconv" -CT_LIBICONV_SRC_RELEASE=y -CT_LIBICONV_PATCH_ORDER="global" -CT_LIBICONV_V_1_15=y -# CT_LIBICONV_NO_VERSIONS is not set -CT_LIBICONV_VERSION="1.15" -CT_LIBICONV_MIRRORS="$(CT_Mirrors GNU libiconv)" -CT_LIBICONV_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_LIBICONV_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_LIBICONV_ARCHIVE_FORMATS=".tar.gz" -CT_LIBICONV_SIGNATURE_FORMAT="packed/.sig" -CT_COMP_LIBS_MPC=y -CT_COMP_LIBS_MPC_PKG_KSYM="MPC" -CT_MPC_DIR_NAME="mpc" -CT_MPC_PKG_NAME="mpc" -CT_MPC_SRC_RELEASE=y -CT_MPC_PATCH_ORDER="global" -# CT_MPC_V_1_1 is not set -CT_MPC_V_1_0=y -# CT_MPC_NO_VERSIONS is not set -CT_MPC_VERSION="1.0.3" -CT_MPC_MIRRORS="http://www.multiprecision.org/downloads $(CT_Mirrors GNU mpc)" -CT_MPC_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_MPC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_MPC_ARCHIVE_FORMATS=".tar.gz" -CT_MPC_SIGNATURE_FORMAT="packed/.sig" -CT_MPC_1_1_0_or_older=y -CT_MPC_older_than_1_1_0=y -CT_COMP_LIBS_MPFR=y -CT_COMP_LIBS_MPFR_PKG_KSYM="MPFR" -CT_MPFR_DIR_NAME="mpfr" -CT_MPFR_PKG_NAME="mpfr" -CT_MPFR_SRC_RELEASE=y -CT_MPFR_PATCH_ORDER="global" -CT_MPFR_V_3_1=y -# CT_MPFR_NO_VERSIONS is not set -CT_MPFR_VERSION="3.1.6" -CT_MPFR_MIRRORS="http://www.mpfr.org/mpfr-${CT_MPFR_VERSION} $(CT_Mirrors GNU mpfr)" -CT_MPFR_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_MPFR_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_MPFR_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz .zip" -CT_MPFR_SIGNATURE_FORMAT="packed/.asc" -CT_MPFR_4_0_0_or_older=y -CT_MPFR_older_than_4_0_0=y -CT_MPFR_REQUIRE_older_than_4_0_0=y -CT_MPFR_later_than_3_0_0=y -CT_MPFR_3_0_0_or_later=y -CT_COMP_LIBS_NCURSES=y -CT_COMP_LIBS_NCURSES_PKG_KSYM="NCURSES" -CT_NCURSES_DIR_NAME="ncurses" -CT_NCURSES_PKG_NAME="ncurses" -CT_NCURSES_SRC_RELEASE=y -CT_NCURSES_PATCH_ORDER="global" -# CT_NCURSES_V_6_1 is not set -CT_NCURSES_V_6_0=y -# CT_NCURSES_NO_VERSIONS is not set -CT_NCURSES_VERSION="6.0" -CT_NCURSES_MIRRORS="ftp://invisible-island.net/ncurses $(CT_Mirrors GNU ncurses)" -CT_NCURSES_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_NCURSES_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_NCURSES_ARCHIVE_FORMATS=".tar.gz" -CT_NCURSES_SIGNATURE_FORMAT="packed/.sig" -CT_NCURSES_HOST_CONFIG_ARGS="" -CT_NCURSES_HOST_DISABLE_DB=y -CT_NCURSES_HOST_FALLBACKS="linux,xterm,xterm-color,xterm-256color,vt100" -CT_NCURSES_TARGET_CONFIG_ARGS="" -# CT_NCURSES_TARGET_DISABLE_DB is not set -CT_NCURSES_TARGET_FALLBACKS="" -CT_COMP_LIBS_ZLIB=y -CT_COMP_LIBS_ZLIB_PKG_KSYM="ZLIB" -CT_ZLIB_DIR_NAME="zlib" -CT_ZLIB_PKG_NAME="zlib" -CT_ZLIB_SRC_RELEASE=y -CT_ZLIB_PATCH_ORDER="global" -CT_ZLIB_V_1_2_11=y -# CT_ZLIB_NO_VERSIONS is not set -CT_ZLIB_VERSION="1.2.11" -CT_ZLIB_MIRRORS="http://downloads.sourceforge.net/project/libpng/zlib/${CT_ZLIB_VERSION}" -CT_ZLIB_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_ZLIB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_ZLIB_ARCHIVE_FORMATS=".tar.xz .tar.gz" -CT_ZLIB_SIGNATURE_FORMAT="packed/.asc" -CT_ALL_COMP_LIBS_CHOICES="CLOOG EXPAT GETTEXT GMP ISL LIBELF LIBICONV MPC MPFR NCURSES ZLIB" -CT_LIBICONV_NEEDED=y -CT_GETTEXT_NEEDED=y -CT_GMP_NEEDED=y -CT_MPFR_NEEDED=y -CT_ISL_NEEDED=y -CT_MPC_NEEDED=y -CT_NCURSES_NEEDED=y -CT_ZLIB_NEEDED=y -CT_LIBICONV=y -CT_GETTEXT=y -CT_GMP=y -CT_MPFR=y -CT_ISL=y -CT_MPC=y -CT_NCURSES=y -CT_ZLIB=y - -# -# Companion tools -# -# CT_COMP_TOOLS_FOR_HOST is not set -# CT_COMP_TOOLS_AUTOCONF is not set -CT_COMP_TOOLS_AUTOMAKE=y -CT_COMP_TOOLS_AUTOMAKE_PKG_KSYM="AUTOMAKE" -CT_AUTOMAKE_DIR_NAME="automake" -CT_AUTOMAKE_PKG_NAME="automake" -CT_AUTOMAKE_SRC_RELEASE=y -CT_AUTOMAKE_PATCH_ORDER="global" -# CT_AUTOMAKE_V_1_16 is not set -CT_AUTOMAKE_V_1_15=y -# CT_AUTOMAKE_NO_VERSIONS is not set -CT_AUTOMAKE_VERSION="1.15.1" -CT_AUTOMAKE_MIRRORS="$(CT_Mirrors GNU automake)" -CT_AUTOMAKE_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_AUTOMAKE_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_AUTOMAKE_ARCHIVE_FORMATS=".tar.xz .tar.gz" -CT_AUTOMAKE_SIGNATURE_FORMAT="packed/.sig" -# CT_COMP_TOOLS_BISON is not set -# CT_COMP_TOOLS_DTC is not set -CT_COMP_TOOLS_LIBTOOL=y -CT_COMP_TOOLS_LIBTOOL_PKG_KSYM="LIBTOOL" -CT_LIBTOOL_DIR_NAME="libtool" -CT_LIBTOOL_PKG_NAME="libtool" -CT_LIBTOOL_SRC_RELEASE=y -CT_LIBTOOL_PATCH_ORDER="global" -CT_LIBTOOL_V_2_4=y -# CT_LIBTOOL_NO_VERSIONS is not set -CT_LIBTOOL_VERSION="2.4.6" -CT_LIBTOOL_MIRRORS="$(CT_Mirrors GNU libtool)" -CT_LIBTOOL_ARCHIVE_FILENAME="@{pkg_name}-@{version}" -CT_LIBTOOL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}" -CT_LIBTOOL_ARCHIVE_FORMATS=".tar.xz .tar.gz" -CT_LIBTOOL_SIGNATURE_FORMAT="packed/.sig" -# CT_COMP_TOOLS_M4 is not set -# CT_COMP_TOOLS_MAKE is not set -CT_ALL_COMP_TOOLS_CHOICES="AUTOCONF AUTOMAKE BISON DTC LIBTOOL M4 MAKE" diff --git a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.arm64-linux-gcc b/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.arm64-linux-gcc deleted file mode 100644 index 3b33f7df135..00000000000 --- a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.arm64-linux-gcc +++ /dev/null @@ -1,8 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. - -FROM aztecprotocol/crosstool-ng-arm64:latest -WORKDIR /usr/src/barretenberg/cpp -COPY . . -RUN cmake --toolchain ./cmake/toolchains/aarch64-linux.cmake --preset gcc && cmake --build --preset gcc -RUN cd build && qemu-aarch64 ./test/barretenberg_tests -ENTRYPOINT /bin/bash \ No newline at end of file diff --git a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner b/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner deleted file mode 100644 index 7e9699e8739..00000000000 --- a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-wasm-linux-clang-builder-runner +++ /dev/null @@ -1,8 +0,0 @@ -FROM ubuntu:kinetic -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y bash build-essential git libssl-dev cmake ninja-build curl xz-utils curl - -RUN curl https://wasmtime.dev/install.sh -sSf | bash /dev/stdin --version v3.0.1 -WORKDIR /usr/src/barretenberg/cpp -COPY ./scripts/install-wasi-sdk.sh ./scripts/install-wasi-sdk.sh -RUN ./scripts/install-wasi-sdk.sh -COPY . . \ No newline at end of file diff --git a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-x86_64-linux-clang-builder-runner b/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-x86_64-linux-clang-builder-runner deleted file mode 100644 index 7ac0ea01a07..00000000000 --- a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.circuits-x86_64-linux-clang-builder-runner +++ /dev/null @@ -1,18 +0,0 @@ -FROM alpine:3.17 -RUN apk update \ - && apk upgrade \ - && apk add --no-cache \ - bash \ - build-base \ - clang15 \ - openmp \ - openmp-dev \ - cmake \ - ninja \ - git \ - curl \ - perl - -WORKDIR /usr/src/barretenberg/cpp - -COPY . . \ No newline at end of file diff --git a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng b/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng deleted file mode 100644 index a6346d3fd68..00000000000 --- a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng +++ /dev/null @@ -1,16 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. - -FROM ubuntu:latest - -RUN apt-get update && apt-get install -y autoconf flex texinfo unzip help2man file gawk libtool-bin ncurses-dev bison python-dev - -# Download and install the "crosstool-ng" source. -ENV REV 1.24.0 -RUN wget https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-${REV}.tar.gz \ - && tar -xf "crosstool-ng-${REV}.tar.gz" \ - && cd crosstool-ng-crosstool-ng-${REV} \ - && ./bootstrap \ - && ./configure --prefix=/usr/local \ - && make -j$(nproc) \ - && make install \ - && rm -rf /crosstool-* \ No newline at end of file diff --git a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 b/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 deleted file mode 100644 index 58f0402940d..00000000000 --- a/circuits/cpp/barretenberg/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 +++ /dev/null @@ -1,28 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. - -FROM aztecprotocol/crosstool-ng:1.24.0 - -# Build toolchain. -ENV CT_PREFIX /usr/xcc -WORKDIR /usr/src/toolchain -COPY ./crosstool/arm64-linux.config .config -RUN CT_ALLOW_BUILD_AS_ROOT_SURE=1 ct-ng build && cd / && rm -rf /usr/src/toolchain - -# The cross-compiling emulator. -RUN apt-get update \ -&& apt-get install -y \ - qemu-user \ - qemu-user-static \ -&& apt-get clean --yes - -ENV CROSS_TRIPLE aarch64-unknown-linux-gnu -ENV CROSS_ROOT ${CT_PREFIX}/${CROSS_TRIPLE} -ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \ - AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \ - CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gcc \ - CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \ - CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++ \ - LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld \ - FC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gfortran -ENV QEMU_LD_PREFIX "${CROSS_ROOT}/${CROSS_TRIPLE}/sysroot" -ENV QEMU_SET_ENV "LD_LIBRARY_PATH=${CROSS_ROOT}/lib:${QEMU_LD_PREFIX}" \ No newline at end of file diff --git a/circuits/cpp/dockerfiles/Dockerfile.arm64-linux-gcc b/circuits/cpp/dockerfiles/Dockerfile.arm64-linux-gcc deleted file mode 100644 index 6e468447106..00000000000 --- a/circuits/cpp/dockerfiles/Dockerfile.arm64-linux-gcc +++ /dev/null @@ -1,7 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. -FROM aztecprotocol/crosstool-ng-arm64:latest -WORKDIR /usr/src/circuits/cpp -COPY . . -RUN cmake --toolchain ./cmake/toolchains/aarch64-linux.cmake --preset gcc && cmake --build --preset gcc -RUN cd build && for test in ./bin/*_tests; do qemu-aarch64 $test; done -ENTRYPOINT /bin/bash \ No newline at end of file diff --git a/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng b/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng deleted file mode 100644 index a6346d3fd68..00000000000 --- a/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng +++ /dev/null @@ -1,16 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. - -FROM ubuntu:latest - -RUN apt-get update && apt-get install -y autoconf flex texinfo unzip help2man file gawk libtool-bin ncurses-dev bison python-dev - -# Download and install the "crosstool-ng" source. -ENV REV 1.24.0 -RUN wget https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-${REV}.tar.gz \ - && tar -xf "crosstool-ng-${REV}.tar.gz" \ - && cd crosstool-ng-crosstool-ng-${REV} \ - && ./bootstrap \ - && ./configure --prefix=/usr/local \ - && make -j$(nproc) \ - && make install \ - && rm -rf /crosstool-* \ No newline at end of file diff --git a/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 b/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 deleted file mode 100644 index 58f0402940d..00000000000 --- a/circuits/cpp/dockerfiles/Dockerfile.crosstool-ng-arm64 +++ /dev/null @@ -1,28 +0,0 @@ -# Unused & not maintained. This probably won't work without changes. - -FROM aztecprotocol/crosstool-ng:1.24.0 - -# Build toolchain. -ENV CT_PREFIX /usr/xcc -WORKDIR /usr/src/toolchain -COPY ./crosstool/arm64-linux.config .config -RUN CT_ALLOW_BUILD_AS_ROOT_SURE=1 ct-ng build && cd / && rm -rf /usr/src/toolchain - -# The cross-compiling emulator. -RUN apt-get update \ -&& apt-get install -y \ - qemu-user \ - qemu-user-static \ -&& apt-get clean --yes - -ENV CROSS_TRIPLE aarch64-unknown-linux-gnu -ENV CROSS_ROOT ${CT_PREFIX}/${CROSS_TRIPLE} -ENV AS=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-as \ - AR=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ar \ - CC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gcc \ - CPP=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-cpp \ - CXX=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-g++ \ - LD=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-ld \ - FC=${CROSS_ROOT}/bin/${CROSS_TRIPLE}-gfortran -ENV QEMU_LD_PREFIX "${CROSS_ROOT}/${CROSS_TRIPLE}/sysroot" -ENV QEMU_SET_ENV "LD_LIBRARY_PATH=${CROSS_ROOT}/lib:${QEMU_LD_PREFIX}" \ No newline at end of file From 8bb6c913b9cbe4cfc5321dbb96aabe22996618be Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 16:07:27 +0000 Subject: [PATCH 027/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "cb6d55240" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "cb6d55240" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 6473209fce1..b5b6aa9ebd7 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 803cc1976249da053b593426792815df3a44847c - parent = 82823d8cd6882b191a7b363aa40344f66dfd7af7 + commit = cb6d552407773d55d4a6316c091cf6a733217e82 + parent = 0f988b77ed4c1d0b01916763433344b54765e65a method = merge cmdver = 0.4.6 From ccb38fbab252f1a6ed4fb5b974e0255b2b7556b2 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 17:16:34 +0100 Subject: [PATCH 028/104] chore(build): Enabled components in tags (#2139) This PR adds the component name into the tag for release please to work properly # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .circleci/config.yml | 2 +- .github/workflows/release_please.yml | 1 - build-system/scripts/setup_env | 2 +- release-please-config.json | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e00eadcb9db..c82c96bcf7e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1216,7 +1216,7 @@ jobs: command: spot_run_test_script ./scripts/run_tests canary cli.test.ts canary scripts/docker-compose.yml # Repeatable config for defining the workflow below. -tag_regex: &tag_regex /^v.*/ +tag_regex: &tag_regex /^aztec-packages-v.*/ defaults: &defaults filters: tags: diff --git a/.github/workflows/release_please.yml b/.github/workflows/release_please.yml index 636d4c57b59..240aab5b1f1 100644 --- a/.github/workflows/release_please.yml +++ b/.github/workflows/release_please.yml @@ -5,7 +5,6 @@ on: push: branches: - master - - pw/bb-releases permissions: contents: write diff --git a/build-system/scripts/setup_env b/build-system/scripts/setup_env index 87df5608169..d0366079050 100755 --- a/build-system/scripts/setup_env +++ b/build-system/scripts/setup_env @@ -9,7 +9,7 @@ set -eu COMMIT_HASH=$1 -COMMIT_TAG=$2 +COMMIT_TAG=${2##*aztec-packages-} JOB_NAME=$3 GIT_REPOSITORY_URL=${4:-} BRANCH=${5:-} diff --git a/release-please-config.json b/release-please-config.json index fc4498e454e..ad2f1a56895 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -6,7 +6,7 @@ "group-pull-request-title-pattern": "chore(master): Release ${version}", "pull-request-header": ":robot: I have created a new Aztec Packages release", "versioning": "default", - "include-component-in-tag": false, + "include-component-in-tag": true, "changelog-sections": [ { "type": "feat", "section": "Features", "hidden": false }, { "type": "fix", "section": "Bug Fixes", "hidden": false }, From 88c3e9a15950366c00a2bc30bdff27791b806ca4 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 16:16:56 +0000 Subject: [PATCH 029/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "f0c2d8836" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "f0c2d8836" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index d7a72a63a09..ff5a9da5c29 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = 26e1d4c2303af8cd5bb42e47b9dab20e42f9a940 - parent = 7265c2adc64445ae635779351683e479d345fcaf + commit = f0c2d883631697b0ec87e1fa51375aaa1b7a87b2 + parent = ccb38fbab252f1a6ed4fb5b974e0255b2b7556b2 method = merge cmdver = 0.4.6 From ce90b1f4df26ffce237478fb09759ecc4d976ac1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 17:21:31 +0100 Subject: [PATCH 030/104] chore(master): Release 0.5.2 (#2137) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.1...aztec-packages-v0.5.2) (2023-09-08) ### Bug Fixes * **build:** Config fixes for release please ([#2123](https://github.com/AztecProtocol/aztec-packages/issues/2123)) ([7b4f30d](https://github.com/AztecProtocol/aztec-packages/commit/7b4f30dbdf29a907b7474e5f308849ca068f056e)) * **build:** Don't include component in tag ([#2128](https://github.com/AztecProtocol/aztec-packages/issues/2128)) ([b588e3a](https://github.com/AztecProtocol/aztec-packages/commit/b588e3aad944c7a7f555718794609a9b2559e18a)) * **build:** Updated version file ([#2131](https://github.com/AztecProtocol/aztec-packages/issues/2131)) ([30f9935](https://github.com/AztecProtocol/aztec-packages/commit/30f993502eb6b312fa57f0e995d359ed55b037f5)) * Canary browser test transfer method ([#2126](https://github.com/AztecProtocol/aztec-packages/issues/2126)) ([a23b037](https://github.com/AztecProtocol/aztec-packages/commit/a23b0370ae9395ca51ed8f94a1d71b57d35916a0)) * File reference to canary docker-compose file ([#2124](https://github.com/AztecProtocol/aztec-packages/issues/2124)) ([13d3f16](https://github.com/AztecProtocol/aztec-packages/commit/13d3f161cc2ee6b49e4448ae9e8d33dd7f6ce7d2)) * Retry with -eu was suspect in retrospect ([#2110](https://github.com/AztecProtocol/aztec-packages/issues/2110)) ([7265c2a](https://github.com/AztecProtocol/aztec-packages/commit/7265c2adc64445ae635779351683e479d345fcaf)) ### Miscellaneous * **build:** Enabled components in tags ([#2139](https://github.com/AztecProtocol/aztec-packages/issues/2139)) ([ccb38fb](https://github.com/AztecProtocol/aztec-packages/commit/ccb38fbab252f1a6ed4fb5b974e0255b2b7556b2)) * **build:** Fixed manifest ([#2122](https://github.com/AztecProtocol/aztec-packages/issues/2122)) ([91faa66](https://github.com/AztecProtocol/aztec-packages/commit/91faa668650b98306813e64e9ebe3064bd7a221e)) * **build:** Force a rebuild ([#2136](https://github.com/AztecProtocol/aztec-packages/issues/2136)) ([f26c9a0](https://github.com/AztecProtocol/aztec-packages/commit/f26c9a0df2889c1e1bfbc706199abed67ed3efc4)) * **build:** Reset version back ([#2132](https://github.com/AztecProtocol/aztec-packages/issues/2132)) ([750a757](https://github.com/AztecProtocol/aztec-packages/commit/750a7570c91262e3320bc786fc2944c097427d94)) * **build:** Unify barretenberg releases with aztec-packages ([#2120](https://github.com/AztecProtocol/aztec-packages/issues/2120)) ([82823d8](https://github.com/AztecProtocol/aztec-packages/commit/82823d8cd6882b191a7b363aa40344f66dfd7af7)) * Delete broken bb Dockerfile.arm64-linux-gcc ([#2138](https://github.com/AztecProtocol/aztec-packages/issues/2138)) ([0f988b7](https://github.com/AztecProtocol/aztec-packages/commit/0f988b77ed4c1d0b01916763433344b54765e65a)) * **documentation:** Document noteCommitment vs noteHash ([#2127](https://github.com/AztecProtocol/aztec-packages/issues/2127)) ([73b484f](https://github.com/AztecProtocol/aztec-packages/commit/73b484f474a16b53920fa1dc4f71cbe1ff2bf9ce)), closes [#1679](https://github.com/AztecProtocol/aztec-packages/issues/1679) * **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12))
barretenberg.js: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.1...barretenberg.js-v0.5.2) (2023-09-08) ### Miscellaneous * **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12))
barretenberg: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.1...barretenberg-v0.5.2) (2023-09-08) ### Miscellaneous * **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 24 ++++++++++++++++++++++++ barretenberg/CHANGELOG.md | 7 +++++++ barretenberg/ts/CHANGELOG.md | 7 +++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e6f825752b2..316631dda70 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{ ".": "0.5.1", "barretenberg": "0.5.1", "barretenberg/ts": "0.5.1" } +{".":"0.5.2","barretenberg":"0.5.2","barretenberg/ts":"0.5.2"} diff --git a/CHANGELOG.md b/CHANGELOG.md index 15ae705da5f..b8fda681704 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.1...aztec-packages-v0.5.2) (2023-09-08) + + +### Bug Fixes + +* **build:** Config fixes for release please ([#2123](https://github.com/AztecProtocol/aztec-packages/issues/2123)) ([7b4f30d](https://github.com/AztecProtocol/aztec-packages/commit/7b4f30dbdf29a907b7474e5f308849ca068f056e)) +* **build:** Don't include component in tag ([#2128](https://github.com/AztecProtocol/aztec-packages/issues/2128)) ([b588e3a](https://github.com/AztecProtocol/aztec-packages/commit/b588e3aad944c7a7f555718794609a9b2559e18a)) +* **build:** Updated version file ([#2131](https://github.com/AztecProtocol/aztec-packages/issues/2131)) ([30f9935](https://github.com/AztecProtocol/aztec-packages/commit/30f993502eb6b312fa57f0e995d359ed55b037f5)) +* Canary browser test transfer method ([#2126](https://github.com/AztecProtocol/aztec-packages/issues/2126)) ([a23b037](https://github.com/AztecProtocol/aztec-packages/commit/a23b0370ae9395ca51ed8f94a1d71b57d35916a0)) +* File reference to canary docker-compose file ([#2124](https://github.com/AztecProtocol/aztec-packages/issues/2124)) ([13d3f16](https://github.com/AztecProtocol/aztec-packages/commit/13d3f161cc2ee6b49e4448ae9e8d33dd7f6ce7d2)) +* Retry with -eu was suspect in retrospect ([#2110](https://github.com/AztecProtocol/aztec-packages/issues/2110)) ([7265c2a](https://github.com/AztecProtocol/aztec-packages/commit/7265c2adc64445ae635779351683e479d345fcaf)) + + +### Miscellaneous + +* **build:** Enabled components in tags ([#2139](https://github.com/AztecProtocol/aztec-packages/issues/2139)) ([ccb38fb](https://github.com/AztecProtocol/aztec-packages/commit/ccb38fbab252f1a6ed4fb5b974e0255b2b7556b2)) +* **build:** Fixed manifest ([#2122](https://github.com/AztecProtocol/aztec-packages/issues/2122)) ([91faa66](https://github.com/AztecProtocol/aztec-packages/commit/91faa668650b98306813e64e9ebe3064bd7a221e)) +* **build:** Force a rebuild ([#2136](https://github.com/AztecProtocol/aztec-packages/issues/2136)) ([f26c9a0](https://github.com/AztecProtocol/aztec-packages/commit/f26c9a0df2889c1e1bfbc706199abed67ed3efc4)) +* **build:** Reset version back ([#2132](https://github.com/AztecProtocol/aztec-packages/issues/2132)) ([750a757](https://github.com/AztecProtocol/aztec-packages/commit/750a7570c91262e3320bc786fc2944c097427d94)) +* **build:** Unify barretenberg releases with aztec-packages ([#2120](https://github.com/AztecProtocol/aztec-packages/issues/2120)) ([82823d8](https://github.com/AztecProtocol/aztec-packages/commit/82823d8cd6882b191a7b363aa40344f66dfd7af7)) +* Delete broken bb Dockerfile.arm64-linux-gcc ([#2138](https://github.com/AztecProtocol/aztec-packages/issues/2138)) ([0f988b7](https://github.com/AztecProtocol/aztec-packages/commit/0f988b77ed4c1d0b01916763433344b54765e65a)) +* **documentation:** Document noteCommitment vs noteHash ([#2127](https://github.com/AztecProtocol/aztec-packages/issues/2127)) ([73b484f](https://github.com/AztecProtocol/aztec-packages/commit/73b484f474a16b53920fa1dc4f71cbe1ff2bf9ce)), closes [#1679](https://github.com/AztecProtocol/aztec-packages/issues/1679) +* **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12)) + ## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.1...aztec-packages-v0.6.0) (2023-09-08) diff --git a/barretenberg/CHANGELOG.md b/barretenberg/CHANGELOG.md index ed5349f8ed4..f043d40ff40 100644 --- a/barretenberg/CHANGELOG.md +++ b/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.1...barretenberg-v0.5.2) (2023-09-08) + + +### Miscellaneous + +* **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12)) + ## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.1...barretenberg-v0.6.0) (2023-09-08) diff --git a/barretenberg/ts/CHANGELOG.md b/barretenberg/ts/CHANGELOG.md index 671bded009e..352f3ac1273 100644 --- a/barretenberg/ts/CHANGELOG.md +++ b/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.1...barretenberg.js-v0.5.2) (2023-09-08) + + +### Miscellaneous + +* **master:** Release 0.6.0 ([#2121](https://github.com/AztecProtocol/aztec-packages/issues/2121)) ([9bc8e11](https://github.com/AztecProtocol/aztec-packages/commit/9bc8e11ec4598c54d2c8f37c9f1a38ad90148f12)) + ## [0.6.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.1...barretenberg.js-v0.6.0) (2023-09-08) From 9084b89da80953cb781913ba526f77a9a3b12714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Rodr=C3=ADguez?= Date: Fri, 8 Sep 2023 18:29:01 +0200 Subject: [PATCH 031/104] feat: Example card game (#2135) Resolves https://github.com/AztecProtocol/aztec-packages/issues/1463 --- .circleci/config.yml | 13 + yarn-project/acir-simulator/src/acvm/acvm.ts | 2 +- .../end-to-end/src/e2e_card_game.test.ts | 288 ++++++++++++++++++ .../contracts/card_game_contract/Nargo.toml | 9 + .../contracts/card_game_contract/src/cards.nr | 235 ++++++++++++++ .../contracts/card_game_contract/src/game.nr | 172 +++++++++++ .../contracts/card_game_contract/src/main.nr | 270 ++++++++++++++++ 7 files changed, 988 insertions(+), 1 deletion(-) create mode 100644 yarn-project/end-to-end/src/e2e_card_game.test.ts create mode 100644 yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml create mode 100644 yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr create mode 100644 yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr create mode 100644 yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr diff --git a/.circleci/config.yml b/.circleci/config.yml index c82c96bcf7e..71834a0ccb3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -947,6 +947,17 @@ jobs: command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local e2e_aztec_js_browser.test.ts ./scripts/docker-compose-e2e-sandbox.yml working_directory: yarn-project/end-to-end + e2e-card-game: + machine: + image: ubuntu-2004:202010-01 + steps: + - *checkout + - *setup_env + - run: + name: "Test" + command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local e2e_card_game.test.ts + working_directory: yarn-project/end-to-end + aztec-rpc-sandbox: machine: image: ubuntu-2004:202010-01 @@ -1416,6 +1427,7 @@ workflows: - e2e-p2p: *e2e_test - e2e-canary-test: *e2e_test - e2e-browser-sandbox: *e2e_test + - e2e-card-game: *e2e_test - aztec-rpc-sandbox: *e2e_test - guides-writing-an-account-contract: *e2e_test - guides-dapp-testing: *e2e_test @@ -1447,6 +1459,7 @@ workflows: - e2e-p2p - e2e-browser-sandbox - e2e-canary-test + - e2e-card-game - aztec-rpc-sandbox - guides-writing-an-account-contract - guides-dapp-testing diff --git a/yarn-project/acir-simulator/src/acvm/acvm.ts b/yarn-project/acir-simulator/src/acvm/acvm.ts index 505d0e039d4..82c0e53e22b 100644 --- a/yarn-project/acir-simulator/src/acvm/acvm.ts +++ b/yarn-project/acir-simulator/src/acvm/acvm.ts @@ -91,7 +91,7 @@ function getSourceCodeLocationsFromOpcodeLocation( const { path, source } = files[fileId]; - const locationText = source.substring(span.start, span.end + 1); + const locationText = source.substring(span.start, span.end); const precedingText = source.substring(0, span.start); const previousLines = precedingText.split('\n'); // Lines and columns in stacks are one indexed. diff --git a/yarn-project/end-to-end/src/e2e_card_game.test.ts b/yarn-project/end-to-end/src/e2e_card_game.test.ts new file mode 100644 index 00000000000..cc2c2163630 --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_card_game.test.ts @@ -0,0 +1,288 @@ +import { AztecNodeService } from '@aztec/aztec-node'; +import { AztecRPCServer } from '@aztec/aztec-rpc'; +import { AztecAddress, Wallet } from '@aztec/aztec.js'; +import { DebugLogger } from '@aztec/foundation/log'; +import { CardGameContract } from '@aztec/noir-contracts/types'; +import { AztecRPC, CompleteAddress } from '@aztec/types'; + +import { setup } from './fixtures/utils.js'; + +/* eslint-disable camelcase */ + +interface Card { + points: bigint; + strength: bigint; +} + +const cardToField = (card: Card): bigint => { + return card.strength + card.points * 65536n; +}; + +interface PlayerGameEntry { + address: bigint; + deck_strength: bigint; + points: bigint; +} + +interface Game { + players: PlayerGameEntry[]; + rounds_cards: Card[]; + started: boolean; + finished: boolean; + claimed: boolean; + current_player: bigint; + current_round: bigint; +} + +interface NoirOption { + _is_some: boolean; + _value: T; +} + +function unwrapOptions(options: NoirOption[]): T[] { + return options.filter((option: any) => option._is_some).map((option: any) => option._value); +} + +const GAME_ID = 42; + +describe('e2e_card_game', () => { + let aztecNode: AztecNodeService | undefined; + let aztecRpcServer: AztecRPC; + let wallet: Wallet; + let logger: DebugLogger; + let firstPlayer: AztecAddress; + let secondPlayer: AztecAddress; + let thirdPlayer: AztecAddress; + + let contract: CardGameContract; + + beforeEach(async () => { + let accounts: CompleteAddress[]; + ({ aztecNode, aztecRpcServer, accounts, wallet, logger } = await setup(3)); + firstPlayer = accounts[0].address; + secondPlayer = accounts[1].address; + thirdPlayer = accounts[2].address; + await deployContract(); + }, 100_000); + + afterEach(async () => { + await aztecNode?.stop(); + if (aztecRpcServer instanceof AztecRPCServer) { + await aztecRpcServer?.stop(); + } + }); + + const deployContract = async () => { + logger(`Deploying L2 contract...`); + contract = await CardGameContract.deploy(wallet).send().deployed(); + logger(`L2 contract deployed at ${contract.address}`); + }; + + const firstPlayerCollection: Card[] = [ + { + points: 45778n, + strength: 7074n, + }, + { + points: 60338n, + strength: 53787n, + }, + { + points: 13035n, + strength: 45778n, + }, + ]; + + it('should be able to buy packs', async () => { + await contract.methods.buy_pack(27n).send({ origin: firstPlayer }).wait(); + const collection = await contract.methods.view_collection_cards(firstPlayer, 0).view({ from: firstPlayer }); + expect(unwrapOptions(collection)).toEqual(firstPlayerCollection); + }, 30_000); + + describe('game join', () => { + beforeEach(async () => { + await Promise.all([ + contract.methods.buy_pack(27n).send({ origin: firstPlayer }).wait(), + contract.methods.buy_pack(27n).send({ origin: secondPlayer }).wait(), + ]); + }, 30_000); + + it('should be able to join games', async () => { + await contract.methods + .join_game(GAME_ID, [cardToField(firstPlayerCollection[0]), cardToField(firstPlayerCollection[2])]) + .send({ origin: firstPlayer }) + .wait(); + + await expect( + contract.methods + .join_game(GAME_ID, [cardToField(firstPlayerCollection[0]), cardToField(firstPlayerCollection[1])]) + .send({ origin: secondPlayer }) + .wait(), + ).rejects.toThrow(/Card not found/); + + const collection = await contract.methods.view_collection_cards(firstPlayer, 0).view({ from: firstPlayer }); + expect(unwrapOptions(collection)).toEqual([ + { + points: 60338n, + strength: 53787n, + }, + ]); + + expect((await contract.methods.view_game(GAME_ID).view({ from: firstPlayer })) as Game).toMatchObject({ + players: [ + { + address: firstPlayer.toBigInt(), + deck_strength: 52852n, + points: 0n, + }, + { + address: 0n, + deck_strength: 0n, + points: 0n, + }, + ], + started: false, + finished: false, + claimed: false, + current_player: 0n, + }); + }, 30_000); + + it('should start games', async () => { + const secondPlayerCollection = unwrapOptions( + (await contract.methods + .view_collection_cards(secondPlayer, 0) + .view({ from: secondPlayer })) as NoirOption[], + ); + + await Promise.all([ + contract.methods + .join_game(GAME_ID, [cardToField(firstPlayerCollection[0]), cardToField(firstPlayerCollection[2])]) + .send({ origin: firstPlayer }) + .wait(), + contract.methods + .join_game(GAME_ID, [cardToField(secondPlayerCollection[0]), cardToField(secondPlayerCollection[2])]) + .send({ origin: secondPlayer }) + .wait(), + ]); + + await contract.methods.start_game(GAME_ID).send({ origin: firstPlayer }).wait(); + + expect((await contract.methods.view_game(GAME_ID).view({ from: firstPlayer })) as Game).toMatchObject({ + players: expect.arrayContaining([ + { + address: firstPlayer.toBigInt(), + deck_strength: 52852n, + points: 0n, + }, + { + address: secondPlayer.toBigInt(), + deck_strength: expect.anything(), + points: 0n, + }, + ]), + started: true, + finished: false, + claimed: false, + current_player: 0n, + }); + }, 30_000); + }); + + describe('game play', () => { + let secondPlayerCollection: Card[]; + let thirdPlayerCOllection: Card[]; + + beforeEach(async () => { + await Promise.all([ + contract.methods.buy_pack(27n).send({ origin: firstPlayer }).wait(), + contract.methods.buy_pack(27n).send({ origin: secondPlayer }).wait(), + contract.methods.buy_pack(27n).send({ origin: thirdPlayer }).wait(), + ]); + + secondPlayerCollection = unwrapOptions( + await contract.methods.view_collection_cards(secondPlayer, 0).view({ from: secondPlayer }), + ); + + thirdPlayerCOllection = unwrapOptions( + await contract.methods.view_collection_cards(thirdPlayer, 0).view({ from: thirdPlayer }), + ); + }, 60_000); + + async function joinGame(playerAddress: AztecAddress, cards: Card[], id = GAME_ID) { + await contract.methods.join_game(id, cards.map(cardToField)).send({ origin: playerAddress }).wait(); + } + + async function playGame(playerDecks: { address: AztecAddress; deck: Card[] }[], id = GAME_ID) { + const initialGameState = (await contract.methods.view_game(id).view({ from: firstPlayer })) as Game; + const players = initialGameState.players.map(player => player.address); + const cards = players.map( + player => playerDecks.find(playerDeckEntry => playerDeckEntry.address.toBigInt() === player)!.deck, + ); + + for (let roundIndex = 0; roundIndex < cards.length; roundIndex++) { + for (let playerIndex = 0; playerIndex < players.length; playerIndex++) { + const player = players[playerIndex]; + const card = cards[playerIndex][roundIndex]; + await contract.methods + .play_card(id, card) + .send({ origin: AztecAddress.fromBigInt(player) }) + .wait(); + } + } + + const finalGameState = (await contract.methods.view_game(id).view({ from: firstPlayer })) as Game; + + expect(finalGameState.finished).toBe(true); + return finalGameState; + } + + it('should play a game, claim the winned cards and play another match with winned cards', async () => { + const firstPlayerGameDeck = [firstPlayerCollection[0], firstPlayerCollection[2]]; + const secondPlayerGameDeck = [secondPlayerCollection[0], secondPlayerCollection[2]]; + await Promise.all([joinGame(firstPlayer, firstPlayerGameDeck), joinGame(secondPlayer, secondPlayerGameDeck)]); + await contract.methods.start_game(GAME_ID).send({ origin: firstPlayer }).wait(); + + let game = await playGame([ + { address: firstPlayer, deck: firstPlayerGameDeck }, + { address: secondPlayer, deck: secondPlayerGameDeck }, + ]); + + const sotedByPoints = game.players.sort((a, b) => Number(b.points - a.points)); + const winner = AztecAddress.fromBigInt(sotedByPoints[0].address); + const loser = AztecAddress.fromBigInt(sotedByPoints[1].address); + + await expect( + contract.methods.claim_cards(GAME_ID, game.rounds_cards.map(cardToField)).send({ origin: loser }).wait(), + ).rejects.toThrow(/Not the winner/); + + await contract.methods.claim_cards(GAME_ID, game.rounds_cards.map(cardToField)).send({ origin: winner }).wait(); + + const winnerCollection = unwrapOptions( + (await contract.methods.view_collection_cards(winner, 0).view({ from: winner })) as NoirOption[], + ); + + const winnerGameDeck = [winnerCollection[0], winnerCollection[3]]; + const thirdPlayerGameDeck = [thirdPlayerCOllection[0], thirdPlayerCOllection[2]]; + + await Promise.all([ + joinGame(winner, winnerGameDeck, GAME_ID + 1), + joinGame(thirdPlayer, thirdPlayerGameDeck, GAME_ID + 1), + ]); + + await contract.methods + .start_game(GAME_ID + 1) + .send({ origin: winner }) + .wait(); + game = await playGame( + [ + { address: winner, deck: winnerGameDeck }, + { address: thirdPlayer, deck: thirdPlayerGameDeck }, + ], + GAME_ID + 1, + ); + + expect(game.finished).toBe(true); + }, 180_000); + }); +}); diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml new file mode 100644 index 00000000000..40f9e3fbffa --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "card_game_contract" +authors = [""] +compiler_version = "0.1" +type = "contract" + +[dependencies] +aztec = { path = "../../../../noir-libs/noir-aztec" } +value_note = { path = "../../../../noir-libs/value-note"} diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr new file mode 100644 index 00000000000..e0bb5a538b7 --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -0,0 +1,235 @@ +use dep::aztec::{ + context::{PrivateContext, PublicContext}, + constants_gen::{MAX_NOTES_PER_PAGE, MAX_READ_REQUESTS_PER_CALL}, + log::emit_encrypted_log, + note::{ + note_getter_options::NoteGetterOptions, + note_viewer_options::NoteViewerOptions, + note_getter::view_notes, + }, + oracle::{ + get_public_key::get_public_key, + get_secret_key::get_secret_key, + }, + state_vars::set::Set, + types::point::Point, +}; +use dep::std; +use dep::std::{ + option::Option, +}; +use dep::value_note::{ + value_note::{ValueNote, ValueNoteMethods, VALUE_NOTE_LEN}, +}; + +struct Card { + strength: u16, + points: u16, +} + +impl Card { + fn from_field(field: Field) -> Card { + let value_bytes = field.to_le_bytes(32); + let strength = (value_bytes[0] as u16) + (value_bytes[1] as u16) * 256; + let points = (value_bytes[2] as u16) + (value_bytes[3] as u16) * 256; + Card { + strength, + points, + } + } + + fn to_field(self) -> Field { + self.strength as Field + (self.points as Field)*65536 + } + + fn serialize(self) -> [Field; 2] { + [self.strength as Field, self.points as Field] + } +} + +#[test] +fn test_to_from_field() { + let field = 1234567890; + let card = Card::from_field(field); + assert(card.to_field() == field); +} + + +struct CardNote { + card: Card, + note: ValueNote, +} + +impl CardNote { + fn new( + strength: u16, + points: u16, + owner: Field, + ) -> Self { + let card = Card { + strength, + points, + }; + CardNote::from_card(card, owner) + } + + fn from_card(card: Card, owner: Field) -> CardNote { + CardNote { + card, + note: ValueNote::new(card.to_field(), owner), + } + } + + fn from_note(note: ValueNote) -> CardNote { + CardNote { + card: Card::from_field(note.value), + note, + } + } +} + +struct Deck { + set: Set, +} + +fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], desired_cards: [Card; N]) -> [Option; MAX_READ_REQUESTS_PER_CALL] { + let mut selected = [Option::none(); MAX_READ_REQUESTS_PER_CALL]; + + let mut found = [false; N]; + + for i in 0..notes.len() { + let note = notes[i]; + if note.is_some() { + let card_note = CardNote::from_note( + note.unwrap_unchecked() + ); + for j in 0..N { + if !found[j] & (card_note.card.strength == desired_cards[j].strength) & (card_note.card.points == desired_cards[j].points) { + selected[i] = note; + found[j] = true; + } + } + } + + } + + selected +} + + +impl Deck { + fn new( + private_context: Option<&mut PrivateContext>, + public_context: Option<&mut PublicContext>, + storage_slot: Field, + ) -> Self { + let set = Set { + private_context, + public_context, + storage_slot, + note_interface: ValueNoteMethods, + }; + Deck { + set + } + } + + fn add_cards(&mut self, cards: [Card; N], owner: Field) -> [CardNote]{ + let owner_key = get_public_key(owner); + let context = self.set.private_context.unwrap(); + + let mut inserted_cards = []; + for card in cards { + let mut card_note = CardNote::from_card(card, owner); + self.set.insert(&mut card_note.note); + emit_encrypted_log( + context, + (*context).this_address(), + self.set.storage_slot, + owner_key, + card_note.note.serialise(), + ); + inserted_cards = inserted_cards.push_back(card_note); + } + + inserted_cards + } + + fn get_cards(&mut self, cards: [Card; N], owner: Field) -> [CardNote; N] { + let options = NoteGetterOptions::with_filter(filter_cards, cards); + let maybe_notes = self.set.get_notes(options); + let mut found_cards = [Option::none(); N]; + for i in 0..maybe_notes.len() { + if maybe_notes[i].is_some() { + let card_note = CardNote::from_note( + maybe_notes[i].unwrap_unchecked() + ); + // Ensure the notes are actually owned by the owner (to prevent user from generating a valid proof while + // spending someone else's notes). + assert(card_note.note.owner == owner); + + for j in 0..cards.len() { + if found_cards[j].is_none() & (cards[j].strength == card_note.card.strength) & (cards[j].points == card_note.card.points) { + found_cards[j] = Option::some(card_note); + } + } + } + } + + found_cards.map(|card_note: Option| { + assert(card_note.is_some(), "Card not found"); + card_note.unwrap_unchecked() + }) + } + + fn remove_cards(&mut self, cards: [Card; N], owner: Field) { + let card_notes = self.get_cards(cards, owner); + for card_note in card_notes { + self.set.remove(card_note.note); + } + } + + unconstrained fn view_cards(self, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { + let options = NoteViewerOptions::new().set_offset(offset); + let opt_notes = self.set.view_notes(options); + let mut opt_cards = [Option::none(); MAX_NOTES_PER_PAGE]; + + for i in 0..opt_notes.len() { + opt_cards[i] = opt_notes[i].map(|note: ValueNote| Card::from_field(note.value)); + } + + opt_cards + } + +} + +global PACK_CARDS = 3; // Limited by number of write requests (max 4) + +fn get_pack_cards( + seed: Field, + owner_address: Field +) -> [Card; PACK_CARDS] { + // generate pseudo randomness deterministically from 'seed' and user secret + let secret = get_secret_key(owner_address); + let mix = secret.high + secret.low + seed; + let random_bytes = std::hash::sha256(mix.to_le_bytes(32)); + + let mut cards = [Card::from_field(0); PACK_CARDS]; + // we generate PACK_CARDS cards + assert((PACK_CARDS as u64) < 8, "Cannot generate more than 8 cards"); + for i in 0..PACK_CARDS { + let strength = (random_bytes[i] as u16) + (random_bytes[i + 1] as u16) * 256; + let points = (random_bytes[i + 2] as u16) + (random_bytes[i + 3] as u16) * 256; + cards[i] = Card { + strength, points + }; + } + + cards +} + +fn compute_deck_strength(cards: [Card; N]) -> Field { + cards.fold(0, |acc, card: Card| { + acc + card.strength as Field + }) +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr new file mode 100644 index 00000000000..e68e8799f6e --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/game.nr @@ -0,0 +1,172 @@ +use dep::aztec::types::type_serialisation::TypeSerialisationInterface; +use crate::cards::Card; + +global NUMBER_OF_PLAYERS = 2; +global NUMBER_OF_CARDS_DECK = 2; + +struct PlayerEntry { + address: Field, + deck_strength: u32, + points: u120, +} + +impl PlayerEntry { + fn is_initialised(self) -> bool { + self.address != 0 + } +} + +global PLAYABLE_CARDS = 4; + +struct Game { + players: [PlayerEntry; NUMBER_OF_PLAYERS], + rounds_cards: [Card; PLAYABLE_CARDS], + started: bool, + finished: bool, + claimed: bool, + current_player: u32, + current_round: u32, +} + +global GAME_SERIALISED_LEN: Field = 15; + +fn deserialiseGame(fields: [Field; GAME_SERIALISED_LEN]) -> Game { + let players = [ + PlayerEntry { + address: fields[0], + deck_strength: fields[1] as u32, + points: fields[2] as u120, + }, + PlayerEntry { + address: fields[3], + deck_strength: fields[4] as u32, + points: fields[5] as u120, + }, + ]; + let rounds_cards = [ + Card::from_field(fields[6]), Card::from_field(fields[7]), + Card::from_field(fields[8]), Card::from_field(fields[9]), + ]; + Game { + players, + rounds_cards, + started: fields[10] as bool, + finished: fields[11] as bool, + claimed: fields[12] as bool, + current_player: fields[13] as u32, + current_round: fields[14] as u32, + } +} + +fn serialiseGame(game: Game) -> [Field; GAME_SERIALISED_LEN] { + [ + game.players[0].address, + game.players[0].deck_strength as Field, + game.players[0].points as Field, + game.players[1].address, + game.players[1].deck_strength as Field, + game.players[1].points as Field, + game.rounds_cards[0].to_field(), + game.rounds_cards[1].to_field(), + game.rounds_cards[2].to_field(), + game.rounds_cards[3].to_field(), + game.started as Field, + game.finished as Field, + game.claimed as Field, + game.current_player as Field, + game.current_round as Field, + ] +} + +impl Game { + fn serialize(self: Self) -> [Field; GAME_SERIALISED_LEN] { + serialiseGame(self) + } + + fn add_player(&mut self, player_entry: PlayerEntry) -> bool { + let mut added = false; + + for i in 0..NUMBER_OF_PLAYERS { + let entry = self.players[i]; + if entry.is_initialised() { + assert(entry.address != player_entry.address, "Player already in game"); + } else if !added { + self.players[i] = player_entry; + added = true; + } + } + + added + } + + fn start_game(&mut self) { + assert(!self.started, "Game already started"); + for i in 0..NUMBER_OF_PLAYERS { + let entry = self.players[i]; + assert(entry.is_initialised(), "Game not full"); + } + let sorted_by_deck_strength = self.players.sort_via(|a: PlayerEntry, b: PlayerEntry| a.deck_strength < b.deck_strength); + self.players = sorted_by_deck_strength; + self.started = true; + } + + fn current_player(self) -> PlayerEntry { + assert(self.started, "Game not started"); + assert(!self.finished, "Game finished"); + self.players[self.current_player] + } + + fn winner(self) -> PlayerEntry { + assert(self.finished, "Game not finished"); + let mut winner = self.players[0]; + for i in 1..NUMBER_OF_PLAYERS { + let entry = self.players[i]; + if entry.points > winner.points { + winner = entry; + } + } + winner + } + + fn play_card(&mut self, card: Card) { + assert(self.started, "Game not started"); + assert(!self.finished, "Game finished"); + + let round_offset = self.current_round * NUMBER_OF_PLAYERS; + + self.rounds_cards[round_offset + self.current_player] = card; + self.current_player = (self.current_player + 1) % NUMBER_OF_PLAYERS; + + if self.current_player == 0 { + self._finish_round(); + } + } + + fn _finish_round(&mut self) { + let round_offset = self.current_round * NUMBER_OF_PLAYERS; + self.current_round += 1; + + let mut winner_index = 0; + let mut winner_strength = 0; + let mut round_points = 0; + + for i in 0..NUMBER_OF_PLAYERS { + let card = self.rounds_cards[round_offset + i]; + round_points += (card.points as u120); + if card.strength > winner_strength { + winner_strength = card.strength; + winner_index = i; + } + } + + self.players[winner_index].points += round_points; + if self.current_round == NUMBER_OF_CARDS_DECK { + self.finished = true; + } + } +} + +global GameSerialisationMethods = TypeSerialisationInterface { + deserialise: deserialiseGame, + serialise: serialiseGame, +}; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr new file mode 100644 index 00000000000..a1d8b0ce3ca --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr @@ -0,0 +1,270 @@ +mod cards; +mod game; + +use dep::aztec::{ + context::{PrivateContext, PublicContext}, + state_vars::{ + map::Map, + public_state::PublicState, + }, +}; + +use dep::std::option::Option; + +use cards::{Deck}; +use game::{Game, GameSerialisationMethods, GAME_SERIALISED_LEN}; + +struct Storage { + collections: Map, + game_decks: Map>, + games: Map>, +} + +impl Storage { + fn init( + private_context: Option<&mut PrivateContext>, + public_context: Option<&mut PublicContext>, + ) -> Self { + Storage { + collections: Map::new( + private_context, + public_context, + 1, + |private_context, public_context, slot| { + Deck::new( + private_context, + public_context, + slot, + ) + }, + ), + game_decks: Map::new( + private_context, + public_context, + 2, + |private_context, public_context, slot| { + Map::new( + private_context, + public_context, + slot, + |private_context, public_context, slot|{ + Deck::new( + private_context, + public_context, + slot, + ) + } + ) + }, + ), + games: Map::new( + private_context, + public_context, + 3, + |private_context, public_context, slot| { + PublicState::new( + private_context, + public_context, + slot, + GameSerialisationMethods, + ) + }, + ) + } + } +} + +contract CardGame { + use dep::std::option::Option; + use dep::value_note::{ + balance_utils, + value_note::{ + ValueNoteMethods, + VALUE_NOTE_LEN, + }, + }; + + use dep::aztec::{ + abi, + constants_gen::{MAX_NOTES_PER_PAGE}, + abi::{ + Hasher, PrivateContextInputs, + }, + context::PrivateContext, + note::{ + note_header::NoteHeader, + utils as note_utils, + }, + oracle::compute_selector::compute_selector + }; + + use crate::Storage; + use crate::cards::{ + PACK_CARDS, + Deck, + Card, + get_pack_cards, + compute_deck_strength, + }; + use crate::game::{ + NUMBER_OF_PLAYERS, + NUMBER_OF_CARDS_DECK, + PLAYABLE_CARDS, + PlayerEntry, + Game + }; + + #[aztec(private)] + fn constructor() {} + + #[aztec(private)] + fn buy_pack( + seed: Field, // The randomness used to generate the cards. Passed in for now. + ) { + let storage = Storage::init(Option::some(&mut context), Option::none()); + let buyer = context.msg_sender(); + let mut cards = get_pack_cards(seed, buyer); + + let mut collection = storage.collections.at(buyer); + let _inserted_cards = collection.add_cards(cards, buyer); + } + + #[aztec(private)] + fn join_game( + game: u32, + cards_fields: [Field; 2], + ) { + let cards = cards_fields.map(|card_field| Card::from_field(card_field)); + let storage = Storage::init(Option::some(&mut context), Option::none()); + let player = context.msg_sender(); + + let mut collection = storage.collections.at(player); + collection.remove_cards(cards, player); + let mut game_deck = storage.game_decks.at(game as Field).at(player); + let _added_to_game_deck = game_deck.add_cards(cards, player); + let selector = compute_selector("on_game_joined(u32,Field,u32)"); + let strength = compute_deck_strength(cards); + context.call_public_function(context.this_address(), selector, [game as Field, player, strength]); + } + + #[aztec(public)] + internal fn on_game_joined( + game: u32, + player: Field, + deck_strength: u32, + ) { + let storage = Storage::init(Option::none(), Option::some(&mut context)); + let game_storage = storage.games.at(game as Field); + + let mut game_data = game_storage.read(); + assert(game_data.add_player(PlayerEntry {address: player, deck_strength, points: 0}), "Game full"); + + game_storage.write(game_data); + } + + #[aztec(public)] + fn start_game(game: u32) { + let storage = Storage::init(Option::none(), Option::some(&mut context)); + let game_storage = storage.games.at(game as Field); + + let mut game_data = game_storage.read(); + game_data.start_game(); + game_storage.write(game_data); + } + + #[aztec(private)] + fn play_card( + game: u32, + card: Card, + ) { + let storage = Storage::init(Option::some(&mut context), Option::none()); + let player = context.msg_sender(); + + let mut game_deck = storage.game_decks.at(game as Field).at(player); + game_deck.remove_cards([card], player); + + let selector = compute_selector("on_card_played(u32,Field,Field)"); + context.call_public_function(context.this_address(), selector, [game as Field, player, card.to_field()]); + } + + #[aztec(public)] + internal fn on_card_played(game: u32, player: Field, card_as_field: Field) { + let storage = Storage::init(Option::none(), Option::some(&mut context)); + let game_storage = storage.games.at(game as Field); + + let mut game_data = game_storage.read(); + + let card = Card::from_field(card_as_field); + let current_player = game_data.current_player(); + assert(current_player.address == player, "Not your turn"); + game_data.play_card(card); + + game_storage.write(game_data); + } + + #[aztec(private)] + fn claim_cards( + game: u32, + cards_fields: [Field; PLAYABLE_CARDS], + ) { + let storage = Storage::init(Option::some(&mut context), Option::none()); + let player = context.msg_sender(); + let cards = cards_fields.map(|card_field| Card::from_field(card_field)); + + let mut collection = storage.collections.at(player); + let _inserted_cards = collection.add_cards(cards, player); + + let selector = compute_selector("on_cards_claimed(u32,Field,Field)"); + context.call_public_function( + context.this_address(), + selector, + [game as Field, player, dep::std::hash::pedersen(cards_fields)[0]] + ); + } + + #[aztec(public)] + internal fn on_cards_claimed(game: u32, player: Field, cards_hash: Field) { + let storage = Storage::init(Option::none(), Option::some(&mut context)); + let game_storage = storage.games.at(game as Field); + let mut game_data = game_storage.read(); + + assert(!game_data.claimed, "Already claimed"); + game_data.claimed = true; + + assert_eq( + cards_hash, + dep::std::hash::pedersen(game_data.rounds_cards.map(|card: Card| card.to_field()))[0] + ); + + let winner = game_data.winner(); + assert_eq(player, winner.address, "Not the winner"); + + game_storage.write(game_data); + } + + unconstrained fn view_collection_cards(owner: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { + let storage = Storage::init(Option::none(), Option::none()); + let collection = storage.collections.at(owner); + + collection.view_cards(offset) + } + + unconstrained fn view_game_cards(game: u32, player: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { + let storage = Storage::init(Option::none(), Option::none()); + let game_deck = storage.game_decks.at(game as Field).at(player); + + game_deck.view_cards(offset) + } + + unconstrained fn view_game(game: u32) -> Game { + Storage::init(Option::none(), Option::none()).games.at(game as Field).read() + } + + // Computes note hash and nullifier. + // Note 1: Needs to be defined by every contract producing logs. + // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. + unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, preimage: [Field; VALUE_NOTE_LEN]) -> [Field; 4] { + let note_header = NoteHeader { contract_address, nonce, storage_slot }; + note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) + } +} From e119c4f7af0b0f8007abf43c0cad9c0ac6f4e6ac Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 17:41:13 +0100 Subject: [PATCH 032/104] chore(build): Updated release please config (#2142) This PR contains configuration fixes for release please # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- release-please-config.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/release-please-config.json b/release-please-config.json index ad2f1a56895..fbc063f21a9 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -19,14 +19,15 @@ ".": { "release-type": "simple", "component": "aztec-packages", - "package-name": "aztec-packages" + "package-name": "aztec-packages", + "extra-files": ["VERSION"] }, - "barretenberg/ts": { + "circuits/cpp/barretenberg/ts": { "release-type": "node", "package-name": "barretenberg.js", "component": "barretenberg.js" }, - "barretenberg": { + "circuits/cpp/barretenberg": { "release-type": "simple", "component": "barretenberg", "package-name": "barretenberg", From f76b53c985116ac131a9b11b2a255feb7d0f8f13 Mon Sep 17 00:00:00 2001 From: PhilWindle Date: Fri, 8 Sep 2023 16:45:37 +0000 Subject: [PATCH 033/104] chore: release 0.5.2 Release-As: 0.5.2 From 089833597c0aac1eb8220367eb4b2b1da1bc4998 Mon Sep 17 00:00:00 2001 From: PhilWindle Date: Fri, 8 Sep 2023 16:54:07 +0000 Subject: [PATCH 034/104] More updated config --- .github/workflows/publish-bb.yml | 28 ++++++++++++++-------------- .release-please-manifest.json | 6 +++++- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish-bb.yml b/.github/workflows/publish-bb.yml index 5895d5ab9ca..2df722abf3d 100644 --- a/.github/workflows/publish-bb.yml +++ b/.github/workflows/publish-bb.yml @@ -49,13 +49,13 @@ jobs: - name: Compile Barretenberg run: | - cd barretenberg/cpp + cd circuits/cpp/barretenberg/cpp cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - name: Tar and GZip bb Binary (Ubuntu) - working-directory: barretenberg/cpp/build/bin + working-directory: circuits/cpp/barretenberg/cpp/build/bin run: tar -cvzf barretenberg-x86_64-linux-gnu.tar.gz bb - name: Upload artifacts @@ -63,7 +63,7 @@ jobs: with: name: release-linux path: | - ./barretenberg/cpp/build/bin/barretenberg-x86_64-linux-gnu.tar.gz + ./circuits/cpp/barretenberg/cpp/build/bin/barretenberg-x86_64-linux-gnu.tar.gz build-wasm-ts: name: Build WASM and deploy to TS @@ -100,21 +100,21 @@ jobs: sudo apt -y update && sudo apt -y install yarn - name: Install WASI-SDK run: | - cd barretenberg/cpp + cd circuits/cpp/barretenberg/cpp ./scripts/install-wasi-sdk.sh - name: Compile Typescript run: | - cd barretenberg/ts + cd circuits/cpp/barretenberg/ts yarn install && yarn && yarn build - name: Tar and GZip barretenberg.wasm - working-directory: barretenberg/cpp/build-wasm/bin + working-directory: circuits/cpp/barretenberg/cpp/build-wasm/bin run: tar -cvzf barretenberg.wasm.tar.gz barretenberg.wasm - name: Tar and GZip acvm_backend.wasm - working-directory: barretenberg/cpp/build-wasm/bin + working-directory: circuits/cpp/barretenberg/cpp/build-wasm/bin run: tar -cvzf acvm_backend.wasm.tar.gz acvm_backend.wasm - name: Setup Node.js @@ -126,7 +126,7 @@ jobs: - name: Deploy Typescript to NPM if: github.event.inputs.tag != 'nightly' && github.event.inputs.tag != '' # Do not deploy to npm if it is a nightly build run: | - cd barretenberg/ts + cd circuits/cpp/barretenberg/ts yarn deploy env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} @@ -136,8 +136,8 @@ jobs: with: name: release-wasm path: | - ./barretenberg/cpp/build-wasm/bin/barretenberg.wasm.tar.gz - ./barretenberg/cpp/build-wasm/bin/acvm_backend.wasm.tar.gz + ./circuits/cpp/barretenberg/cpp/build-wasm/bin/barretenberg.wasm.tar.gz + ./circuits/cpp/barretenberg/cpp/build-wasm/bin/acvm_backend.wasm.tar.gz build-mac: name: Build on Mac (${{ matrix.target }}) @@ -163,20 +163,20 @@ jobs: - name: Compile Barretenberg (x86_64) if: matrix.target == 'x86_64-apple-darwin' - working-directory: barretenberg/cpp + working-directory: circuits/cpp/barretenberg/cpp run: | cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - name: Compile Barretenberg (ARM) if: matrix.target == 'aarch64-apple-darwin' - working-directory: barretenberg/cpp + working-directory: circuits/cpp/barretenberg/cpp run: | cmake --toolchain ./cmake/toolchains/aarch64-darwin.cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset default --target bb - name: Package barretenberg artifact - working-directory: barretenberg/cpp/build/bin + working-directory: circuits/cpp/barretenberg/cpp/build/bin run: | mkdir dist cp ./bb ./dist/bb @@ -186,7 +186,7 @@ jobs: uses: actions/upload-artifact@v3 with: name: barretenberg-${{ matrix.target }} - path: ./barretenberg/cpp/build/bin/barretenberg-${{ matrix.target }}.tar.gz + path: ./circuits/cpp/barretenberg/cpp/build/bin/barretenberg-${{ matrix.target }}.tar.gz retention-days: 3 release: diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 316631dda70..156de01182d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1,5 @@ -{".":"0.5.2","barretenberg":"0.5.2","barretenberg/ts":"0.5.2"} +{ + ".": "0.5.2", + "circuits/cpp/barretenberg": "0.5.2", + "circuits/cpp/barretenberg/ts": "0.5.2" +} From 7da96152ccc65594e4d7cf80e1931fe5eadfd684 Mon Sep 17 00:00:00 2001 From: Santiago Palladino Date: Fri, 8 Sep 2023 14:33:23 -0300 Subject: [PATCH 035/104] fix(tests): Increase test timeout (#2144) Try fix intermittent error on `guides-dapp-testing` due to timeout exceeded --- yarn-project/end-to-end/src/guides/dapp_testing.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 485da984ca5..19fdbd27cfc 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -30,7 +30,7 @@ describe('guides/dapp/testing', () => { owner = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); recipient = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); token = await PrivateTokenContract.deploy(owner, 100n, owner.getAddress()).send().deployed(); - }, 30_000); + }, 60_000); // docs:start:stop-in-proc-sandbox afterAll(() => stop()); From a9b09344c80d8628f95f859d4e2d455d61f9e7c6 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 13:44:50 -0400 Subject: [PATCH 036/104] fix: work around intermittent wasm webkit issue (#2140) Works around https://github.com/AztecProtocol/aztec-packages/issues/2104 --- .../cpp/barretenberg/acir_tests/run_acir_tests_browser.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/acir_tests/run_acir_tests_browser.sh b/circuits/cpp/barretenberg/acir_tests/run_acir_tests_browser.sh index dcb399cf973..da81b9e1f69 100755 --- a/circuits/cpp/barretenberg/acir_tests/run_acir_tests_browser.sh +++ b/circuits/cpp/barretenberg/acir_tests/run_acir_tests_browser.sh @@ -9,7 +9,9 @@ cleanup() { trap cleanup SIGINT SIGTERM # Skipping firefox because this headless firefox is so slow. -export BROWSER=${BROWSER:-chrome,webkit} +# Skipping webkit as well due to intermittent errors, see https://github.com/AztecProtocol/aztec-packages/issues/2104 +#export BROWSER=${BROWSER:-chrome,webkit} +export BROWSER=${BROWSER:-chrome} # Can be "mt" or "st". THREAD_MODEL=${THREAD_MODEL:-mt} @@ -19,4 +21,4 @@ echo "Testing thread model: $THREAD_MODEL" (cd browser-test-app && yarn serve:dest:$THREAD_MODEL) > /dev/null 2>&1 & sleep 1 VERBOSE=1 BIN=./headless-test/bb.js.browser ./run_acir_tests.sh $@ -lsof -i ":8080" | awk 'NR>1 {print $2}' | xargs kill -9 \ No newline at end of file +lsof -i ":8080" | awk 'NR>1 {print $2}' | xargs kill -9 From 36d6c42f5d59bbc5c416900af3e4639d306bfe97 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 17:45:15 +0000 Subject: [PATCH 037/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "17ff7391b" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "17ff7391b" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index b5b6aa9ebd7..0b8cea576a4 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = cb6d552407773d55d4a6316c091cf6a733217e82 - parent = 0f988b77ed4c1d0b01916763433344b54765e65a + commit = 17ff7391bc15a24c2ca437ecd56d41f0fd3f227d + parent = a9b09344c80d8628f95f859d4e2d455d61f9e7c6 method = merge cmdver = 0.4.6 From 4ed5f0548cf7e8a9c65f176f469103363a42bc5f Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Fri, 8 Sep 2023 19:00:16 +0100 Subject: [PATCH 038/104] chore(build): Updated version check (#2145) This PR modifies the version check in circle ci to handle the release please managed version file # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- build-system/scripts/setup_env | 1 + 1 file changed, 1 insertion(+) diff --git a/build-system/scripts/setup_env b/build-system/scripts/setup_env index d0366079050..c3941229705 100755 --- a/build-system/scripts/setup_env +++ b/build-system/scripts/setup_env @@ -18,6 +18,7 @@ BASH_ENV=${BASH_ENV:-} BUILD_SYSTEM_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) PROJECT=$(cat PROJECT) VERSION=$(cat VERSION) +VERSION=${VERSION%% x-release-please-version*} echo "COMMIT_HASH=$COMMIT_HASH" echo "COMMIT_TAG=$COMMIT_TAG" From 75d1b0ae4baed9bf7290fac86f6f5829c60331cf Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 18:00:39 +0000 Subject: [PATCH 039/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "575595e15" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "575595e15" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index ff5a9da5c29..c6580010134 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = f0c2d883631697b0ec87e1fa51375aaa1b7a87b2 - parent = ccb38fbab252f1a6ed4fb5b974e0255b2b7556b2 + commit = 575595e15655a88934181bbb0faef4b89da52d9a + parent = 4ed5f0548cf7e8a9c65f176f469103363a42bc5f method = merge cmdver = 0.4.6 From 451aad6ea92ebced9839ca14baae10cee327be35 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 19:12:40 +0100 Subject: [PATCH 040/104] chore(master): Release 0.5.2 (#2141) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.5.2) (2023-09-08) ### Features * Example card game ([#2135](https://github.com/AztecProtocol/aztec-packages/issues/2135)) ([9084b89](https://github.com/AztecProtocol/aztec-packages/commit/9084b89da80953cb781913ba526f77a9a3b12714)) ### Bug Fixes * **tests:** Increase test timeout ([#2144](https://github.com/AztecProtocol/aztec-packages/issues/2144)) ([7da9615](https://github.com/AztecProtocol/aztec-packages/commit/7da96152ccc65594e4d7cf80e1931fe5eadfd684)) ### Miscellaneous * **build:** Updated release please config ([#2142](https://github.com/AztecProtocol/aztec-packages/issues/2142)) ([e119c4f](https://github.com/AztecProtocol/aztec-packages/commit/e119c4f7af0b0f8007abf43c0cad9c0ac6f4e6ac)) * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13))
barretenberg.js: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.5.2) (2023-09-08) ### Miscellaneous * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13))
barretenberg: 0.5.2 ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.5.2) (2023-09-08) ### Miscellaneous * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 20 +++++++++++++++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 12 +++++++++++ circuits/cpp/barretenberg/VERSION | 2 +- .../cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 9 files changed, 45 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8fda681704..4ee78f6f0b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.5.2) (2023-09-08) + + +### Features + +* Example card game ([#2135](https://github.com/AztecProtocol/aztec-packages/issues/2135)) ([9084b89](https://github.com/AztecProtocol/aztec-packages/commit/9084b89da80953cb781913ba526f77a9a3b12714)) + + +### Bug Fixes + +* **tests:** Increase test timeout ([#2144](https://github.com/AztecProtocol/aztec-packages/issues/2144)) ([7da9615](https://github.com/AztecProtocol/aztec-packages/commit/7da96152ccc65594e4d7cf80e1931fe5eadfd684)) +* Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) + + +### Miscellaneous + +* **build:** Updated release please config ([#2142](https://github.com/AztecProtocol/aztec-packages/issues/2142)) ([e119c4f](https://github.com/AztecProtocol/aztec-packages/commit/e119c4f7af0b0f8007abf43c0cad9c0ac6f4e6ac)) +* **build:** Updated version check ([#2145](https://github.com/AztecProtocol/aztec-packages/issues/2145)) ([4ed5f05](https://github.com/AztecProtocol/aztec-packages/commit/4ed5f0548cf7e8a9c65f176f469103363a42bc5f)) +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) + ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.1...aztec-packages-v0.5.2) (2023-09-08) diff --git a/VERSION b/VERSION index f40eabb09c4..578471d3faa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.5.1 x-release-please-version +v0.5.2 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index b56d5adb943..9612f9ca075 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.5.2) (2023-09-08) + + +### Bug Fixes + +* Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) + + +### Miscellaneous + +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) + ## [0.5.1](https://github.com/AztecProtocol/barretenberg/compare/barretenberg-v0.5.0...barretenberg-v0.5.1) (2023-09-05) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index f40eabb09c4..578471d3faa 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.5.1 x-release-please-version +v0.5.2 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index cce62aa43ff..d0bb70e9f6b 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.5.1"; # x-release-please-version + version = "0.5.2"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index 55c3818816a..0ef1bee74f2 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.5.1"; # x-release-please-version + version = "0.5.2"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index e480763ed9a..a26ba15dc67 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.5.1 # x-release-please-version + VERSION 0.5.2 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index 617c57bb09c..ad4254d7ae7 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.5.2) (2023-09-08) + + +### Miscellaneous + +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) + ## [0.5.1](https://github.com/AztecProtocol/barretenberg/compare/barretenberg.js-v0.5.0...barretenberg.js-v0.5.1) (2023-09-05) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index 11df59954c1..a0321ab8338 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.5.1", + "version": "0.5.2", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 8b9e3c8b6f7e7f0f026cce49d8007aff54dc57ec Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 18:13:07 +0000 Subject: [PATCH 041/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "fc6615888" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "fc6615888" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 0b8cea576a4..dda81a2caa3 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 17ff7391bc15a24c2ca437ecd56d41f0fd3f227d - parent = a9b09344c80d8628f95f859d4e2d455d61f9e7c6 + commit = fc6615888516861a01a71c49cdc11459d8ef6af4 + parent = 451aad6ea92ebced9839ca14baae10cee327be35 method = merge cmdver = 0.4.6 From 1bd1a79b0cefcd90306133aab141d992e8ea5fc3 Mon Sep 17 00:00:00 2001 From: PhilWindle Date: Fri, 8 Sep 2023 18:22:22 +0000 Subject: [PATCH 042/104] chore: release 0.6.1 Release-As: 0.6.1 From 9df04312d4d5b4d824725bebd5739e56243c0dce Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 14:33:57 -0400 Subject: [PATCH 043/104] fix: retry with git checkout (#2147) Works around rate limiting on git. We may want to up this count but it is not a bad idea to still have retries. Turns out this hits the network. Not that surprising in retrospect (git checkout can sync to find branches on the remote), but I usually think of it in the fully local DB case so didn't think of adding this before --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 71834a0ccb3..a554f9688ed 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,7 +58,7 @@ checkout: &checkout # Only download metadata when fetching. retry git fetch --depth 1 --filter=blob:none origin $CIRCLE_SHA1 - git checkout FETCH_HEAD + retry git checkout FETCH_HEAD # Called setup_env to setup a bunch of global variables used throughout the rest of the build process. # It takes the required CCI environment variables as inputs, and gives them normalised names for the rest of From 1c3946328f7b8eebae5b7264d70caf1e4788c546 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 20:49:06 +0200 Subject: [PATCH 044/104] chore(master): Release 0.6.1 (#2146) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.1 ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.6.1) (2023-09-08) ### Features * Example card game ([#2135](https://github.com/AztecProtocol/aztec-packages/issues/2135)) ([9084b89](https://github.com/AztecProtocol/aztec-packages/commit/9084b89da80953cb781913ba526f77a9a3b12714)) ### Bug Fixes * **tests:** Increase test timeout ([#2144](https://github.com/AztecProtocol/aztec-packages/issues/2144)) ([7da9615](https://github.com/AztecProtocol/aztec-packages/commit/7da96152ccc65594e4d7cf80e1931fe5eadfd684)) * Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) ### Miscellaneous * **build:** Updated release please config ([#2142](https://github.com/AztecProtocol/aztec-packages/issues/2142)) ([e119c4f](https://github.com/AztecProtocol/aztec-packages/commit/e119c4f7af0b0f8007abf43c0cad9c0ac6f4e6ac)) * **build:** Updated version check ([#2145](https://github.com/AztecProtocol/aztec-packages/issues/2145)) ([4ed5f05](https://github.com/AztecProtocol/aztec-packages/commit/4ed5f0548cf7e8a9c65f176f469103363a42bc5f)) * **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) * Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3))
barretenberg.js: 0.6.1 ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.6.1) (2023-09-08) ### Miscellaneous * **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) * Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3))
barretenberg: 0.6.1 ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.6.1) (2023-09-08) ### Bug Fixes * Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) ### Miscellaneous * **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) * Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) * Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 ++--- CHANGELOG.md | 23 +++++++++++++++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 14 +++++++++++ circuits/cpp/barretenberg/VERSION | 2 +- .../cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 9 ++++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 55 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 156de01182d..5f3490c0242 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.5.2", - "circuits/cpp/barretenberg": "0.5.2", - "circuits/cpp/barretenberg/ts": "0.5.2" + ".": "0.6.1", + "circuits/cpp/barretenberg": "0.6.1", + "circuits/cpp/barretenberg/ts": "0.6.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee78f6f0b1..2b12a45015f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.6.1) (2023-09-08) + + +### Features + +* Example card game ([#2135](https://github.com/AztecProtocol/aztec-packages/issues/2135)) ([9084b89](https://github.com/AztecProtocol/aztec-packages/commit/9084b89da80953cb781913ba526f77a9a3b12714)) + + +### Bug Fixes + +* Retry with git checkout ([#2147](https://github.com/AztecProtocol/aztec-packages/issues/2147)) ([9df0431](https://github.com/AztecProtocol/aztec-packages/commit/9df04312d4d5b4d824725bebd5739e56243c0dce)) +* **tests:** Increase test timeout ([#2144](https://github.com/AztecProtocol/aztec-packages/issues/2144)) ([7da9615](https://github.com/AztecProtocol/aztec-packages/commit/7da96152ccc65594e4d7cf80e1931fe5eadfd684)) +* Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) + + +### Miscellaneous + +* **build:** Updated release please config ([#2142](https://github.com/AztecProtocol/aztec-packages/issues/2142)) ([e119c4f](https://github.com/AztecProtocol/aztec-packages/commit/e119c4f7af0b0f8007abf43c0cad9c0ac6f4e6ac)) +* **build:** Updated version check ([#2145](https://github.com/AztecProtocol/aztec-packages/issues/2145)) ([4ed5f05](https://github.com/AztecProtocol/aztec-packages/commit/4ed5f0548cf7e8a9c65f176f469103363a42bc5f)) +* **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) +* Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3)) + ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.5.2) (2023-09-08) diff --git a/VERSION b/VERSION index 578471d3faa..04967e6d3f0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.5.2 x-release-please-version +v0.6.1 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index 9612f9ca075..922287d6ec4 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.6.1) (2023-09-08) + + +### Bug Fixes + +* Work around intermittent wasm webkit issue ([#2140](https://github.com/AztecProtocol/aztec-packages/issues/2140)) ([a9b0934](https://github.com/AztecProtocol/aztec-packages/commit/a9b09344c80d8628f95f859d4e2d455d61f9e7c6)) + + +### Miscellaneous + +* **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) +* Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3)) + ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.5.2) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index 578471d3faa..04967e6d3f0 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.5.2 x-release-please-version +v0.6.1 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index d0bb70e9f6b..1843ebfc375 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.5.2"; # x-release-please-version + version = "0.6.1"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index 0ef1bee74f2..c2e7a59c4ee 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.5.2"; # x-release-please-version + version = "0.6.1"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index a26ba15dc67..a29d1240909 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.5.2 # x-release-please-version + VERSION 0.6.1 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index ad4254d7ae7..26e4f3192de 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.6.1) (2023-09-08) + + +### Miscellaneous + +* **master:** Release 0.5.2 ([#2141](https://github.com/AztecProtocol/aztec-packages/issues/2141)) ([451aad6](https://github.com/AztecProtocol/aztec-packages/commit/451aad6ea92ebced9839ca14baae10cee327be35)) +* Release 0.5.2 ([f76b53c](https://github.com/AztecProtocol/aztec-packages/commit/f76b53c985116ac131a9b11b2a255feb7d0f8f13)) +* Release 0.6.1 ([1bd1a79](https://github.com/AztecProtocol/aztec-packages/commit/1bd1a79b0cefcd90306133aab141d992e8ea5fc3)) + ## [0.5.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.5.2) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index a0321ab8338..5a6732f9942 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.5.2", + "version": "0.6.1", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 3686983763c549c31c18d254dc0281e20ffde563 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 18:49:50 +0000 Subject: [PATCH 045/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "041864425" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "041864425" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index dda81a2caa3..4bd4cab0665 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = fc6615888516861a01a71c49cdc11459d8ef6af4 - parent = 451aad6ea92ebced9839ca14baae10cee327be35 + commit = 041864425097d9a30f7069ca4f16392ef0cf7881 + parent = 1c3946328f7b8eebae5b7264d70caf1e4788c546 method = merge cmdver = 0.4.6 From 08ade4706e250945be3764587b6863b824092fdd Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 15:26:39 -0400 Subject: [PATCH 046/104] fix: setup_env commit check (#2149) Based on a seen failure --- build-system/scripts/setup_env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-system/scripts/setup_env b/build-system/scripts/setup_env index c3941229705..ce6691e8b6c 100755 --- a/build-system/scripts/setup_env +++ b/build-system/scripts/setup_env @@ -37,7 +37,7 @@ if [ -n "${COMMIT_TAG:-}" ]; then echo "WITHOUT_VERSION_TAG=$WITHOUT_VERSION_TAG" echo "COMMIT_TAG_VERSION=$COMMIT_TAG_VERSION" # COMMIT_TAG_VERSION=$(echo "$COMMIT_TAG" | grep -oE "v\d+.\d+") - if [ "$COMMIT_TAG_VERSION" != "$VERSION" ]; then + if [ "$COMMIT_TAG" != "$VERSION" ]; then echo "Commit tag $COMMIT_TAG does not match repo version $VERSION." exit 1 fi From d71eb30a8770d29f12063f2cfc83cc5d54caa726 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 19:27:01 +0000 Subject: [PATCH 047/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "ccf301f8d" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "ccf301f8d" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index c6580010134..dff653e6ed1 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = 575595e15655a88934181bbb0faef4b89da52d9a - parent = 4ed5f0548cf7e8a9c65f176f469103363a42bc5f + commit = ccf301f8d027ef6039e588fa7d06f1d2013b70ac + parent = 08ade4706e250945be3764587b6863b824092fdd method = merge cmdver = 0.4.6 From fd307aedef504a79808712793f4b1a3c9ae9c36f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 20:51:58 +0100 Subject: [PATCH 048/104] chore(master): Release 0.6.2 (#2150) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.2 ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.1...aztec-packages-v0.6.2) (2023-09-08) ### Bug Fixes * Setup_env commit check ([#2149](https://github.com/AztecProtocol/aztec-packages/issues/2149)) ([08ade47](https://github.com/AztecProtocol/aztec-packages/commit/08ade4706e250945be3764587b6863b824092fdd))
barretenberg.js: 0.6.2 ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.1...barretenberg.js-v0.6.2) (2023-09-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.2 ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.1...barretenberg-v0.6.2) (2023-09-08) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 7 +++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 5f3490c0242..af4994289bf 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.1", - "circuits/cpp/barretenberg": "0.6.1", - "circuits/cpp/barretenberg/ts": "0.6.1" + ".": "0.6.2", + "circuits/cpp/barretenberg": "0.6.2", + "circuits/cpp/barretenberg/ts": "0.6.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b12a45015f..43bea507301 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.1...aztec-packages-v0.6.2) (2023-09-08) + + +### Bug Fixes + +* Setup_env commit check ([#2149](https://github.com/AztecProtocol/aztec-packages/issues/2149)) ([08ade47](https://github.com/AztecProtocol/aztec-packages/commit/08ade4706e250945be3764587b6863b824092fdd)) + ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.5.2...aztec-packages-v0.6.1) (2023-09-08) diff --git a/VERSION b/VERSION index 04967e6d3f0..938e6ffd44b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.1 x-release-please-version +v0.6.2 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index 922287d6ec4..be6c970e855 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.1...barretenberg-v0.6.2) (2023-09-08) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.5.2...barretenberg-v0.6.1) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index 04967e6d3f0..938e6ffd44b 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.1 x-release-please-version +v0.6.2 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 1843ebfc375..3b468a7d359 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.1"; # x-release-please-version + version = "0.6.2"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index c2e7a59c4ee..8be464f4844 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.1"; # x-release-please-version + version = "0.6.2"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index a29d1240909..b1e6769b3c3 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.1 # x-release-please-version + VERSION 0.6.2 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index 26e4f3192de..85d583c6830 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.1...barretenberg.js-v0.6.2) (2023-09-08) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.5.2...barretenberg.js-v0.6.1) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index 5a6732f9942..29776eb2075 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.1", + "version": "0.6.2", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 66a4883f88103887c9d2ac8d2def41fc5aa23229 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 19:52:23 +0000 Subject: [PATCH 049/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "af09c94bc" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "af09c94bc" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 4bd4cab0665..dbf406cd555 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 041864425097d9a30f7069ca4f16392ef0cf7881 - parent = 1c3946328f7b8eebae5b7264d70caf1e4788c546 + commit = af09c94bc52ce8daa3e652bfbd2e03e6bb54f29c + parent = fd307aedef504a79808712793f4b1a3c9ae9c36f method = merge cmdver = 0.4.6 From d993d47b4df93544c9d0128460eefea286212d77 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 16:21:19 -0400 Subject: [PATCH 050/104] fix: revert bad spot-ification (#2153) --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a554f9688ed..e0b71a9f431 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1202,7 +1202,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary uniswap_trade_on_l1_from_l2.test.ts canary scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary uniswap_trade_on_l1_from_l2.test.ts canary docker-compose.yml run-deployment-canary-browser: docker: @@ -1213,7 +1213,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary aztec_js_browser.test.ts canary scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary aztec_js_browser.test.ts canary docker-compose.yml run-deployment-canary-cli: docker: @@ -1224,7 +1224,7 @@ jobs: - *setup_env - run: name: "Test" - command: spot_run_test_script ./scripts/run_tests canary cli.test.ts canary scripts/docker-compose.yml + command: spot_run_test_script ./scripts/run_tests canary cli.test.ts canary docker-compose.yml # Repeatable config for defining the workflow below. tag_regex: &tag_regex /^aztec-packages-v.*/ From 0ce9f829a4cdbe50aaacdfbc170cacddb7cbcdf4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 16:22:30 -0400 Subject: [PATCH 051/104] chore(master): Release 0.6.3 (#2154) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.3 ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.2...aztec-packages-v0.6.3) (2023-09-08) ### Bug Fixes * Revert bad spot-ification ([#2153](https://github.com/AztecProtocol/aztec-packages/issues/2153)) ([d993d47](https://github.com/AztecProtocol/aztec-packages/commit/d993d47b4df93544c9d0128460eefea286212d77))
barretenberg.js: 0.6.3 ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.2...barretenberg.js-v0.6.3) (2023-09-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.3 ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.2...barretenberg-v0.6.3) (2023-09-08) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 7 +++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index af4994289bf..9c90410d200 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.2", - "circuits/cpp/barretenberg": "0.6.2", - "circuits/cpp/barretenberg/ts": "0.6.2" + ".": "0.6.3", + "circuits/cpp/barretenberg": "0.6.3", + "circuits/cpp/barretenberg/ts": "0.6.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 43bea507301..865be927c1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.2...aztec-packages-v0.6.3) (2023-09-08) + + +### Bug Fixes + +* Revert bad spot-ification ([#2153](https://github.com/AztecProtocol/aztec-packages/issues/2153)) ([d993d47](https://github.com/AztecProtocol/aztec-packages/commit/d993d47b4df93544c9d0128460eefea286212d77)) + ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.1...aztec-packages-v0.6.2) (2023-09-08) diff --git a/VERSION b/VERSION index 938e6ffd44b..f1f1b1e4b80 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.2 x-release-please-version +v0.6.3 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index be6c970e855..422d3f24d12 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.2...barretenberg-v0.6.3) (2023-09-08) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.1...barretenberg-v0.6.2) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index 938e6ffd44b..f1f1b1e4b80 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.2 x-release-please-version +v0.6.3 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 3b468a7d359..15916c108fc 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.2"; # x-release-please-version + version = "0.6.3"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index 8be464f4844..78af5d87188 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.2"; # x-release-please-version + version = "0.6.3"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index b1e6769b3c3..b15ac77d23e 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.2 # x-release-please-version + VERSION 0.6.3 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index 85d583c6830..b8ad4e1a611 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.2...barretenberg.js-v0.6.3) (2023-09-08) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.1...barretenberg.js-v0.6.2) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index 29776eb2075..ac1dd877c07 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.2", + "version": "0.6.3", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From ff0080a085677b34b7913f0627fb5f6a70dc56a7 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 20:23:02 +0000 Subject: [PATCH 052/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "6bc9389a1" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "6bc9389a1" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index dbf406cd555..59fb5c2016b 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = af09c94bc52ce8daa3e652bfbd2e03e6bb54f29c - parent = fd307aedef504a79808712793f4b1a3c9ae9c36f + commit = 6bc9389a1d1285680bb32102dc8b57830a7a19c8 + parent = 0ce9f829a4cdbe50aaacdfbc170cacddb7cbcdf4 method = merge cmdver = 0.4.6 From 7669b43253f8c2633e96f483ec12c75478dcf539 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 16:38:47 -0400 Subject: [PATCH 053/104] fix: commit tags and rebuilds (#2156) --- build-system/scripts/build | 67 +++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/build-system/scripts/build b/build-system/scripts/build index 1a37abad347..a12cb43de59 100755 --- a/build-system/scripts/build +++ b/build-system/scripts/build @@ -63,6 +63,40 @@ retry ensure_repo $REPOSITORY $ECR_REGION refresh_lifecycle CONTENT_HASH=$(calculate_content_hash $REPOSITORY) echo "Content hash: $CONTENT_HASH" +# Extract version from commit tag +# Check if there is a commit tag +if [[ -n "$COMMIT_TAG" ]]; then + + # Check if it's a repo-specific tag + if [[ "$COMMIT_TAG" == *"/"* ]]; then + REPO_NAME="${COMMIT_TAG%%/*}" + COMMIT_TAG_VERSION="${COMMIT_TAG#*/}" + echo "Tag was made for: $REPO_NAME" + echo "Version: $COMMIT_TAG_VERSION" + + # Check if REPO_NAME is equal to REPOSITORY + if [ "$REPO_NAME" != "$REPOSITORY" ]; then + echo "REPO_NAME ($REPO_NAME) does not match REPOSITORY ($REPOSITORY). Ignoring..." + COMMIT_TAG_VERSION="" + fi + else + COMMIT_TAG_VERSION=$COMMIT_TAG + fi + + # TODO #2155 dont seem to be able to install npx + # # We are building a tagged commit. Check it's a valid semver. + # VERSION=$(npx semver $COMMIT_TAG_VERSION) + # if [ -z "$VERSION" ]; then + # COMMIT_TAG_VERSION="" + # else + # COMMIT_TAG_VERSION=$VERSION + # fi + # fix: we need to use a different content hash for a commit tag + CONTENT_HASH="$CONTENT_HASH$COMMIT_TAG_VERSION" +else + COMMIT_TAG_VERSION="" +fi + cd $BUILD_DIR # If we have previously successful commit, we can early out if nothing relevant has changed since. @@ -114,39 +148,6 @@ for PARENT in $PARENTS; do retry docker tag $PARENT_IMAGE_URI $ECR_DEPLOY_URL/$PARENT done - -# Extract version from commit tag -# Check if there is a commit tag -if [[ -n "$COMMIT_TAG" ]]; then - - # Check if it's a repo-specific tag - if [[ "$COMMIT_TAG" == *"/"* ]]; then - REPO_NAME="${COMMIT_TAG%%/*}" - COMMIT_TAG_VERSION="${COMMIT_TAG#*/}" - echo "Tag was made for: $REPO_NAME" - echo "Version: $COMMIT_TAG_VERSION" - - # Check if REPO_NAME is equal to REPOSITORY - if [ "$REPO_NAME" != "$REPOSITORY" ]; then - echo "REPO_NAME ($REPO_NAME) does not match REPOSITORY ($REPOSITORY). Ignoring..." - COMMIT_TAG_VERSION="" - fi - else - COMMIT_TAG_VERSION=$COMMIT_TAG - fi - - # We are building a tagged commit. Check it's a valid semver. - VERSION=$(npx semver $COMMIT_TAG_VERSION) - if [ -z "$VERSION" ]; then - COMMIT_TAG_VERSION="" - else - COMMIT_TAG_VERSION=$VERSION - fi -else - COMMIT_TAG_VERSION="" -fi - - # Pull, build and push each named stage to cache. STAGE_CACHE_FROM="" CACHE_FROM="" From b84b96396b3f78fe2482c287c488750b7829ae5d Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 20:39:08 +0000 Subject: [PATCH 054/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "38fb08057" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "38fb08057" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index dff653e6ed1..d2d9db2aa27 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = ccf301f8d027ef6039e588fa7d06f1d2013b70ac - parent = 08ade4706e250945be3764587b6863b824092fdd + commit = 38fb08057f79f42fef90aeb3a81dfc0d2e9257f9 + parent = 7669b43253f8c2633e96f483ec12c75478dcf539 method = merge cmdver = 0.4.6 From 0e68ae11d6f39f7d8cc5e07e4d5504aa80a3ecbd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 16:40:18 -0400 Subject: [PATCH 055/104] chore(master): Release 0.6.4 (#2157) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.4 ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.3...aztec-packages-v0.6.4) (2023-09-08) ### Bug Fixes * Commit tags and rebuilds ([#2156](https://github.com/AztecProtocol/aztec-packages/issues/2156)) ([7669b43](https://github.com/AztecProtocol/aztec-packages/commit/7669b43253f8c2633e96f483ec12c75478dcf539))
barretenberg.js: 0.6.4 ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.3...barretenberg.js-v0.6.4) (2023-09-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.4 ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.3...barretenberg-v0.6.4) (2023-09-08) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 7 +++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 9c90410d200..f8e472be615 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.3", - "circuits/cpp/barretenberg": "0.6.3", - "circuits/cpp/barretenberg/ts": "0.6.3" + ".": "0.6.4", + "circuits/cpp/barretenberg": "0.6.4", + "circuits/cpp/barretenberg/ts": "0.6.4" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 865be927c1e..96893bcacaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.3...aztec-packages-v0.6.4) (2023-09-08) + + +### Bug Fixes + +* Commit tags and rebuilds ([#2156](https://github.com/AztecProtocol/aztec-packages/issues/2156)) ([7669b43](https://github.com/AztecProtocol/aztec-packages/commit/7669b43253f8c2633e96f483ec12c75478dcf539)) + ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.2...aztec-packages-v0.6.3) (2023-09-08) diff --git a/VERSION b/VERSION index f1f1b1e4b80..f6ed2768075 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.3 x-release-please-version +v0.6.4 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index 422d3f24d12..420e3af9112 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.3...barretenberg-v0.6.4) (2023-09-08) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.2...barretenberg-v0.6.3) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index f1f1b1e4b80..f6ed2768075 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.3 x-release-please-version +v0.6.4 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 15916c108fc..0b75cf12564 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.3"; # x-release-please-version + version = "0.6.4"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index 78af5d87188..dfa450adb91 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.3"; # x-release-please-version + version = "0.6.4"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index b15ac77d23e..ee851c6799f 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.3 # x-release-please-version + VERSION 0.6.4 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index b8ad4e1a611..b965b817a86 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.3...barretenberg.js-v0.6.4) (2023-09-08) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.3](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.2...barretenberg.js-v0.6.3) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index ac1dd877c07..fe81081e58c 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.3", + "version": "0.6.4", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 00b6d354f350e1ece053c5b33ce91140f3a151f9 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 20:40:46 +0000 Subject: [PATCH 056/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "5635d39a8" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "5635d39a8" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 59fb5c2016b..0cb3151d31e 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 6bc9389a1d1285680bb32102dc8b57830a7a19c8 - parent = 0ce9f829a4cdbe50aaacdfbc170cacddb7cbcdf4 + commit = 5635d39a8b861250be8a14b7c2f09eb317b10fe1 + parent = 0e68ae11d6f39f7d8cc5e07e4d5504aa80a3ecbd method = merge cmdver = 0.4.6 From 50396a068f11216947eac0137baa198424da9b81 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 17:19:40 -0400 Subject: [PATCH 057/104] fix: Revert "fix: commit tags and rebuilds" (#2159) Reverts AztecProtocol/aztec-packages#2156 --- build-system/scripts/build | 67 +++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/build-system/scripts/build b/build-system/scripts/build index a12cb43de59..7cd9c5a6cc3 100755 --- a/build-system/scripts/build +++ b/build-system/scripts/build @@ -63,40 +63,6 @@ retry ensure_repo $REPOSITORY $ECR_REGION refresh_lifecycle CONTENT_HASH=$(calculate_content_hash $REPOSITORY) echo "Content hash: $CONTENT_HASH" -# Extract version from commit tag -# Check if there is a commit tag -if [[ -n "$COMMIT_TAG" ]]; then - - # Check if it's a repo-specific tag - if [[ "$COMMIT_TAG" == *"/"* ]]; then - REPO_NAME="${COMMIT_TAG%%/*}" - COMMIT_TAG_VERSION="${COMMIT_TAG#*/}" - echo "Tag was made for: $REPO_NAME" - echo "Version: $COMMIT_TAG_VERSION" - - # Check if REPO_NAME is equal to REPOSITORY - if [ "$REPO_NAME" != "$REPOSITORY" ]; then - echo "REPO_NAME ($REPO_NAME) does not match REPOSITORY ($REPOSITORY). Ignoring..." - COMMIT_TAG_VERSION="" - fi - else - COMMIT_TAG_VERSION=$COMMIT_TAG - fi - - # TODO #2155 dont seem to be able to install npx - # # We are building a tagged commit. Check it's a valid semver. - # VERSION=$(npx semver $COMMIT_TAG_VERSION) - # if [ -z "$VERSION" ]; then - # COMMIT_TAG_VERSION="" - # else - # COMMIT_TAG_VERSION=$VERSION - # fi - # fix: we need to use a different content hash for a commit tag - CONTENT_HASH="$CONTENT_HASH$COMMIT_TAG_VERSION" -else - COMMIT_TAG_VERSION="" -fi - cd $BUILD_DIR # If we have previously successful commit, we can early out if nothing relevant has changed since. @@ -148,6 +114,39 @@ for PARENT in $PARENTS; do retry docker tag $PARENT_IMAGE_URI $ECR_DEPLOY_URL/$PARENT done + +# Extract version from commit tag +# Check if there is a commit tag +if [[ -n "$COMMIT_TAG" ]]; then + + # Check if it's a repo-specific tag + if [[ "$COMMIT_TAG" == *"/"* ]]; then + REPO_NAME="${COMMIT_TAG%%/*}" + COMMIT_TAG_VERSION="${COMMIT_TAG#*/}" + echo "Tag was made for: $REPO_NAME" + echo "Version: $COMMIT_TAG_VERSION" + + # Check if REPO_NAME is equal to REPOSITORY + if [ "$REPO_NAME" != "$REPOSITORY" ]; then + echo "REPO_NAME ($REPO_NAME) does not match REPOSITORY ($REPOSITORY). Ignoring..." + COMMIT_TAG_VERSION="" + fi + else + COMMIT_TAG_VERSION=$COMMIT_TAG + fi + + ## We are building a tagged commit. Check it's a valid semver. + #VERSION=$(npx semver $COMMIT_TAG_VERSION) + #if [ -z "$VERSION" ]; then + # COMMIT_TAG_VERSION="" + #else + # COMMIT_TAG_VERSION=$VERSION + #fi +else + COMMIT_TAG_VERSION="" +fi + + # Pull, build and push each named stage to cache. STAGE_CACHE_FROM="" CACHE_FROM="" From fed932163b10e61990bfe09859c56bc2525c4945 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 21:20:01 +0000 Subject: [PATCH 058/104] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "58bf3a36a" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "58bf3a36a" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index d2d9db2aa27..a79b395fde0 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = 38fb08057f79f42fef90aeb3a81dfc0d2e9257f9 - parent = 7669b43253f8c2633e96f483ec12c75478dcf539 + commit = 58bf3a36a8ace401b934eaab53b05f26b22cc5c3 + parent = 50396a068f11216947eac0137baa198424da9b81 method = merge cmdver = 0.4.6 From eb45fd59d167c665107eea40e09b1d3fba421ef0 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 8 Sep 2023 17:51:57 -0400 Subject: [PATCH 059/104] fix: disable barretenberg-benchmark-aggregator (#2158) Workaround until we figure this out. it's got a few undesirable properties right now - git clone is broken (by me) - relies on build reruns but we content cache - uses circleci assumptions Will rework soon --- .circleci/config.yml | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e0b71a9f431..611cfc34b85 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -227,18 +227,18 @@ jobs: command: cond_spot_run_tests barretenberg-x86_64-linux-clang-assert 3 join_split_example_proofs_join_split_tests --gtest_filter=-*full_proof* - *save_logs - barretenberg-benchmark-aggregator: - docker: - - image: aztecprotocol/alpine-build-image - resource_class: small - steps: - - attach_workspace: - at: /tmp/test-logs - - *checkout - - *setup_env - - run: - name: "Test" - command: ./scripts/ci/store_test_benchmark_logs $AZTEC_GITHUB_TOKEN + # barretenberg-benchmark-aggregator: + # docker: + # - image: aztecprotocol/alpine-build-image + # resource_class: small + # steps: + # - attach_workspace: + # at: /tmp/test-logs + # - *checkout + # - *setup_env + # - run: + # name: "Test" + # command: ./scripts/ci/store_test_benchmark_logs $AZTEC_GITHUB_TOKEN barretenberg-acir-tests-bb: docker: @@ -1292,18 +1292,18 @@ workflows: - barretenberg-stdlib-recursion-turbo-tests: *bb_test - barretenberg-stdlib-recursion-ultra-tests: *bb_test - barretenberg-join-split-tests: *bb_test - - barretenberg-benchmark-aggregator: - requires: - - barretenberg-tests - - barretenberg-stdlib-tests - - barretenberg-stdlib-recursion-turbo-tests - - barretenberg-stdlib-recursion-ultra-tests - - barretenberg-join-split-tests - filters: - branches: - only: - - master - <<: *defaults + # - barretenberg-benchmark-aggregator: + # requires: + # - barretenberg-tests + # - barretenberg-stdlib-tests + # - barretenberg-stdlib-recursion-turbo-tests + # - barretenberg-stdlib-recursion-ultra-tests + # - barretenberg-join-split-tests + # filters: + # branches: + # only: + # - master + # <<: *defaults - bb-js: requires: - barretenberg-wasm-linux-clang From 0853caeaa3d69db4f654b459c9056de2707440e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 17:52:08 -0400 Subject: [PATCH 060/104] chore(master): Release 0.6.5 (#2160) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.5 ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.4...aztec-packages-v0.6.5) (2023-09-08) ### Bug Fixes * Revert "fix: commit tags and rebuilds" ([#2159](https://github.com/AztecProtocol/aztec-packages/issues/2159)) ([50396a0](https://github.com/AztecProtocol/aztec-packages/commit/50396a068f11216947eac0137baa198424da9b81))
barretenberg.js: 0.6.5 ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.4...barretenberg.js-v0.6.5) (2023-09-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.5 ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.4...barretenberg-v0.6.5) (2023-09-08) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 7 +++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f8e472be615..6b992073547 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.4", - "circuits/cpp/barretenberg": "0.6.4", - "circuits/cpp/barretenberg/ts": "0.6.4" + ".": "0.6.5", + "circuits/cpp/barretenberg": "0.6.5", + "circuits/cpp/barretenberg/ts": "0.6.5" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 96893bcacaa..d62e483f6e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.4...aztec-packages-v0.6.5) (2023-09-08) + + +### Bug Fixes + +* Revert "fix: commit tags and rebuilds" ([#2159](https://github.com/AztecProtocol/aztec-packages/issues/2159)) ([50396a0](https://github.com/AztecProtocol/aztec-packages/commit/50396a068f11216947eac0137baa198424da9b81)) + ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.3...aztec-packages-v0.6.4) (2023-09-08) diff --git a/VERSION b/VERSION index f6ed2768075..7c36cc52a83 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.4 x-release-please-version +v0.6.5 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index 420e3af9112..ba8800267d5 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.4...barretenberg-v0.6.5) (2023-09-08) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.3...barretenberg-v0.6.4) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index f6ed2768075..7c36cc52a83 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.4 x-release-please-version +v0.6.5 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 0b75cf12564..827ab34a450 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.4"; # x-release-please-version + version = "0.6.5"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index dfa450adb91..2c4d51b9949 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.4"; # x-release-please-version + version = "0.6.5"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index ee851c6799f..2e1f201cf1a 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.4 # x-release-please-version + VERSION 0.6.5 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index b965b817a86..fddd3b1da06 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.4...barretenberg.js-v0.6.5) (2023-09-08) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.4](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.3...barretenberg.js-v0.6.4) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index fe81081e58c..7ea68ff39ba 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.4", + "version": "0.6.5", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 0f0c66f20e84fe0a0bba15ec324688a59378f1e7 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 8 Sep 2023 21:52:37 +0000 Subject: [PATCH 061/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "a2a882b31" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "a2a882b31" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 0cb3151d31e..6ad0761f1e7 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 5635d39a8b861250be8a14b7c2f09eb317b10fe1 - parent = 0e68ae11d6f39f7d8cc5e07e4d5504aa80a3ecbd + commit = a2a882b31be65284181146c25926616402157faa + parent = 0853caeaa3d69db4f654b459c9056de2707440e0 method = merge cmdver = 0.4.6 From 2288e44a5b817076c9d51db5f99905deeeffc418 Mon Sep 17 00:00:00 2001 From: Santiago Palladino Date: Sat, 9 Sep 2023 08:26:16 -0300 Subject: [PATCH 062/104] feat(noir): Introduce context union to simplify storage declarations (#2143) Fixes #2012 --- .../src/abis/ecdsa_account_contract.json | 2 +- .../src/abis/schnorr_account_contract.json | 2 +- .../contracts/card_game_contract/src/cards.nr | 10 +-- .../contracts/card_game_contract/src/main.nr | 58 ++++++-------- .../src/contracts/child_contract/src/main.nr | 20 ++--- .../docs_example_contract/src/main.nr | 47 +++++------ .../easy_private_token_contract/src/main.nr | 22 +++--- .../ecdsa_account_contract/src/main.nr | 10 +-- .../src/contracts/escrow_contract/src/main.nr | 13 ++-- .../contracts/lending_contract/src/main.nr | 55 ++++++------- .../native_token_contract/src/main.nr | 78 ++++++++----------- .../non_native_token_contract/src/main.nr | 48 +++++------- .../pending_commitments_contract/src/main.nr | 24 +++--- .../pokeable_token_contract/src/main.nr | 24 +++--- .../contracts/price_feed_contract/src/main.nr | 21 ++--- .../src/main.nr | 32 ++++---- .../private_token_contract/src/main.nr | 22 +++--- .../public_token_contract/src/main.nr | 25 ++---- .../schnorr_account_contract/src/main.nr | 10 +-- .../src/easy_private_state.nr | 16 ++-- .../noir-libs/noir-aztec/src/context.nr | 29 +++++++ .../src/state_vars/immutable_singleton.nr | 12 +-- .../noir-aztec/src/state_vars/map.nr | 25 ++---- .../noir-aztec/src/state_vars/public_state.nr | 5 +- .../noir-aztec/src/state_vars/set.nr | 29 ++++--- .../noir-aztec/src/state_vars/singleton.nr | 7 +- .../noir-libs/value-note/src/utils.nr | 2 +- 27 files changed, 288 insertions(+), 360 deletions(-) diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 8b4e12fbee2..edf8ef64388 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -153,7 +153,7 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+1dB5gURdOeyxxHzpkjZ9i5wB15yTknyfGOHCWIigIKqBgwYEIJklFAkoAKijmLOXzmLComFJT0dy/VXl3vcIStXqZ+Zp6nnrdndq77raru3vdmZntaxVlW6VgrsEUIixQWDWW1H6Ptx0I55vSfBc6XWzFhxYWVEFYS/Z36vJSw0sLKCCsLn0eiz8sJKy8sUVgF1F4lYbnQfmVtv4q2X1Xbr6btV9f2a2j7NbX9Wtp+bW2/jrZfV9uvp+37tH1b20/S9pO1/RRtP1Xbr6/tp2n76dp+A22/obbfSNtvrO030fabavvNtH2/tt9c22+h7bfU9ltp+621/Tbaflttv522317b76Dtd9T2O2n7nbX9Ltp+V22/m7bfXdvvoe331PZ7afu9tf0+2n5fbf8ybb+ftt9f2x+g7Q/U9gdp+4O1/SHa/lBtf5i2Pxz25fwQZZ3uL3KT84Ac+3K8yzEux3V16/T4lWNWjlM5NuV4lGNQjjs51uT4kmNKjiM5duR4kWNEjgs5FmT/l31e9nPZt2V/ln24GbQt+6fsk7Ifyr4n+5vsY7Jfyb4k+4/sM7KfyL4h+4PsA10h190hpz0hd70hR30hF/0g5gMgtoMghkMgVsMgJjI+cu5NhHjI+fakdXrOlVgCsCRgKcDSgGUAywKWAywPmAhYAbAiYCXAyoBVAKsCVgOsDlgDsCZgLcDagHUA6wLWA/QB2oBJgMmAKYCpqL4RwkY6xKY+nJMGmA7YALAhYCPAxoBNAJsCNgP0AzYHbAHYErAVYGvANoBtAdsBtgfsANgRsBNgZ8AugF0BuwF2B+wB2BOwF2BvFJsMYZlW9i0C0A+Y7KufkpKRlpRhJ9vDfEkNhqen+lJSh9dPt9Pt1PTUkUnpyckZ6SnpaQ2GN0jzNbBTkjPszNQGyZm+09soVJcvxM0kz9FMeI5hwnMsE57jmPAcz4TnBCY8JzLhOYkJz8lMeE5hwnMqE56XM+E5jQnP6Ux4zmDCcyYTnlcw4TmLkKf+P5n8n1f+b9IX8DLAfoD9AQcADgQcBDgYcAjgUMBhgMMBRwGOBhwDOBZwHOB4wAmAEwEnAU4GnAI4FfBywGmA0wFnAM4EvAJwlpX1P9mVwq6ysm/UObza4tHXZjPheQ0Tntcy4TmHCc+5THjOY8LzOiY8r2fCcz4TnguY8FzIhOcNFr1GKwD1yevpUqtkAF4JeDXgbMBrAK8FnAM4F3Ae4HWA1wPOB1wAuBDwBitLI90o7Cbr9L2fOOvMm58mBra5ulNGGKx7pMG6MwzWnWmu7lSfwbpteEwiMJ4TobxI2M3CbhF2q7DbhC0WdruwO4TdKewuYUuE3S3sHmH3CrtP2P3Clgp7QNiDwpYJWy5shbCVwh4StkrYamFrhK0Vtk7YemEbhG3UuDws7BFhm4RtFrZF2KPCtgrbJmy7sB3Cdgp7TNguYbuF7RH2uLAnhD0pbK+wfcKeEva0sP3CnhH2rLDnhD0v7AVhLwp7SdjLwl4BDq8Cvgb4OuAbVtb2dO7TGG+dvs8rNxVbeUyN+Rh0TH0ejY6pz6PQMfV5JDqmPo9Ax9Tnlta+3PyAvhC3WCt47veFuEmfCyI/LAd/IxziEukQP/V5jEP8cD7U5yov+eDzeAPxSiCuU3KE7vbfFqHt+1E5Afmfx4B/eQ34l+c8/MuL/MtnwL/8BvzLdx7+5Uf+FTDgX0ED/hU4D/8KIv8KGfCPuM7Ad2ZhAzyL0taZJvNQxDr3PBRFeShmwL/ixHXKOkog/spXxT0BfV4c+VaClocdgdpU9ar9EqjdkqTtJgXGGfZfbjnltyTiUoqUy+n8Un93yjpKI/7KV8U9AX0ej3wrTcsjkN9SVvaYqv3SqF3Pf9J2Pf8tz3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z//w+29p5zg9i1FK88PAcwg5PotRyliMTj+Lgf2XW07PYuB+U4aUi7lnMcoi/spXxT0BfY77YllaHoH8lrGyx1Ttl0Xtev6Ttuv5b3n+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+h99/SzvH6VmMMpofBp5DyPFZjDLm2g3KlZP/ZR14mMjVmfwv6/nv+e/5b6BdO7DuEW5Xbjk9i4W5lCPlcvpZLBP5LY/4K18V9wT0Oc5veVoegfyWs7LHVO2XR+16/pO26/lvef57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/67wf8E9Hkk4kJ8nd3O6fp+OQcuUS7iEu0iLjEu4hLrIi5xLuKSy0Vc4l3EJbeLuCS4iEseF3HJ6yIu+VzEJb+LuBRwEZeCLuJSyEVcCruISxEXcSnqIi7FXMSluIu4lHARl5Iu4lLKRVxKu4hLGRdxMfis2HlzibjIXOKt4Ofq4tHnkeiYuh6A39+aCGX8/tYKUMbvb62I/FTHKkE5Dh2rDOVc6FgVVFZYFcq50bFqUM6DjlWHcj50rAaUC6BjNaFcCB2rBeXC6FhtKBdBx+pAuRg6puKG46ziVh4dU3FLRMdU3CqgYypuFdExFbdK6JiKW2V0TMUNx1HFrSo6pvplNXRMxbI6Oqb0fw10TMW3Jjqm9HAtdEzFvDY6pvShiqP0PyIq63N1Lu6LdRzqUWU8plTbfkBfaFtgTOF2/GhftZUbcajtAi5lXcSljIu4lHYRl1Iu4lLSRVxKuIhLcRdxKeYiLkVdxKWIi7gUdhGXQi7iUtBFXAq4iEt+F3HJ5yIueV3EJY+LuCS4iEtuF3GJdxGXXC7iEuciLrEu4hLjIi7RLuIS5SIukQ5cTDyTo65fyE1dYyiDeChONRGPGsQxkXVUd+BRA/FQ7VdHPKrR8kiSdVR14FEN8VDtV0U8qtDySJZ1VHbgUQXxUO1XRjwq0fJIkXVUdOBRCfFQ7ePrnRVoeaTKOhIdeFRAPFT7iYgH8bNj9WUd5Rx4lEc8VPvlEI+6tDyyPcMWuHZoZY1T1VYUOucwTCZSV+Jr3fjaZT0o4+uePijja6Y2lPH11iQo42u1yVBORMdyukZcDx1T3wk+dEx9Z9nomPpOTULH1He+aj8OzlP/m/pV3aFtSbIt9T+m2nK6/4Cvqav/2fG9+aK0/AJ9pIjGRe2rthIQhwLmuKQlnKFttUWitosYiIOlxUFtRRy4RLmIS7SLuMS4iEusi7jEuYhLLhdxiXcRl9wu4pLgIi55XMQlr4u45HMRl/wu4lLARVwKuohLIRdxKewiLhEXmcuZnvVRn+PnK4qiskJ1zxE/c1Nc81MeU/ds8XM46p5yXnRM3fPGz+aoe/L50TF1/aUgOhbp4JvSqpi70oz42Ryl3YqjY0pDlUDHlJYpiY4pTVEKHVMxwu/xVDFS3GWbu3MH+xnp4CeuR5Vx3zHxvk3cjh/tq7bwMy2lXcClsIu4FHIRl4Iu4lLARVzyu4hLPhdxyesiLnlcxCXBRVxyu4hLvIu45HIRlzgXcYl1EZcYF3GJdhGXKBdxiXTgUpKWS+DWhdLWclNatyTi4fRu+eLEPCI0HomoXfz7qmLEuZB1FHXwH/9PpdrHv38j/j8x4D+uPxG1oeIShc5ZDh1Vjp0dubP+jvi3KoFbVuUd4lMOxUc9x15e40/II3CbrIIDj0TEQ7VfAfGoSMsjkCfMIwK1q9qKQudsQHnajvJEfA88Cf+WB3PDmx+VK6EYET8XkCLrqIraUrnCzwWo+7L4+QTi5yQC9+OrO/DAz0mo9vHzGsTPjQTux9d04IGfG1Ht4+dXiJ/pSZN11HbggZ/nUe3j53nq0PJIl3XUdeBRB/FQ7ddFPOrR8kiN13jILacxUw9x8dFyCVRno7YUL9VOghX8TEMsOuan4RHQJj7Nf7WP+Z0r16qMuFZnxLUmI661LzJX/IxQxYvMJQFxqGuOS2qCQ9sG2kmK13yWW05zKOaSbIBL0nlwSUZcUii52KffTZJKWacvySf9qw91qbrlsXSHY2nWucchHf1dAyjj75hGpH6c1tCNUf1+1EY6Ot6Etl0btxsBptpQx6NQ+XBU1rnqPKnjT6I4paD6mkI5Es5p4nBOQ1TG9ai/1csqjyo+CehzXFeDs/CLRX/nB/SFtgXi2Qhx9aP9pojP91FZHBrQckjCMY2GelUfamDOdx/uE6oP63mRx5sZiLlqV/Vh1YY6HoXKudXFNXSe3FS/Upxzo3ip8+R84DQuTfjUCPnkR/vN0PEznYPHi5OPjZCPjR3OyykuCejzxufYDv4b3AdNxA377kf7qi2Z/iNo/DWm5eBzmgPqa/Eycd3O6TukmJYHebyhgXZVTtUz7YqHaisKnVMIxl9eQ3GQdTh9X+Drl/p3jInrhBFa/X7Uhul8NNHy0dQhH+qc0lo+TFwvdZob8PVSxaUZiksiLY/kCK1+P2rDdD78Wj6aOeRDnVNZy0cicRxkHc2t4HwkonyotpqjuFBfE43Q6vejNkzno4WWj+YO+VDn1NHyYeLacEsrOB/42rDi0hLFhfracIRWvx+1YTofrbR8tHTIhzqnvpYPE9fIW1vB+cDXyBWX1igu1NfII7T6/agN0/loo+WjtUM+1DnNtHyYuFfQ1grOB75XoLi0RXGhvlcQodXvR22Yzkc7LR9tHfKhzmmn5cPEPZP2VnA+8D0TxaU9igv1PZMIrX4/asN0Pjpo+WjvkA91TnctHybuHXW0gvOB7x0pLh1RXDrR8mgQodXvR22YzkdnLR8dHfKhzumv5YM6DrKOLlZwPjqhfCguXVBcutLyGBah1e9HbZjORzctH10c8qHOGaHlgzoOso7uVnA+uqJ8KC7dUVx60PIYHqHV70dtmM5HTy0f3R3yoc4Zr+WDOg6yjl5WcD56oHwoLr1QXHrT8hgRodXvR22YzkcfLR+9HPKhzpmu5YM6DrKOvlZwPnqjfCgufVFcLqPlMTJCq9+P2jCdj35aPvo65EOdc42WD+o4yDr6W8H5uAzlQ3Hpj+IygJZHRoRWvx+1YTofA7V89HfIhzpnoZYP6jjIOgZZwfkYgPKhuAxCcRlMyyMzQqvfj9ownY8hWj4GOeRDnbNYywd1HGQdQ63gfAxG+VBchqK4DCPlYQeu8w/V8jEsTPkYruVjqEM+1Dn3afmgjoOsY4QVnI9hKB+KywgUl5G0PAJxGaHlY2SY8pGh5WOEQz7UOQ9p+aCOg6wj0wrOx0iUD8UlE8VlFC2PwP2PTC0fo8KUj9FaPjId8qHOeVjLB3UcZB1jrOB8jEL5UFzGoLiMpeURuP8xRsvH2DDlY5yWjzEO+VDn7NDyQR0HWcd4KzgfY1E+FJfxKC4TaHkE7n+M1/IxIUz5mKjlY7xDPtQ5e7V8UMdB1jHJCs7HBJQPxWUSistkWh6B+x+TtHxMDlM+pmj5mOSQD3XOC1o+qOMg65hqBedjMsqH4jIVxeVyWh6B+x9TtXxcHqZ8TNPyMdUhH+qcN7V8UMdB1jHdCs7H5Sgfist0FJcZtDwC9z+ma/mYEaZ8zNTyMd0hH+qcD7V8UMdB1nGFFZyPGSgfissVKC6zaHkE7n9coeVjVpjycaWWjysc8qHO+VLLB3UcZB1XWcH5mIXyobhcheJyNS2PwP2Pq7R8XB2mfMzW8nGVQz7UOQe1fFDHQdZxjRWcj6tRPhSXa1BcrqXlEbj/cY2Wj2vDlI85Wj6ucciHOudPLR/UcZB1zLWC83EtysccKM9FcZlHyyNw/2Oulo95YcrHdVo+5jrkQ51zXMsHdRxkHddbwfmYh/KhuFyP4jKflkfg/sf1Wj7mhykfC7R8XO+Qj//OicmeD+o4yDoWWsH5mI/yobgsRHG5gZZH4P7HQi0fN4QpHzdq+VjokA91Tj4tH9RxkHXcZAXn4waUD8XlJhSXRbQ8Avc/btLysShM+bhZy8dNDvlQ5xTX8kEdB1nHLVZwPhahfCgut6C43ErLI3D/4xYtH7eGKR+3afm4xSEf6pxELR/UcZB1LLaC83EryofishjFhcvv+RRn/Nu9OxyO3W5l3yK0fT8q34H+7k4oV0WxWULqx+nfgNyN6vejNu5Ax++hbdfG7arfQqk21PEoVE6PyTpXnad+L6fihH+rdy+UI+GcexzOuQuVcT3qb/WyyqOKTwL6HNd151n4xaK/8wP6QtsC8VyCuPrR/r2IT62YLA530nJIwjFVv+dTfehOc777cJ9QfVjPizx+n4GYq3ZVH1ZtqONRqNwFYm+h8+Sm+pXinBvFS50n5wOncWnCpyXIJz/avw8dP9M5eLw4+bgE+Xi3w3k5xSUBfX73ObaD/wb3QRNxw7770b5qS46JRmj83U3Lwec0ByzW4mVK7+jfIbdqeTCld1ROld5RPLDeUef0CYPeUfON3FRfxHpHccHzEu18eFqbYB6WlbPmuBdxIf6eDzxzgcen4qXaweMT/97W5Fyt6lX7Z5p/cuLahBFXPyOuLRhxbcWIaxtGXNsx4tqBEdfOjLh2Y8S1JyOufRhx7ceI60BGXIcw4jqcEdcMRlxHM+I6jhHXiYy4TmHEdRojrjMZcb2SEdfZjLjOYcT1OkZcFzDieiMjrjcz4nobI66m7zmcjWs8Oua7yFzwusbm7ssl+RIc2ub0XIHijp8huN/hGO6DcsvpGv/96O+WQhmvmf4gqR+n70UtQ/X7URv3o+PLadu1cbvqnqxqQx2PQuWj6LkCdZ66b6/ihJ8ZWAFl9VzBcodzHkBlXI/6W72s8qjik4A+x3UtPQu/WPR3fkBfaFsgng8irn60vwLx+Qnd11xKyyEJx1Q9V6D60FJzvvtwn1B9eIWWF3l8pYGYq3ZVH1ZtqONRqJwv1vpvW5lV/K9frQDMjeKlzpPzgdO4NOHTg8gnP9pfiY6f6ZwVVs4+Poh8XOZwXk5xSUCfLzvHdvDf4D5oIm4rEA8/2ldtyTFxDI2/ZbQcfE5zwD1avGS7JtYJ1r9Diml5MPVcgcqpeq5A8cDPFahzisH4M7lOsJpv5Kb6Il4nWHHB85KJdYIf0PJRLkz5WKHl4wGHfKhzymv5MLFOsJp7cT7wOsEroIy/PxJpeSQ7fT8lhikfK7V8LHfIhzqnupaPROI4yDoesoLzkYjyobg8hOJShZZH4HfyD2n5qBKmfKzS8vGQQz7UObaWDxPrBK+2gvOB1wlWXFajuJhYJ3i1lo9qYcrHGi0fqx3yoc5pqOXDxDrBa63gfOB1ghWXtSguJtYJXqvlo0aY8rFOy8dah3yoc1pq+TCxTvB6KzgfeJ1gxWU9ikstWh6B38mv1/JRK0z52KDlY71DPtQ5nbR8mFgneKMVnA+8TrDishHFpQ4tj8Dv5Ddq+agTpnw8rOVjo0M+1Dm9tXyYWCf4ESs4H3idYMXlERQXE+sEP6Llo1OY8rFJy8cjDvlQ5wzW8mFineDNVnA+8DrBistmFBcT6wRv1vLRNUz52KLlY7NDPtQ5o7R8mFgn+FErOB94nWDF5VEUFxPrBD+q5aNHmPKxVcvHow75UOdM1vJhYp3gbVZwPvA6wYrLNhQXE+sEb9Py0TtM+diu5WObQz7UObO0fJhYJ3iHFZwPvE6w4rIDxcXEOsE7tHxcFqZ87NTyscMhH+qceVo+TKwT/JgVnA+8TrDi8hiKi4l1gh/T8jEgTPnYpeXjMYd8qHMWafkwsU7wbis4H3idYMVlN4qLiXWCd2v5GBymfOzR8rHbIR/qnLu0fJhYJ/hxKzgfeJ1gxeVxFJdhpDxOrxP8uJaPYWHKxxNaPh53yIc650EtH9RxkHU8aQXnYxjKh+LyJIqLiXWCn9TyMTJM+dir5eNJh3yoc9Zq+TCxTvA+KzgfeJ1gxWUfiouJdYL3afkYFaZ8PKXlY59DPtQ5W7R8mFgn+GkrOB94nWDF5WkUl7G0PAL3P57W8jE2TPnYr+XjaYd8qHN2a/kwsU7wM1ZwPvA6wYrLMyguE2h5BO5/PKPlY0KY8vGslo9nHPKhztmv5cPEOsHPWcH5wOsEKy7PobiYWCf4OS0fk8OUj+e1fDznkA91zitaPkysE/yCFZwPvE6w4vICiouJdYJf0PJxeZjy8aKWjxcc8qHOeUfLh4l1gl+ygvOB1wlWXF5CcTGxTvBLWj5mhCkfL2v5eMkhH+qcT7R8mFgn+BUrOB94nWDF5RUUl1m0PAL3P17R8jErTPl4VcvHKw75UOd8q+WDOg6yjtes4HzMQvlQXF5DcTGxTvBrWj6uDlM+Xtfy8ZpDPtQ5h7R8mFgn+A0rOB94nWDF5Q0UFxPrBL+h5ePaMOXjTS0fbzjkQ51zRMuHiXWCD1jB+cDrBCsuB1Bc5tHyCNz/OKDlY16Y8vGWlo8DDvlQ51hx2fNBHQdZx9tWcD7moXwoLm+juMyn5RG4//G2lo/5YcrHO1o+3nbIhzonXsuHiXWC37WC84HXCVZc3kVxMbFO8LtaPm4IUz7e0/LxrkM+1DmFtHyYWCf4fSs4H3idYMXlfRSXRbQ8Avc/3tfysShM+fhAy8f7DvlQ55TW8mFineAPreB84HWCFZcPUVxMrJv3oZaPW8OUj4+0fHzokA91TmUtHybWzfvYCs4HXjdPcfkYxYXL7/kUZ/zbvU8cjv3Pyr5FaPt+VP4E/d2nUK6JYvM5qR+nfwPyBarfj9r4BB3/krZdG7cbAabaUMejULlxXNa56jz1ezkVJ/xbva+gHAnnfOlwzmeojOtRf6uXVR5VfBLQ57iuT8/CLxb9nR/QF9oWiOfniKsf7X+F+NSLy+LwKS2HJBxT9Xs+1Yc+Nee7D/cJ1Yf1vMjjXxuIuWpX9WHVhjoehco9IPYWOk9uql8pzrlRvNR5cj5wGpcmfPoc+eRH+1+j42c6B48XJx8/Rz5+4XBeTnFJQJ9/cY7t4L/BfdBE3LDvfrSv2pJjohkaf1/QcvA5zQEfa/EypXdw/X7UxufouAm9o3Kq9I7igfWOOqd/GPSOmm/kpvoi1juKC56XaOfD09oE87CsnDXHV4gL8fd84JkLPD4VL9UOHp/497Ym52pVr9o/0/yTE9cVjLiuZMR1FSOuaxhxXceI6wZGXB9mxHUTI65bGHHdyojrdkZcdzLiuosR1z2MuD7BiOteRlyfYsR1PyOuzzLi+jwjri8y4voyI66vMuL6OiOubzLi+hYjru8w4voeI64fMOL6ESOupu85nI1rPDqWdJG5JCAO5u7LnV4nWG/bgM9J8ZrPcovQ9v2ojLl8a4DLN+fB5VvE5XsDXL47Dy7fIy4/GuDyw3lw+RFx+ckAl4PnweUnxOUXA1x+Pg8uvyAuv5JyOX2/6tB5cPkVcfmNlMvp+1W/o7YUL9VOAvq8AeLxOy2PwHz6m+a/2sf8zpVrE0Zc/Yy4tmDEtRUjrm0YcW3HiGsHRlw7M+LajRHXnoy49mHEtR8jrgMZcR3CiOtwRlwzGHEdzYjrOEZcJzLiOoUR12mMuM5kxPVKRlxnM+I6hxHX6xhxXcCI642MuN7MiOttjLjeeZG5xqNjX15kLvg+0iFjXE7fr9LbNtFOvOaz3HK6zo65/EHK5fR19j9RW4rXHyj26nP8u5A/aXkE+sEfmv9qH/M7V64rGHFdyYjrKkZc1zDiuo4R1w2MuD7MiOsmRly3MOK6lRHX7Yy47mTEdRcjrnsYcX2CEde9jLg+xYjrfkZcn2XE9XlGXF9kxPVlRlxfZcT1dUZc32TE9S1GXN9hxPU9Rlw/YMT1I0ZcP73IXOPRsW8uMpcExOE3Y1xOX2fPKQ7fGWv73OOgONQ2yOVscfjBBXFQHIpfxDgcdEEcFIeyFzEOP7sgDopDZJjjINspSdtOYD1a6rXwDMQjDfcBteV0vxDH7C/imMl2/0b1+1EbuN0jxHHF7UaAqTbU8ShUrh+fFY8jWUWrAKDiLNcCPOxwHi7/of1NAvr8sGGf/0I8/GhftSXXsqyFfD3swLsk4q0+b4h4FyPmHYvaoanz9D1zrOnkltMYwHmhHgOyjr9RW4oX7h/qc/zbtL+J45xT/8D8zpVrE0Zc/Yy4tmDEtRUjrm0YcW3HiGsHRlw7M+LajRHXnoy49mHEtR8jrgMZcR3CiOtwRlwzGHEdzYjrOEZcJzLiOoUR12mMuM5kxPVKRlxnM+I6hxHX6xhxXcCI642MuN7MiOttjLjeeZG5Gmg3cI8Ftyu3nK4vYy5HabkE7rH8g+r3ozZwu//StmvjdtU9FtWGOh6Fyq+h+w7/ZhX/u++gOMt7LEcczsPlv7S/SUCfHzHs81HEw4/2VVvyHsv+M9xPUryLId7qc3w/rBwt7yT6+02n77HgOUBuOY0BnBfqMSDr+Ae1pXjh/qE+x79L/IeWR479A/M7V64rGHFdyYjrKkZc1zDiuo4R1w2MuD7MiOsmRly3MOK6lRHX7Yy47mTEdRcjrnsYcX2CEde9jLg+xYjrfkZcn2XE9XlGXF9kxPVlRlxfZcT1dUZc32TE9S1GXN9hxPU9Rlw/YMT1I0ZcP73IXA20G7jHgtuVW07XlzGXY7RcAvdYjqP6/agN3O4J2nZt3K66x6LaUMejUHl47qx4nMgq/nffQXGWp/3rcB4uH9X+JgF9/q9hn48hHn60r9qS91j6Il//deBdDvFWn+P7YYm0vJMN3G8KjAE8B8gtpzGA83KclosP9z01Bo47tHuStl0bt6vGgGpDHY9C5WmoX5zMKv7XLxRnedoxh/Nw+R/tbxLQ58cM+3wc8fCjfdWWHANjkK/HHHgnIt7qc/wb5Sq0vFMMzL2BMYDHt9xyGgM4L8Rzkw/3PTUGTji0e4q2XRu3q8aAakMdj0LlBahfnMoq/tcvFGd52nGH83BZ/55IQJ8fN+wz/j7yo33VlhwDVyFfjzvwroJ4q8/x79Or0fJONTD3BsYAHt9yy2kM4LwQz00+3PfUGDjp0K4iSNSujdtVY0C1oY5HofK9uZ2DpfqF4ixPO+FwHi7r3xMJ6PMThn3G30d+vA9tyTFwyxl0n+JdDfFWn+O1CWqg+gl41zcw9wbGAB7fKATZ4qPHwcDc5MN9T42BUw7tRhjoD6pdNQZUG+p4FCpvRP0iwqE/K87ytJMO5+Gy/j2RgD4/adhn/H3kR/sRaAwsP4PuU7xrIN7q80hA2bdU3gohX0xqWVWv2sdzi+JgcB5PS3BoW8Zxe+6s8g4o4zlScYu3gnW4PBap1RkH/BNI+dtpss68xHVK/nms7FtOc4xqPxeY3EZlTOsyaVrG5XhYqjqV7sBfTZGoHIX+JtoK5hHjcCzW4VicFbzlQmX0eOJ/eYlAvIqj8/JBOQ86pjirz+Ks4DiRDRpcZ6RWd7KvfkpKRlpShp1sD/MlNRienupLSR1eP91Ot1PTU0cmpScnZ6SnpKc1GN4gzdfATknOsDNTGyRnQuWRhDxfo6vLh32OII7nG4Txi7IcEm+A8+sW8Zc3bG+icrTWx+SmBmSsAZ8srR09jvksw4PKRJLeNFDvAYuuw5ry+wB9jnx6B9Hqtn0hbIt0niHUdjNhfuRyQGGKX6A53wVut1gOPC+wtlsJ45cU3vj5LtTr26wz8LyA2hYTxi85/PHzXYjXt1s58DzP2u4gjF/KxYmf73y9vtM6C8/zqO0uwvilXrz4+c7H6yXWOfA8x9ruJoxf/YsbP9+5en2PdY48z6G2ewnjl3bx4+c7F6/vs86D51lqu58wfunuiJ/vbF4vtc6TZw61PUAYvwbuiZ8vJ68ftC6A5xlqW0YYv4buip/vTF4vty6Qp0NtKwjj18h98fM5eb3SCoGnVttDhPFr7M74+XSvV1kh8kS1rSaMXxP3xs+HvV5jEfCE2tYSxq+pu+PnU16vs4h4itrWE8avmfvjJzd7A2Fd+JpTqPHzM4kf4XUiO5kwfs2ZxI/wOoedShi/FkziR/h/up1GGL+WTOJH+H+m3YAwfq2YxI/w/yS7EWH8WjOJH6HOt5sQxq8Nk/gR6lS7GWH82jKJH6HOspsTxq8dk/gR6gS7JWH82jOJH+H3nN2aMH4dmMSPcJ622xLGryOT+BHOM3Z7wvh1YhI/wnFidySMX+cwxS9Unm8R5oKwz9idw9f/Qnr+6mGL7vmrRwjzOo7J81ebLLrnrzYTxm88k+evtlh0z189Shi/CUyev9pq0T1/tY0wfhOZPH+13aJ7/moHYfwmMXn+aqd1DjzPsbbHCOM3mcnzV7usc+R5DrXtJozfFCbPX+2xzoPnWWp7nDB+U5k8f/WEdZ48c6jtScL4Xc7k+au91gXwPENt+wjjN43J81dPWRfI06G2pwnjN53J81f7rRB4arU9Qxi/GUyev3rWCpEnqu05wvjNZPL81fMWAU+o7QXC+F3B5PmrFy0inqK2lwjjN4vJ9dOXCesaR3j99Eom8SO8TmRPIIzfVUziR3idw55EGL+rmcSP8P90ewph/GYziR/h/5n25YTxu4ZJ/Aj/T7KnE8bvWibxI9T59kzC+M1hEj9CnWrPIozfXCbxI9RZ9lWE8ZvHJH6EOsGeTRi/65jEj/B7zr6WMH7XM4kf4TxtzyWM33wm8SOcZ+zrCOO3gEn8CMeJPZ8wfguZPH/1NmEuCPuMTRk/tbqhWvVQPnMmV5XcCPg24CuAr1pZq07KN7i8a2XfIohz8B5hDpSvkVDfe+DLO8in962sN6iY6lcfEvrE8bm+UOP3kXXpjcsPrezj8iPrzOPyY2H/s7Jv1OPyE8vcuPwEfPkY+STfvvOZlbUaqzo3Es75FFAuMPm5sC8czn0dzvkcUPbLL4V9pcUqkjhWBwjr+tpA3NUKu8UgLsUBSwCWBCwFWBqwDGBZwHKA5QETASsAVkT4jbBvIdZOC8L7iXz8hq4uXyLU852w74X9IOxHYQeF/STsZ2G/CDsk7Fdhvwn7Xdgfwv4Udtg6/ZYg+YacI9bpt6XIt0XI1fLlauFyJeoTEKNTEAy5+naksChh0cJiYEnyCIid5JLLytr/Xtv/Qdv/Uds/qO3/pO3/rO3/ou0f0vZ/1fZ/0/Z/1/b/0Pb/1PYPa/t/aft/a/tHtP2j2v4/2v6/2v4xbf+4tn9C2z+p7Z/S9mUB70do+5HafpS2H63tx0RkX2VabtT/N+AxE+p89R1hXWtcrk8yMuXms78nqkvm4gfC+K11ffwCVds/hl5XEvhsHySM3zo3xy/lP572T6HV5UM+2z8Txm+9W+OXlI2n/cuF1+XTfLYPEcZvgwvjVz8ziKf964XVle7gs/0bYfw2ui1+6Y487d/Pv660M/hs/0EYv4fdFL+0M/K0/zy/upJy8Nk+TBi/R9wSv7Qcedp/nXtdI87is/03Yfw2uSF+aWflaR85t7p85+CzfZQwfpsvdvx858TT/ufsdaWeo8/2v4Tx23Ix45dyzjztYznWlZJ5Hj7bxwnj9+jFil/aefG0T5y5rvTz9Nk+SRi/rRchfg0yz5unfcq5Lt8F+GzLCx9U8dsW7vj5LoinHRHss32BPtuRhPHbHs74jbxgnnZUdp+TQ/DZjiaM344wxS8pMySedkwE3bXENYTPDexk8twF4XU2ex1h/B5jEj/C60T2BsL47WISP8LrHPbDhPHbzSR+hP+n25sI47eHSfwI/8+0txDG73Em8SP8P8neShi/J5jEj1Dn29sJ4/ckk/gR6lR7J2H89jKJH6HOsncRxm8fk/gR6gR7D2H8nmISP8LvOfsJwvg9zSR+hPO0vZcwfvuZxI9wnrGfIozfM0ziRzhObMI+Y5uKH/WzybEXfs0u6PkNp5fGO3H2hbbZsXTX3HyYbxzaiQaMtIL7bqwBnyytHT2O+RyOkTZuIklxEfT15iK8yGzK71wR5DnKcRLwhbZli6kvxC3KyhooThtNO0k+wrqDFlMzx1vcZEJ1xkMic6P+Eg8YaWVNPrGAESi2coI6heqKQBiB6jiF/sbpnIgz1BOPjqm/z4e4EMbEZ2BC9RmdMNUT5jKB+6ysJ85zo4FkoSTgtkP9lo0nnABzR5gZkNQqJYGhSkkwpFLyeCqFNkl5DKiUvC5XKdLvvMxUSt4wqBTqiSuECdakKrloiicfBDj/BSqeFlZwrnTF08I6u+JxqsdTPGfe/lM8+SKygin38zsoHurfsOcm/PbPRzgx5zc0uKknoXwR4ZngQ+VZgKHKK2BI5RX0VB5tkgoaUHmFXK7ypN+FmKm8Qpe2yrMd6LJTeYUhwEU8lcdT5RXWVF4RZiqvMOHEXMTQ4KaehAozUXlFGaq8ooZUXjFP5dEmqZgBlVfc5SpP+l2cmcorfmmrvCQHuuxUXgkIcElP5fFUeSU0lVeSmcorQTgxlzQ0uKknoRJMVF4phiqvlCGVV9pTebRJKm1A5ZVxucqTfpdhpvLKXNoqL9mBLjuVVxYCXM5TeTxVXllN5ZVjpvLKEk7M5QwNbupJqCwTlVeeocorb0jlJXoqjzZJiQZUXgWXqzzpdwVmKq/Cpa3yUhzoslN5FSHAlTyVx1PlVdRUXiVmKq8i4cRcydDgpp6EKjJReZUZqrzKhlReFU/l0SapigGVV9XlKk/6XZWZyqt6aau8VAe67FReNQhwdU/l8VR51TSVV52ZyqtGODFXNzS4qSehakxUXg2GKq+GIZVX01N5tEmqaUDl1XK5ypN+12Km8mpd2iqvvgNddiqvNgS4jqfyeKq82prKq8NM5dUmnJjrGBrc1JNQbSYqry5DlVfXkMqr56k82iTVM6DyfC5XedJvHzOV57u0VV6aA112Ks+GACd5Ko+nyrM1lZfETOXZhBNzkqHBTT0J2UxUXjJDlZdsSOWleCqPNkkpBlReqstVnvQ7lZnKS720VV66A112Kq8+BDjNU3k8VV59TeWlMVN59Qkn5jRDg5t6EqrPROWlM1R56YZUXgNP5dEmqYEBldfQ5SpP+t2QmcpreGmrvAYOdNmpvEYQ4MaeyuOp8hppKq8xM5XXiHBibmxocFNPQo2YqLwmDFVeE0Mqr6mn8miT1NSAymvmcpUn/W7GTOU1u7RV3jAHuuxUnh8C3NxTeTxVnl9Tec2ZqTw/4cTc3NDgpp6E/ExUXguGKq+FIZXX0lN5tElqaUDltXK5ypN+t2Km8lpd2ipvuANddiqvNQS4jafyeKq81prKa8NM5bUmnJjbGBrc1JNQayYqry1DldfWkMpr56k82iS1M6Dy2rtc5Um/2zNTee0vbZU3woEuO5XXAQLc0VN5PFVeB03ldWSm8joQTswdDQ1u6kmoAxOV14mhyutkSOV19lQebZI6G1B5XVyu8qTfXZipvC6Xtsob6UCXncrrCgHu5qk8niqvq6byujFTeV0JJ+ZuhgY39STUlYnK685Q5XU3pPJ6eCqPNkk9DKi8ni5XedLvnsxUXs9LW+VlONBlp/J6QYB7eyqPp8rrpam83sxUXi/Cibm3ocFNPQn1YqLy+jBUeX0Mqby+nsqjTVJfAyrvMperPOn3ZcxU3mWXtsrLdKDLTuX1gwD391QeT5XXT1N5/ZmpvH6EE3N/Q4ObehLqx0TlDWCo8gYYUnkDPZVHm6SBBlTeIJerPOn3IGYqb9AlrfJsSiV20VTeYAjwEE/l8VR5gzWVN4SZyhtMODEPMTS4qSehwUxU3lCGKm+oIZU3zFN5tEkaZkDlDXe5ypN+D2em8oZf2irPdqDLTuWNgACP9FQeT5U3QlN5I5mpvBGEE/NIQ4ObehIawUTlZTBUeRmGVF6mp/Jok5RpQOWNcrnKk36PYqbyRl3aKi/JgS47lTcaAjzGU3k8Vd5oTeWNYabyRhNOzGMMDW7qSWg0E5U3lqHKG2tI5Y3zVB5tksYZUHnjXa7ypN/jmam88Ze2ykt2oMtO5U2AAE/0VB5PlTdBU3kTmam8CYQT80RDg5t6EprAROVNYqjyJhlSeZM9lUebpMkGVN4Ul6s86fcUZipvyqWt8lIc6LJTeVMhwJd7Ko+nypuqqbzLmam8qYQT8+WGBjf1JDSVicqbxlDlTTOk8qZ7Ko82SdMNqLwZLld50u8ZzFTejEtb5aU60GWn8mZCgK/wVB5PlTdTU3lXMFN5Mwkn5isMDW7qSWgmE5U3i6HKm2VI5V3pqTzaJF1pQOVd5XKVJ/2+ipnKu+rSVnn1HeiyU3lXQ4BneyqPp8q7WlN5s5mpvKsJJ+bZhgY39SR0NROVdw1DlXeNIZV3rafyaJN0rQGVN8flKk/6PYeZyptzaau8NAe67FTeXAjwPE/l8VR5czWVN4+ZyptLODHPMzS4qSehuUxU3nUMVd51hlTe9Z7Ko03S9QZU3nyXqzzp93xmKm/+pa3y0h3oslN5CyDACz2Vx1PlLdBU3kJmKm8B4cS80NDgpp6EFjBReTcwVHk3GFJ5N3oqjzZJNxpQeTe5XOVJv29ipvJuurRVXgMHuuxU3iII8M2eyuOp8hZpKu9mZipvEeHEfLOhwU09CS1iovJuYajybjGk8m71VB5tkm41oPJuc7nKk37fxkzl3XZpq7xhDnTZqbzFEODbPZXHU+Ut1lTe7cxU3mLCifl2Q4ObehJazETl3cFQ5d1hSOXd6ak82iTdaUDl3eVylSf9vouZyrvr0lZ5wx3oslN5SyDAd3sqj6fKW6KpvLuZqbwlhBPz3YYGN/UktISJyruHocq7x5DKu9dTebRJuteAyrvP5SpP+n0fM5V336Wt8kY40GWn8u6HAC/1VB5PlXe/pvKWMlN59xNOzEsNDW7qSeh+JirvAYYq7wFDKu9BT+XRJulBAypvmctVnvR7GTOVt+zSVnkjHeiyU3nLIcArPJXHU+Ut11TeCmYqbznhxLzC0OCmnoSWM1F5KxmqvJWGVN5DnsqjTdJDBlTeKperPOn3KmYqb9WlrfIyHOiyU3mrIcBrPJXHU+Wt1lTeGmYqbzXhxLzG0OCmnoRWM1F5axmqvLWGVN46T+XRJmmdAZW33uUqT/q9npnKW39pq7xMB7rsVN4GCPBGT+XxVHkbNJW3kZnK20A4MW80NLipJ6ENxEpE5jcR6osRB3IJjAaMAowEjAC0AE9Zp/Ek4AnA44DHAP8F/AfwKOARwL8B/wI8DPgn4B+AvwP+Bvgr4CHAXwB/BvwJ8CDgj4A/AH4P+B1gIsThYeHfI8I2CdssbIuwR4VtFbZN2HZhO4TtFPaYsF3CdgvbI+xxYU8Ie1LYXmH7hD0l7Glh+4U9I+xZYc8Je17YC8JeFPaSsJeFvQJjEvNZBPs3A94CeCvgbYCLAW8HvAPwTsC7AJcA3g14D+C9gPcB3g+4FPABwAcBlwEuB1wBuBLwIcBVgKsB1wCuBVwHuB5wA+BGPS+w/wjgJsDNgFsAHwXcCrgNcDvgDsCdgI8B7gLcDbgH8HHAJwCfBNwLuA/wKcCnAfcDPgP4LOBzgM8DvgD4IuBLgC8DvgLohzhUgv3KgFUAqwJWA6wOWAOwJmAtwNqAdQDrAtYD9AHagEmAyYApgKmA9QHTANMBGwA2BGwE2BiwCWBTwGbIX4nNAVsAtgRsBdgasA1gW8B2gO0BOwB2BOwE2BmwC2BXwG6A3QF7APYE7AXYG7APYF/AywD7AfYHHAA4EHAQ4GDAIYBDAYcBDreC56nAeADcBLgZcAvgo4BbAbcBbgfcAbgT8DHAXYC7AfcAPg74BOCTgHsB9wE+Bfg04H7AZwCfBXwO8HnAFwBfBHwJ8GXAVwBf1RQS9T8prxLqi3BdqShn0eoDtb3mXamgTdJrEfT1vu7yKxXS79cjyHN0zlcAfKFtpIPLJM9STHgWs+gnK4lzoPyG2HlT2AFhbwl7W9g7wt4V9p6w94V9IOxDYR8J+1jY/4R9IuxTYZ8J+1zYF8K+FPaVsK+FfSPsW2HfCfte2A/CfhR2UNhPwn4W9ouwQ8J+FfabsN+F/SHsT2GHhf0l7G9hR4QdFfaPsH+FHRN2XNgJYSeFnZIOiZk2QliksChh0cJihMUKixOWS1i8sNzCEoTlEZZXWD5h+YUVEFZQWCFhhYUVEVZUWDFhxYWVEFZSWClhpYWVEVZWWDlh5YUlCqsgrKKwSsIqC6sirKqwasKqC6shrKawWsJqC6sjrK6wesJ8wuSloyRhycJShKUKqy8sTVi6sAbCGgprJKyxsCbCmgprJswvrLmwFsJaCmslrLWwNsLaCmsnrL2wDsI6CuskrDP6dsoPKK8K6V9e8VbwFaZ4K/uXm9y4XDmKsU6LI+WHpfmrroLFkrab7pNtxVjZN/1L2e8QT8m1MJRHDBs/vtvUMTOGTctoM33iiGljJk3Ew1pVPwcwysE9/Xg0CkUclGPQMfV3cQgjdP5+wFC/U/H3sy+0LZsooubZJTL0ujIyT2/hEr6Ysy/EDfPtinqWJ3xDrFMmSQaUut5ukXSd35Tf3SLJc2RUnHUjHFDhEugHIszEljhvSQbrznaLrjvs9EAHz+cW3SkrOFcRVvZbdKess9+ic6rHu0V35u2/W3QygSesrFt0PSKDG40ibvtABN23f3fCiblHZHgmzlB59mSonnoaUk+9PPVEm6ReBtRTb5erJ+l3b2bqqTdD9fSWp56yqac+sNPXU0881VMfTT31DYN6eotQPfUhnJj7MlFPlzFUT5cZUk/9PPVEm6R+BtRTf5erJ+l3f2bqqT9D9fS2p56yqacBsDPQU0881dMATT0NDIN6eptQPQ0gnJgHMlFPgxiqp0GG1NNgTz3RJmmwAfU0xOXqSfo9hJl6GsJQPb3vqads6mko7Azz1BNP9TRUU0/DwqCe3idUT0MJJ+ZhTNTTcIbqabgh9TTCU0+0SRphQD2NdLl6kn6PZKaeRjJUTx946imbesqAnUxPPfFUTxmaesoMg3r6gFA9ZRBOzJlM1NMohupplCH1NNpTT7RJGm1APY1xuXqSfo9hpp7GMFRPH3rqKZt6Ggs74zz1xFM9jdXU07gwqKcPCdXTWMKJeRwT9TSeoXoab0g9TfDUE22SJhhQTxNdrp6k3xOZqaeJDNVTZ0MTLHHewqaeJsHOZE898VRPkzT1NDkM6qkz4bf/JMKJebKhwR2pxY9yZYVQ65oS6e4vdLkK0ZRIegX6ZSxtrqn5ydV8TPj9VWx4+rgvtM0mzI/9leFc+0LbAitYmcj1ty7v428a6uPfMenjhPmxv3N5Hy9mqI//6PI+/pGhPn6QSR8nzI990OV9XOrHKZFZsXQz12GMuGYy4joujFxDnUMkTRNz0y8uH6fvGJqTDzGZkwnzYx9yea7fNZTr38OUaxf9n2tT+izzIS+aqTse8n8B+WoNue6RxL6AAwFzC5sqypdDLvGqnu/A374L+B7gMPjbTMBxgAWFTRPl6Q51tYZz2gC2BWwH2B6wA2AeYTNEeSaqazLUNQ3O+Qj4fAz4P8BPAD8F/Azwc8AvAL8E/Arwa8BvAL8F/A7we8AfAH8EPAj4E+DPgL8AHgL8FfA3wN8B/wD8E/Aw4F+AfwMeATwK+A/gv4DHAI8DngA8CXgK0IL4RQBGAkYBRgPGAMYCxgHmAoxXfQgwQeUOMC9gPsD8gAVUfwEsBFgYsAhgUcBigMUBSwCWBCwFWBqwDGBZwHKA5QETASsAVgSsBFgZsApgVcBqgNUBawDWBKwFWBuwDmBdwHqAPkAbMAkwGTAFMBWwPmAaYDpgA8CGgI0AGwM2AWwK2AzQD9gcsAVgS8BWgDMAOwJ2Uv4Ku0KUZ6Gxqa5lvwF9bCqce4XKsbArRfmqSOc7opZF/x1V3qKdV9V2dWRW2buzHGKd5SGg1PXOjnT3nWXp9+xI8hyF7Y4t5eAyybM0E57FLfrJSuIcKF8j+tq1wuYImytsnrDrhF0vbL6wBcIWCrtB2I3CbhK2SNjNwm4Rdquw24QtFna7sDuE3SnsLmFLhN0t7B5h9wq7T9j9wpYKe0DYg8KWCVsubIWwlcIeErZK2Gpha4StFbZO2HphG4RtFPawsEeEbRK2WdgWYY8K2ypsm7DtwnYI2ynsMWG7hO0WtkfY48KeEPaksL3C9gl7StjTwvYLe0bYs8KeE/a8sBeEvSjsJWEvC3tF2KvCXhP2urA3hL0p7ICwt4S9LewdYe8Ke0/Y+8I+EPahsI+EfSzsf8I+EfapsM+EfS7sC2FfCvtK2NfCvhH2rbDvhH0v7AdhPwo7KOwnYT8L+0XYIWG/CvtN2O/C/hD2p7DDwv4S9rewI8KOCvtH2L/Cjgk7LuxEZFa/9V5j4L3GwHLBawzw97MvtM3oawxORvJ7pPJkJP13idxOoZ7lCd8Q65RJkgElD1SUu4Wv9BtPS0T1GhVnOKa+ELdwCfQ5kWZiS5y3sD1SGQFBj0TB9x6ppKkzLI9UygTiRyplIk0/UjmH8Ns/gnBijowKz8QZ8htLo+jiFy71FBVlRj1Fo4nHU08h1imTFB1FX2+My9WT9DuGmXqKYaie5nrqKZt6ioWgx3nqiad6itXUU1wY1NNcQvUUSzgxxzFRT7kYqqdchtRTvKeeaJMUb0A95Xa5epJ+52amnnIzVE/zPPWUTT0lQNDzeOqJp3pK0NRTnjCop3mE6imBcGLOw0Q95WWonvIaUk/5PPVEm6R8BtRTfperJ+l3fmbqKT9D9bTAU0/Z1FMBCHpBTz3xVE8FNPVUMAzqaQGheipAODEXZKKeCjFUT4UMqafCnnqiTVJhA+qpiMvVk/S7CDP1VIShelroqads6qkoBL2Yp554qqeimnoqFgb1tJBQPRUlnJiLMVFPxRmqp+KG1FMJTz3RJqmEAfVU0uXqSfpdkpl6KslQPd3gqads6qkUBL20p554qqdSmnoqHQb1dAOheipFODGXZqKeyjBUT2UMqaeynnqiTVJZA+qpnMvVk/S7HDP1VI6hejrhqads6qk8BD3RU0881VN5TT0lhkE9nSBUT+UJJ+ZEQ+opUosf5coKodZVIcrdX+hyFaIKUfQK9E+XL38tV/Mx4fdhJkutEubHPmw4177QtsAKViZyfcTlffxaQ338KJM+Tpgf+6jL+3hxQ338mMv7+I2G+vhxJn2cMD/2cZf3cakfKxj6J5yaa0FGXIsx4lo6jFwpXmNgYm465fJxep2hOVmup0fpt9qo52TC/NjUPlPn+npDuY4KU65d9H+uTemzzAd+jYH8XyCwVH0ULEUPmAdQvsagoihXglziVT2vg7+9HnA+YEH422KApQHlawwqi3IVh7r+gr/9G/AI4FHAfwD/BZSvMagq6qmG6poMdVWG9m6Ec28CXAR4M+AtgLcC3ga4GPB2wDsA7wS8C3AJ4N2A9wDeC3gf4P2ASwEfAHwQcBngcsAVgCsBHwJcBbgacA3gWsB1gOsBNwBuBHwY8BHATYCbAbcAPgq4FXAb4HbAHYA7AR8D3AW4G3AP4OOATwA+CbgXcB/gU4BPA+4HfAbwWcDnAJ8HfAHwRcCXAF8GfAXwVcDXAF8HfAPwTcADgG8Bvg34DuC7gO8Bvg/4AeCHgB8Bfgz4P8BPAD8F/Azwc8AvAL8E/Arwa8BvAL8F/A7we8AfAH8EPAj4E+DPgL8AHgL8FfA3wN8B/wD8E/AwYFUYZ8dg/zigfI1BdfFZDTQ2lTS7Bs6pCH9bHVC+xqCmKNfS7iZRf3/UvvDr1j6tLjtcd8BrG7oDXse7A06bpDoG7oDXdfkdcOl3XWZ3wOsyvANO+N5ryjvgtsG6g9rCk1M9CLrPuwPO8w64TOA+K+sOuA8NSj14VG3jQRTqt389wonZx+T5QZuherINqackTz3RJinJgHpKdrl6kn4nM7nEXsEQ13ApqFAm2czs2wgHukYUlIkcEtXlw5NdCiQw9QLVWAsHn3U11sI6uxpzquf/lRpzc4dQSi4lKisxcl92iuZW9o1a2VE+T5dK+KVRn27SyVTxrI/iaaI/+Azct4kxfL8qVDUq/U4x4Hesu/x2fA411YDfcYbu04U6b+hf5JTzBu7jIa9Q7dL4aZtN2L9twj5j52JynziF8LsmzeXPlMuxlhZlZg6jzLWJS7fyFd3UfqczuWrUgAnPhkx4NiLkKV9TGm1lXcGSfUrmS8ZCtoM/wxtR+/aZYuQLbTNyu4SaY01D/Y28wzUmJGq4QxlLVuMo93NsQs2RyzdhUyYzdzNChcZ1IDVjMJD8XGbm5nREk7h2qOYMOlQLLh2qJR3RZK4dqiWDDtWKkmO4bsUn0tWV7VZ8a+9WPG2SWhu4Fd/G5bfipd9tGN/eTrSssGhgX2ibXYYJzxIW/WQlMQ+U24pO0U5Ye2EdhHUU1klYZ2FdhHUV1k1Yd2E9UAfKDyhva+uTXbwVfIs83so+GcqNy61veXUqF/LD0vxVt/FjadsdIduKsbJv+iTud4in5FoSyhkTp0zPmJ7Rbfrw8WNGtJk+ccS0MZMmthw2fjzuDKoR1SmiHJzUj0ejgMRBOQYdU38Xh/CMzw+EOhO3iTLzVUrNsyfBt0+4Vz7saejJxV6eXKJNUi8Dcqm3y+WS9Ls3s9999Gb4u4/2pq4c0PIM28qHfSDofb3fffD83YdMIF75sG9UcKPUT6m0J/z270M4Mfdlct/iMobq6TJD6qmfp55ok9TPgHrq73L1JP3uz0w99Weonjp46imbehoAQR/oqSee6mmApp4GhkE9dSD89h9AODEPZKKeBjFUT4MMqafBnnqiTdJgA+ppiMvVk/R7CDP1NISheuroqads6mkoBH2Yp554qqehmnoaFgb11JHw238o4cQ8jIl6Gs5QPQ03pJ5GeOqJNkkjDKinkS5XT9LvkczU00iG6qmrp56yqacMCHqmp554qqcMTT1lhkE9dSX89s8gnJgzmainUQzV0yhD6mm0p55okzTagHoa43L1JP0ew0w9jWGonrp56imbehoLQR/nqSee6mmspp7GhUE9dSP89h9LODGPY6KexjNUT+MNqacJnnqiTdIEA+pposvVk/R7IjP1NJGheuruqads6mkSBH2yp554qqdJmnqaHAb11J3w238S4cQ82dDgjtTiR/nbwFDrmhLl7i/0RFHHlCh6BZrX5evHyl8xm/A7H5N3ehLmx87n8nd6ljHUxwu6vI+3M9THCzHp44T5sQu5vI+XMNTHi7q8j/cw1MeLMenjhPmxi7m8j2dCri3aeo1wHceI6+QwcqV4B72J8V7S5X2/k6F5rhSTeY4wP3Ypl+e6s6Fcl2XybgHK/03KGnwHvdTX8h3QfQEHAg4DlO+gnyrKl0Mu8YpPneCczoBdADMBxwFOBpTvoJ8mytO1q7DUfWQGkztcM5nwvCKKvv+pLjAD+sZMwCsA5YXZWaJ8peG+chWTHFzNhOdsg33lKugbVwPORn3lGlG+1nBfmcMkB3OZ8JxnsK/Mgb4xF3Ae6ivXifL1hvvKfCY5WMCE50KDfWU+9I0FgAtRX7lBlG803FduYpKDRUx43mywr9wEfWMR4M2or9wiyrca7iu3McnBYiY8bzfYV26DvrEY8HbUV+4Q5TsN95W7mORgCROedxvsK3dB31gCeDfqK/eI8r2G+8p9THJwPxOeSw32lfugb9wPuBT1lQdE+UHDfWUZkxwsZ8JzhcG+sgz6xnLAFaivrBTlhwz3lVVMcrCaCc81BvvKKugbqwHXoL6yVpTXGe4r65nkYAMTnhsN9pX10Dc2AG5EfeVhUX7EcF/ZxCQHm5nw3GKwr2yCvrEZcAvqK4+K8lbDfWUbkxxsZ8Jzh8G+sg36xnbAHaiv7BTlxwz3lV1McrCbCc89BvvKLugbuwH3oL7yuCg/YbivPMkkB3uZ8NxnsK88CX1jL+A+1FeeEuWnDfeV/Uxy8AwTns8a7Cv7oW88A/gs6ivPifLzhvvKC0xy8KKBHKjnsF6AmL8IKN/u9pIov2w49q8wif2rBmP/CsT8VRT710T5dcOxf4NJ7N80GPs3IOZvotgfEOW3DMf+bSaxf8dg7N+GmL+DYv+uKL9nOPbvM4n9BwZj/z7E/AMU+w9F+SPDsf+YSez/ZzD2H0PM/4di/4kof2o49p8xif3nBmP/GcT8cxT7L0T5S8Ox/4pJ7L82GPuvIOZfo9h/I8rfGo79d0xi/73B2H8HMf8exf4HUf7RcOwPMon9TwZjfxBi/hOK/c+i/Ivh2B9iEvtfDcb+EMT8VxT730T5d8Ox/4NJ7P80GPs/IOZ/otgfFuW/DMf+byaxP2Iw9n9DzI+g2B8V5X8Mx/5fJrE/ZjD2/0LMj6HYHxflE4Zjf5JJ7E8ZjP1JiPkpFHv548uIaLOxj4zmEfuoaHOxlzGQMY+Kzop9tCjHGI59LJPYxzHhmYsJz3gmPHMz4ZnAhGceJjzzMuGZjwnP/Ex4FmDCsyATnoWY8CzMhGcRJjyLMuFZjAnP4kx4lmDCsyQTnqWY8CzNhGcZJjzLMuFZjgnP8kx4JjLhWYEJz4pMeFZiwrMyE55VmPCsyoRnNSY8qzPhWYMJz5pMeNZiwrM2E551mPCsy4RnPSY8fUx42kx4JjHhmcyEZwoTnqlMeNZnwjONCc90JjwbMOHZ0MAzL32hvmnwnFEPwFh49iVOPQMDGA84C867BvA6wBsAbwG8A/AewAcAVwKuBXwY8FHAnYCPAz4F+BzgS4CvAR4AfBfwQ8BPAL8A/AbwB8CfAX8DPAx4FPA4oAV+RwPmBkwAzAOYFzAfYH7AAoAFAQsBFgYsAlgUsBhgccASgCUBSwGWBiwDWBawHGB5wETACoAVASsBVgasAlgVsBpgdcAagDUBawHWBqwDWBewHqAP0AZMAkwGTAFMBawPmAaYDtgAsKFqX1gjUW4cfXq84d9jt4XcTQVspGIvrIkoN412fjOxZQWPXV9om13Boh27amuGnknz3vAcYp0VIKDU9fqj6b4ETPntjybPUdjenEw5uEzyLMuEZ0mLfrKSmAfKzUVfayGspbBWwloLayOsrbB2wtoL6yCso7BOqF/mB5QLauiTXbwV/CbneCv7ZCg3Lm9ojrHgoW8r+9umlT/qbdOxtO2OkG3FWNk3fRL3O8RTci0J5YyJU6ZnTM/oNn34+DEj2kyfOGLamEkTWw4bPx53BtWI6hRRDk7qx6NRQOKgHIOOqb+LQxihe+EHDHUm9keb+Sql5tmZ4NtHvRI7XHKpczT9DCS3Lp5cok1SFwNyqavL5ZL0u6sBuWShzWRMfSFu4ZJ1LQ1dlyHOW5LBum08OXWDPtcd9T0lDSKtrIksFuVD5Un+ySkrOFcRqBwJ50TlcE7EGerBEkX9vZIoxDExIreMTr4REFyZwBPQkNzvHh3caBRx2y0Jv/27EU7M3ZlcdO3BUD31MKSeenrqiTZJPQ2op14uV0/S717M1FMvhuqplaeesqmn3tDn+njqiad66q2ppz5hUE+tCL/9exNOzH2YqKe+DNVTX0Pq6TJPPdEm6TID6qmfy9WT9LsfM/XUj6F6au2pp2zqqT/0uQGeeuKpnvpr6mlAGNRTa8Jv//6EE/MAJuppIEP1NNCQehrkqSfaJA0yoJ4Gu1w9Sb8HM1NPgxmqp/aeesqmnoZAnxvqqSee6mmIpp6GhkE9tSf89h9CODEPZaKehjFUT8MMqafhnnqiTdJwA+pphMvVk/R7BDP1NIKheurgqads6mkk9LkMTz3xVE8jNfWUEQb11IHw238k4cScwUQ9ZTJUT5mG1NMoTz3RJmmUAfU02uXqSfo9mpl6Gs1QPXX01FM29TQG+txYTz3xVE9jNPU0NgzqqSPht/8Ywol5rKHBHanFj/K3gaHWNS7a3V/oFUQd46LpFWj5ONpcU/OTv2I24XdiXHj6uC+0zSbMj51oONe+0LbAL/dN5LqSy/t4C0N9vDKTPk6YH7uyy/t4SUN9vJrL+3gnQ328OpM+Tpgfu7rL+/hQyLVFW68RrhmMuI4NI9eQX3FpmRnvtVze99sYmudqM5nnCPNj13Z5rtsaynW9MOXaRf872pQ+y3zIC1FqqpT6Wi5J2B2wD+AAwNzCxovyBMglXvGpDZzTFrAd4FDADMCxgAWFTRTlSdFWto26j0xmcodrChOeU6Pp+5+6XjgZ+sYUwKmA8sLs5aI8zXBfmc4kBzOY8JxpsK9Mh74xA3Am6itXiPIsw33lSiY5uIoJz6sN9pUroW9cBXg16iuzRfkaw33lWiY5mMOE51yDfeVa6BtzAOeivjJPlK8z3FeuZ5KD+Ux4LjDYV66HvjEfcAHqKwtF+QbDfeVGJjm4iQnPRQb7yo3QN24CXIT6ys2ifIvhvnIrkxzcxoTnYoN95VboG7cBLkZ95XZRvsNwX7mTSQ7uYsJzicG+cif0jbsAl6C+crco32O4r9zLJAf3MeF5v8G+ci/0jfsA70d9ZakoP2C4rzzIJAfLmPBcbrCvPAh9YxngctRXVojySsN95SEmOVjFhOdqg33lIegbqwBXo76yRpTXGu4r65jkYD0TnhsM9pV10DfWA25AfWWjKD9suK88wiQHm5jw3GywrzwCfWMT4GbUV7aI8qOG+8pWJjnYxoTndoN9ZSv0jW2A21Ff2SHKOw33lceY5GAXE567DfaVx6Bv7ALcjfrKHlF+3HBfeYJJDp5kwnOvwb7yBPSNJwH3or6yT5SfMtxXnmaSg/0GcqCew3oaYr4fUL7d7RlRftZw7J9jEvvnDcb+OYj58yj2L4jyi4Zj/xKT2L9sMPYvQcxfRrF/RZRfNRz715jE/nWDsX8NYv46iv0bovym4dgfYBL7twzG/gDE/C0U+7dF+R3DsX+XSezfMxj7dyHm76HYvy/KHxiO/YdMYv+Rwdh/CDH/CMX+Y1H+n+HYf8Ik9p8ajP0nEPNPUew/E+XPDcf+Cyax/9Jg7L+AmH+JYv+VKH9tOPbfMIn9twZj/w3E/FsU++9E+XvDsf+BSex/NBj7HyDmP6LYHxTlnwzH/mcmsf/FYOx/hpj/gmJ/SJR/NRz735jE/neDsf8NYv47iv0fovyn4dgfZhL7vwzG/jDE/C8U+79F+Yjh2B9lEvt/DMb+KMT8HxT7f0X5mOHYH2cS+xMGY38cYn4Cxf6kKJ8yHHsrhkfsI5jwjGTCM4oJz2gmPGOY8IxlwjOOCc9cTHjGM+GZmwnPBCY88zDhmZcJz3xMeOZnwrMAE54FmfAsxIRnYSY8izDhWZQJz2JMeBZnwrMEE54lmfAsxYRnaSY8yzDhWZYJz3JMeJZnwjORCc8KTHhWZMKzEhOelZnwrMKEZ1UmPKsx4VmdCc8aTHjWZMKzFhOetZnwrMOEZ10mPOsx4eljwtNmwjOJCc9kJjxTCHmqZ176Qn0T4VmXToDyWRSJEYCRgFGAl8N5VwDOBpwHuBDwZsDbAe8GXAq4AnAN4EbALYA7APcA7gN8BvAFwFcA3wB8G/B9wI8BPwP8CvA7wIOAhwD/APwb8F/Ak4DREIcYwFjAOMBcgPGAuQETAPMA5gXMB5gfsABgQcBCgIUBiwAWBSwGWBywBGBJwFKApQHLAJYFLAdYHjARsAJgRcBKgJUBqwBWBawGWB2wBmBNwFqAtQHrANYFrAfoA7QBkwCTAVNUfcJSRbl+zOnxhn+P3RxyNR4wVcVSWJoop8dY2Tbq8dog5oLr8ml12eF6E3UD4jlGbQ1RrNVjdJHoc+9N1OdRp0xSwxj6ehvF0HV+U343iiHPkdE3UTciHFDhehP1lCgzsQ0xb7bBuoPawpNTY+hzTVDf895ETVNnWN5ELRO4DxqS+03QoNSDR9U2HkShfvs3JpyYmzD5b6cpQ/XU1JB6auapJ9okNTOgnvwuV0+BzmlIPVFzDbw63gDXcCmoUCbZzOzbCAe6RhSUkRzS1OXDk11z6BctLlCNtXDwWVdjLayzqzGnev5fqTE3dwil5JrHZCUmkDix39zKvlErO0I/7BaEXxot6SadTBXPliieJvpDkxgD90fc9d72IDUq/W5uwO8kl7+vXvrdwoDfyYbe7RvqvKF/kVPOG7iPh3xfyaXx0zabsH/bhH3GTmHybunmhN81rej+0zXyT54ca61izMxhlLk2cem2STS9362ZXDVqw4RnWyY82xHylP+vSVNXsGSfkvmSsZDtRMPn+kbUvn2mGPlC24zcLqHmmGaov5F3uPaERA13KGPJah/jfo4dqDly+SbsyGTm7kSo0LgOpE4MBlJnLjNzFzqiSVw7VBcGHaorlw7VjY5oMtcO1Y1Bh+rOpUP1YPLV3JMJz15MePYm5kk9gA6IOt434HeDOHf7/aWo42sDfjcM0wXrUHn2IZTghLm2TcWPOs99mcw/lzHh2Y8Jz/5MeA5gwnMgE56DmPAczITnECY8hzLhOYwJz+FMeI5gwnMkE54ZTHhmMuE5ignP0Ux4jmHCcywTnuOY8BzPhOcEJjwnMuE5iQnPyUx4TmHCcyoTnpcz4TmNCc/pTHjOYMJzJhOeVzDhOYsJzyuZ8LyKCc+rmfCczYTnNUx4XsuE5xwmPOcy4TmPCc/rmPC8ngnP+Ux4LmDCcyETnjcw4XkjE543MeG5iAnPm5nwvIUJz1uZ8LyNCc/FTHjezoTnHUx43smE511MeC5hwvNuJjzvYcLzXiY872PC834mPJcy4fkAE54PMuG5jAnP5Ux4rmDCcyUTng8x4bmKCc/VTHiucfnv4GZHWlbTKHq/m7j8d3AV5FIUBvxuyuR3cGsJfwdHmGu7KYN+4zfQb9a5fJ6Qfrcw4Pd6Bn63MuD3Bpf77Y+2rI4GFutr7vLxLRcT7GDA7xZMvhc2En4vEObabsGg33Q20G8edvk8If3uasDvRxj43d2A35uY/F+zmQnPLUx4PsqE51YmPLcx4bmdCc8dTHjuNMQzUuPpC20LvAaNyufHmPgcSejzLiY+RxH6vJuJz9GEPu9h4nMMoc+PM/E5ltDnJ5j4fCOhz08y8Rmv4Riqz3uZ+NyT0Od9THzuRejzU0x87k3o89NMfO5D6PN+Jj73JfT5GSY+X0bo87NMfO5H6PNzTHzuT+jz80x8HkDo8wtMfB5I6POLTHweROjzS0x8Hkzo88tMfB5C6PMrTHweSujzq0x8Hkbo82tMfB5O6PPrTHweQejzG0x8Hkno85tMfM4g9PkAE58zCX1+i4nPowh9fpuJz6MJfX6Hic9jCH1+l4nPYwl9fo+Jz+MIfX6fic/jCX3+gInPEwh9/pCJzxMJff6Iic+TCH3+mInPkwl9/h8Tn6cQ+vwJE5+nEvr8KROfLyf0+TMmPk8j9PlzJj5PJ/T5CyY+zyD0+UsmPs8k9PkrJj5fQejz10x8nkXo8zdMfL6S0Odvmfh8FaHP3zHx+WpCn79n4vNsQp9/YOLzNYQ+/8jE52sJfT7IxOc5hD7/xMTnuYQ+/8zE53mEPv/CxOfrCH0+xMTn6wl9/pWJz/MJff6Nic8LCH3+nYnPCwl9/oOJzzcQ+vwnl99XEfp8mInPNxH6/BcTnxcR+vw3E59vJvT5CBOfbyH0+SgTn28l9PkfJj7fRujzv0x8Xkzo8zEmPt9O6PNxJj7fQejzCSY+30no80kmPt9F6PMpJj4vIfTZiuXh892EPkcw8fkeQp8jmfh8L6HPUUx8vo/Q52gmPt9P6HMME5+XEvocy8TnBwh9jmPi84OEPudi4vMyQp/jmfi8nNDn3Ex8XkHocwITn1cS+pyHic8PEfqcl4nPqwh9zsfE59WEPudn4vMaQp8LMPF5LaHPBZn4vI7Q50JMfF5P6HNhJj5vIPS5CBOfNxL6XJSJzw8T+lyMic+PEPpcnInPmwh9LsHE582EPpdk4vMWQp9LMfH5UUKfSzPxeSuhz2WY+LyN0OeyTHzeTuhzOSY+7yD0uTwTn3cS+pzIxOc4i87nCkx8zkXoc0UmPscT+lyJic+5CX2uzMTnBEKfqzDxOQ+hz1WZ+JyX0OdqTHzOR+hzdSY+5yf0uQYTnwsQ+lyTic8FCX2uxcTnQoQ+12bic2FCn+sw8bkIoc91mfhclNDneoQ+F4V6IsBn+U5I+Y5E8a+vfGTakv8Pyv+P5P8LUj9LPSn1ldQb8vtXfh/J+VnOV3L8yv4s8yvr7Qx1FxNWXFgJYSWFlRJWWlgZYWWFlRNWXliisArCKgqrJKyysCrCqgqrJqy6sBrCagqrJay2sDrC6gqrJ2MhzBaWJGMsLEVYqrD6wtKEpQtrIKyhsEbCGgtrIqypsGaQn+bCWghrKayVsNbC2ghrK6ydsPbCOgjrKKwT+NhFWFdh3YR1F9ZDWE9hvYT1FtZHWF9hlwnrJ6y/sAHCBgobJGywsCHChgobJmy4sCshdvL9qfJ9ovL9mvJ9k/L9i/J9hPL9fPJ9dfL9bfJ9ZvL9XvJ9V/L9T/J9SPL9QPJ9OfL9MfJ9KvL9IvJ9G/L9E/J9DPL9BHK9frl+vVzPXa5vLtf7lutfy/Wg5frIcr1guX6uXE9Wrq8q1xuV62/K9Sjl+oxyvUK5fp9cz06u7ybXO5Prf8n1sOT6UHK9JLl+kFxPR64vI9dbkeuPyPU45PoUcr0GuX6B/D2//H27/L23/P2z/D2w/H2s/L2o/P2k/D2h/H2d/L2Z/P2V/D2S/H2O/L2K/P3GKeis8nl3+fy3fB5aPh8sn5eVz4/K5ynl84XyeTv5/Jl8Hks+nySf15HPr8jnOeTzDfJ+v7z/Le8Hy/uj8n6hvH8m7yfJ+yvyfoO8/i6vR8vrs/J6pbx+J69nyes78nqH/P9f/j8s/z+U/y/J/x+knpb6UuotqT/k97H8fpLztZy/5HhW2/8BqY7jlFoKBwA=", + "bytecode": "H4sIAAAAAAAA/+1dB5gURdOeyxxHzpkjZ9i5wB15yTknyfGOHCWIigIKqBgwYEIJklFAkoAKijmLOXzmLComFJT0dy/VXl3vcIStXqZ+Zp6nnrdndq77raru3vdmZntaxVlW6VgrsEUIixQWDWW1H6Ptx0I55vSfBc6XWzFhxYWVEFYS/Z36vJSw0sLKCCsLn0eiz8sJKy8sUVgF1F4lYbnQfmVtv4q2X1Xbr6btV9f2a2j7NbX9Wtp+bW2/jrZfV9uvp+37tH1b20/S9pO1/RRtP1Xbr6/tp2n76dp+A22/obbfSNtvrO030fabavvNtH2/tt9c22+h7bfU9ltp+621/Tbaflttv522317b76Dtd9T2O2n7nbX9Ltp+V22/m7bfXdvvoe331PZ7afu9tf0+2n5fbf8ybb+ftt9f2x+g7Q/U9gdp+4O1/SHa/lBtf5i2Pxz25fwQZZ3uL3KT84Ac+3K8yzEux3V16/T4lWNWjlM5NuV4lGNQjjs51uT4kmNKjiM5duR4kWNEjgs5FmT/l31e9nPZt2V/ln24GbQt+6fsk7Ifyr4n+5vsY7Jfyb4k+4/sM7KfyL4h+4PsA10h190hpz0hd70hR30hF/0g5gMgtoMghkMgVsMgJjI+cu5NhHjI+fakdXrOlVgCsCRgKcDSgGUAywKWAywPmAhYAbAiYCXAyoBVAKsCVgOsDlgDsCZgLcDagHUA6wLWA/QB2oBJgMmAKYCpqL4RwkY6xKY+nJMGmA7YALAhYCPAxoBNAJsCNgP0AzYHbAHYErAVYGvANoBtAdsBtgfsANgRsBNgZ8AugF0BuwF2B+wB2BOwF2BvFJsMYZlW9i0C0A+Y7KufkpKRlpRhJ9vDfEkNhqen+lJSh9dPt9Pt1PTUkUnpyckZ6SnpaQ2GN0jzNbBTkjPszNQGyZm+09soVJcvxM0kz9FMeI5hwnMsE57jmPAcz4TnBCY8JzLhOYkJz8lMeE5hwnMqE56XM+E5jQnP6Ux4zmDCcyYTnlcw4TmLkKf+P5n8n1f+b9IX8DLAfoD9AQcADgQcBDgYcAjgUMBhgMMBRwGOBhwDOBZwHOB4wAmAEwEnAU4GnAI4FfBywGmA0wFnAM4EvAJwlpX1P9mVwq6ysm/UObza4tHXZjPheQ0Tntcy4TmHCc+5THjOY8LzOiY8r2fCcz4TnguY8FzIhOcNFr1GKwD1yevpUqtkAF4JeDXgbMBrAK8FnAM4F3Ae4HWA1wPOB1wAuBDwBitLI90o7Cbr9L2fOOvMm58mBra5ulNGGqw7w2DdmebqTvUZrNtgLlOT4DGJwHhOhPIiYTcLu0XYrcJuE7ZY2O3C7hB2p7C7hC0Rdrewe4TdK+w+YfcLWyrsAWEPClsmbLmwFcJWCntI2Cphq4WtEbZW2Dph64VtELZR4/KwsEeEbRK2WdgWYY8K2ypsm7DtwnYI2ynsMWG7hO0WtkfY48KeEPaksL3C9gl7StjTwvYLe0bYs8KeE/a8sBeEvSjsJWEvC3sFOLwK+Brg64BvWFnb07lPY7x1+j6v3FRs5TE15mPQMfV5NDqmPo9Cx9TnkeiY+jwCHVOfW1r7cvMD+kLcYq3gud8X4iZ9Loj8sBz8jXCIS6RD/NTnMQ7xw/lQn6u85IPP4w3EK4G4TskRutt/W4S270flBOR/HgP+5TXgX57z8C8v8i+fAf/yG/Av33n4lx/5V8CAfwUN+FfgPPwriPwrZMA/4jptWWdhAzyL0taZJvNQxDr3PBRFeShmwL/ixHXKOkog/spXxT0BfV4c+VaClocdgdpU9ar9EqjdkqTtJgXGGfZfbjnltyTiUoqUy+n8Un93yjpKI/7KV8U9AX0ej3wrTcsjkN9SVvaYqv3SqF3Pf9J2Pf8tz3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z3/Pf89/z//w+29p5zg9i1FK88PAcwg5PotRyliMTj+Lgf2XW07PYuB+U4aUi7lnMcoi/spXxT0BfY77YllaHoH8lrGyx1Ttl0Xtev6Ttuv5b3n+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+h99/SzvH6VmMMpofBp5DyPFZjDLm2g3KlZP/ZR14mMjVmfwv6/nv+e/5b6BdO7DuEW5Xbjk9i4W5lCPlcvpZLBP5LY/4K18V9wT0Oc5veVoegfyWs7LHVO2XR+16/pO26/lvef57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/57/nv+e/67wf8E9Hkk4kJ8nd3O6fp+OQcuUS7iEu0iLjEu4hLrIi5xLuKSy0Vc4l3EJbeLuCS4iEseF3HJ6yIu+VzEJb+LuBRwEZeCLuJSyEVcCruISxEXcSnqIi7FXMSluIu4lHARl5Iu4lLKRVxKu4hLGRdxMfis2HlzibjIXOKt4Ofq4tHnkeiYuh6A39+aCGX8/tYKUMbvb62I/FTHKkE5Dh2rDOVc6FgVVFZYFcq50bFqUM6DjlWHcj50rAaUC6BjNaFcCB2rBeXC6FhtKBdBx+pAuRg6puKG46ziVh4dU3FLRMdU3CqgYypuFdExFbdK6JiKW2V0TMUNx1HFrSo6pvplNXRMxbI6Oqb0fw10TMW3Jjqm9HAtdEzFvDY6pvShiqP0PyIq63N1Lu6LdRzqUWU8plTbfkBfaFtgTOF2/GhftZUbcajtAi5lXcSljIu4lHYRl1Iu4lLSRVxKuIhLcRdxKeYiLkVdxKWIi7gUdhGXQi7iUtBFXAq4iEt+F3HJ5yIueV3EJY+LuCS4iEtuF3GJdxGXXC7iEuciLrEu4hLjIi7RLuIS5SIukQ5cTDyTo65fyE1dYyiDeChONRGPGsQxkXVUd+BRA/FQ7VdHPKrR8kiSdVR14FEN8VDtV0U8qtDySJZ1VHbgUQXxUO1XRjwq0fJIkXVUdOBRCfFQ7ePrnRVoeaTKOhIdeFRAPFT7iYgH8bNj9WUd5Rx4lEc8VPvlEI+6tDyyPcMWuHZoZY1T1VYUOucwTCZSV+Jr3fjaZT0o4+uePijja6Y2lPH11iQo42u1yVBORMdyukZcDx1T3wk+dEx9Z9nomPpOTULH1He+aj8OzlP/m/pV3aFtSbIt9T+m2nK6/4Cvqav/2fG9+aK0/AJ9pIjGRe2rthIQhwLmuKQlnKFttUWitosYiIOlxUFtRRy4RLmIS7SLuMS4iEusi7jEuYhLLhdxiXcRl9wu4pLgIi55XMQlr4u45HMRl/wu4lLARVwKuohLIRdxKewiLhEXmcuZnvVRn+PnK4qiskJ1zxE/c1Nc81MeU/ds8XM46p5yXnRM3fPGz+aoe/L50TF1/aUgOhbp4JvSqpi70oz42Ryl3YqjY0pDlUDHlJYpiY4pTVEKHVMxwu/xVDFS3GWbu3MH+xnp4CeuR5Vx3zHxvk3cjh/tq7bwMy2lXcClsIu4FHIRl4Iu4lLARVzyu4hLPhdxyesiLnlcxCXBRVxyu4hLvIu45HIRlzgXcYl1EZcYF3GJdhGXKBdxiXTgUpKWS+DWhdLWclNatyTi4fRu+eLEPCI0HomoXfz7qmLEuZB1FHXwH/9PpdrHv38j/j8x4D+uPxG1oeIShc5ZDh1Vjp0dubP+jvi3KoFbVuUd4lMOxUc9x15e40/II3CbrIIDj0TEQ7VfAfGoSMsjkCfMIwK1q9qKQudsQHnajvJEfA88Cf+WB3PDmx+VK6EYET8XkCLrqIraUrnCzwWo+7L4+QTi5yQC9+OrO/DAz0mo9vHzGsTPjQTux9d04IGfG1Ht4+dXiJ/pSZN11HbggZ/nUe3j53nq0PJIl3XUdeBRB/FQ7ddFPOrR8kiN13jILacxUw9x8dFyCVRno7YUL9VOghX8TEMsOuan4RHQJj7Nf7WP+Z0r16qMuFZnxLUmI661LzJX/IxQxYvMJQFxqGuOS2qCQ9sG2kmK13yWW05zKOaSbIBL0nlwSUZcUii52KffTZJKWacvySf9qw91qbrlsXSHY2nWucchHf1dAyjj75hGpH6c1tCNUf1+1EY6Ot6Etl0btxsBptpQx6NQ+XBU1rnqPKnjT6I4paD6mkI5Es5p4nBOQ1TG9ai/1csqjyo+CehzXFeDs/CLRX/nB/SFtgXi2Qhx9aP9pojP91FZHBrQckjCMY2GelUfamDOdx/uE6oP63mRx5sZiLlqV/Vh1YY6HoXKudXFNXSe3FS/Upxzo3ip8+R84DQuTfjUCPnkR/vN0PEznYPHi5OPjZCPjR3OyykuCejzxufYDv4b3AdNxA377kf7qi2Z/iNo/DWm5eBzmgPqa/Eycd3O6TukmJYHebyhgXZVTtUz7YqHaisKnVMIxl9eQ3GQdTh9X+Drl/p3jInrhBFa/X7Uhul8NNHy0dQhH+qc0lo+TFwvdZob8PVSxaUZiksiLY/kCK1+P2rDdD78Wj6aOeRDnVNZy0cicRxkHc2t4HwkonyotpqjuFBfE43Q6vejNkzno4WWj+YO+VDn1NHyYeLacEsrOB/42rDi0hLFhfracIRWvx+1YTofrbR8tHTIhzqnvpYPE9fIW1vB+cDXyBWX1igu1NfII7T6/agN0/loo+WjtUM+1DnNtHyYuFfQ1grOB75XoLi0RXGhvlcQodXvR22Yzkc7LR9tHfKhzmmn5cPEPZP2VnA+8D0TxaU9igv1PZMIrX4/asN0Pjpo+WjvkA91TnctHybuHXW0gvOB7x0pLh1RXDrR8mgQodXvR22YzkdnLR8dHfKhzumv5YM6DrKOLlZwPjqhfCguXVBcutLyGBah1e9HbZjORzctH10c8qHOGaHlgzoOso7uVnA+uqJ8KC7dUVx60PIYHqHV70dtmM5HTy0f3R3yoc4Zr+WDOg6yjl5WcD56oHwoLr1QXHrT8hgRodXvR22YzkcfLR+9HPKhzpmu5YM6DrKOvlZwPnqjfCgufVFcLqPlMTJCq9+P2jCdj35aPvo65EOdc42WD+o4yDr6W8H5uAzlQ3Hpj+IygJZHRoRWvx+1YTofA7V89HfIhzpnoZYP6jjIOgZZwfkYgPKhuAxCcRlMyyMzQqvfj9ownY8hWj4GOeRDnbNYywd1HGQdQ63gfAxG+VBchqK4DCPlYQeu8w/V8jEsTPkYruVjqEM+1Dn3afmgjoOsY4QVnI9hKB+KywgUl5G0PAJxGaHlY2SY8pGh5WOEQz7UOQ9p+aCOg6wj0wrOx0iUD8UlE8VlFC2PwP2PTC0fo8KUj9FaPjId8qHOeVjLB3UcZB1jrOB8jEL5UFzGoLiMpeURuP8xRsvH2DDlY5yWjzEO+VDn7NDyQR0HWcd4KzgfY1E+FJfxKC4TaHkE7n+M1/IxIUz5mKjlY7xDPtQ5e7V8UMdB1jHJCs7HBJQPxWUSistkWh6B+x+TtHxMDlM+pmj5mOSQD3XOC1o+qOMg65hqBedjMsqH4jIVxeVyWh6B+x9TtXxcHqZ8TNPyMdUhH+qcN7V8UMdB1jHdCs7H5Sgfist0FJcZtDwC9z+ma/mYEaZ8zNTyMd0hH+qcD7V8UMdB1nGFFZyPGSgfissVKC6zaHkE7n9coeVjVpjycaWWjysc8qHO+VLLB3UcZB1XWcH5mIXyobhcheJyNS2PwP2Pq7R8XB2mfMzW8nGVQz7UOQe1fFDHQdZxjRWcj6tRPhSXa1BcrqXlEbj/cY2Wj2vDlI85Wj6ucciHOudPLR/UcZB1zLWC83EtysccKM9FcZlHyyNw/2Oulo95YcrHdVo+5jrkQ51zXMsHdRxkHddbwfmYh/KhuFyP4jKflkfg/sf1Wj7mhykfC7R8XO+Qj//OicmeD+o4yDoWWsH5mI/yobgsRHG5gZZH4P7HQi0fN4QpHzdq+VjokA91Tj4tH9RxkHXcZAXn4waUD8XlJhSXRbQ8Avc/btLysShM+bhZy8dNDvlQ5xTX8kEdB1nHLVZwPhahfCgut6C43ErLI3D/4xYtH7eGKR+3afm4xSEf6pxELR/UcZB1LLaC83EryofishjFhcvv+RRn/Nu9OxyO3W5l3yK0fT8q34H+7k4oV0WxWULqx+nfgNyN6vejNu5Ax++hbdfG7arfQqk21PEoVE6PyTpXnad+L6fihH+rdy+UI+GcexzOuQuVcT3qb/WyyqOKTwL6HNd151n4xaK/8wP6QtsC8VyCuPrR/r2IT62YLA530nJIwjFVv+dTfehOc777cJ9QfVjPizx+n4GYq3ZVH1ZtqONRqNwFYm+h8+Sm+pXinBvFS50n5wOncWnCpyXIJz/avw8dP9M5eLw4+bgE+Xi3w3k5xSUBfX73ObaD/wb3QRNxw7770b5qS46JRmj83U3Lwec0ByzW4mVK7+jfIbdqeTCld1ROld5RPLDeUef0CYPeUfON3FRfxHpHccHzEu18eFqbYB6WlbPmuBdxIf6eDzxzgcen4qXaweMT/97W5Fyt6lX7Z5p/cuLahBFXPyOuLRhxbcWIaxtGXNsx4tqBEdfOjLh2Y8S1JyOufRhx7ceI60BGXIcw4jqcEdcMRlxHM+I6jhHXiYy4TmHEdRojrjMZcb2SEdfZjLjOYcT1OkZcFzDieiMjrjcz4nobI66m7zmcjWs8Oua7yFzwusbm7ssl+RIc2ub0XIHijp8huN/hGO6DcsvpGv/96O+WQhmvmf4gqR+n70UtQ/X7URv3o+PLadu1cbvqnqxqQx2PQuWj6LkCdZ66b6/ihJ8ZWAFl9VzBcodzHkBlXI/6W72s8qjik4A+x3UtPQu/WPR3fkBfaFsgng8irn60vwLx+Qnd11xKyyEJx1Q9V6D60FJzvvtwn1B9eIWWF3l8pYGYq3ZVH1ZtqONRqJwv1vpvW5lV/K9frQDMjeKlzpPzgdO4NOHTg8gnP9pfiY6f6ZwVVs4+Poh8XOZwXk5xSUCfLzvHdvDf4D5oIm4rEA8/2ldtyTFxDI2/ZbQcfE5zwD1avGS7JtYJ1r9Diml5MPVcgcqpeq5A8cDPFahzisH4M7lOsJpv5Kb6Il4nWHHB85KJdYIf0PJRLkz5WKHl4wGHfKhzymv5MLFOsJp7cT7wOsEroIy/PxJpeSQ7fT8lhikfK7V8LHfIhzqnupaPROI4yDoesoLzkYjyobg8hOJShZZH4HfyD2n5qBKmfKzS8vGQQz7UObaWDxPrBK+2gvOB1wlWXFajuJhYJ3i1lo9qYcrHGi0fqx3yoc5pqOXDxDrBa63gfOB1ghWXtSguJtYJXqvlo0aY8rFOy8dah3yoc1pq+TCxTvB6KzgfeJ1gxWU9ikstWh6B38mv1/JRK0z52KDlY71DPtQ5nbR8mFgneKMVnA+8TrDishHFpQ4tj8Dv5Ddq+agTpnw8rOVjo0M+1Dm9tXyYWCf4ESs4H3idYMXlERQXE+sEP6Llo1OY8rFJy8cjDvlQ5wzW8mFineDNVnA+8DrBistmFBcT6wRv1vLRNUz52KLlY7NDPtQ5o7R8mFgn+FErOB94nWDF5VEUFxPrBD+q5aNHmPKxVcvHow75UOdM1vJhYp3gbVZwPvA6wYrLNhQXE+sEb9Py0TtM+diu5WObQz7UObO0fJhYJ3iHFZwPvE6w4rIDxcXEOsE7tHxcFqZ87NTyscMhH+qceVo+TKwT/JgVnA+8TrDi8hiKi4l1gh/T8jEgTPnYpeXjMYd8qHMWafkwsU7wbis4H3idYMVlN4qLiXWCd2v5GBymfOzR8rHbIR/qnLu0fJhYJ/hxKzgfeJ1gxeVxFJdhpDxOrxP8uJaPYWHKxxNaPh53yIc650EtH9RxkHU8aQXnYxjKh+LyJIqLiXWCn9TyMTJM+dir5eNJh3yoc9Zq+TCxTvA+KzgfeJ1gxWUfiouJdYL3afkYFaZ8PKXlY59DPtQ5W7R8mFgn+GkrOB94nWDF5WkUl7G0PAL3P57W8jE2TPnYr+XjaYd8qHN2a/kwsU7wM1ZwPvA6wYrLMyguE2h5BO5/PKPlY0KY8vGslo9nHPKhztmv5cPEOsHPWcH5wOsEKy7PobiYWCf4OS0fk8OUj+e1fDznkA91zitaPkysE/yCFZwPvE6w4vICiouJdYJf0PJxeZjy8aKWjxcc8qHOeUfLh4l1gl+ygvOB1wlWXF5CcTGxTvBLWj5mhCkfL2v5eMkhH+qcT7R8mFgn+BUrOB94nWDF5RUUl1m0PAL3P17R8jErTPl4VcvHKw75UOd8q+WDOg6yjtes4HzMQvlQXF5DcTGxTvBrWj6uDlM+Xtfy8ZpDPtQ5h7R8mFgn+A0rOB94nWDF5Q0UFxPrBL+h5ePaMOXjTS0fbzjkQ51zRMuHiXWCD1jB+cDrBCsuB1Bc5tHyCNz/OKDlY16Y8vGWlo8DDvlQ51hx2fNBHQdZx9tWcD7moXwoLm+juMyn5RG4//G2lo/5YcrHO1o+3nbIhzonXsuHiXWC37WC84HXCVZc3kVxMbFO8LtaPm4IUz7e0/LxrkM+1DmFtHyYWCf4fSs4H3idYMXlfRSXRbQ8Avc/3tfysShM+fhAy8f7DvlQ55TW8mFineAPreB84HWCFZcPUVxMrJv3oZaPW8OUj4+0fHzokA91TmUtHybWzfvYCs4HXjdPcfkYxYXL7/kUZ/zbvU8cjv3Pyr5FaPt+VP4E/d2nUK6JYvM5qR+nfwPyBarfj9r4BB3/krZdG7cbAabaUMejULlxXNa56jz1ezkVJ/xbva+gHAnnfOlwzmeojOtRf6uXVR5VfBLQ57iuT8/CLxb9nR/QF9oWiOfniKsf7X+F+NSLy+LwKS2HJBxT9Xs+1Yc+Nee7D/cJ1Yf1vMjjXxuIuWpX9WHVhjoehco9IPYWOk9uql8pzrlRvNR5cj5wGpcmfPoc+eRH+1+j42c6B48XJx8/Rz5+4XBeTnFJQJ9/cY7t4L/BfdBE3LDvfrSv2pJjohkaf1/QcvA5zQEfa/EypXdw/X7UxufouAm9o3Kq9I7igfWOOqd/GPSOmm/kpvoi1juKC56XaOfD09oE87CsnDXHV4gL8fd84JkLPD4VL9UOHp/497Ym52pVr9o/0/yTE9cVjLiuZMR1FSOuaxhxXceI6wZGXB9mxHUTI65bGHHdyojrdkZcdzLiuosR1z2MuD7BiOteRlyfYsR1PyOuzzLi+jwjri8y4voyI66vMuL6OiOubzLi+hYjru8w4voeI64fMOL6ESOupu85nI1rPDqWdJG5JCAO5u7LnV4nWG/bgM9J8ZrPcovQ9v2ojLl8a4DLN+fB5VvE5XsDXL47Dy7fIy4/GuDyw3lw+RFx+ckAl4PnweUnxOUXA1x+Pg8uvyAuv5JyOX2/6tB5cPkVcfmNlMvp+1W/o7YUL9VOAvq8AeLxOy2PwHz6m+a/2sf8zpVrE0Zc/Yy4tmDEtRUjrm0YcW3HiGsHRlw7M+LajRHXnoy49mHEtR8jrgMZcR3CiOtwRlwzGHEdzYjrOEZcJzLiOoUR12mMuM5kxPVKRlxnM+I6hxHX6xhxXcCI642MuN7MiOttjLjeeZG5xqNjX15kLvg+0iFjXE7fr9LbNtFOvOaz3HK6zo65/EHK5fR19j9RW4rXHyj26nP8u5A/aXkE+sEfmv9qH/M7V64rGHFdyYjrKkZc1zDiuo4R1w2MuD7MiOsmRly3MOK6lRHX7Yy47mTEdRcjrnsYcX2CEde9jLg+xYjrfkZcn2XE9XlGXF9kxPVlRlxfZcT1dUZc32TE9S1GXN9hxPU9Rlw/YMT1I0ZcP73IXOPRsW8uMpcExOE3Y1xOX2fPKQ7fGWv73OOgONQ2yOVscfjBBXFQHIpfxDgcdEEcFIeyFzEOP7sgDopDZJjjINspSdtOYD1a6rXwDMQjDfcBteV0vxDH7C/imMl2/0b1+1EbuN0jxHHF7UaAqTbU8ShUrh+fFY8jWUWrAKDiLNcCPOxwHi7/of1NAvr8sGGf/0I8/GhftSXXsqyFfD3swLsk4q0+b4h4FyPmHYvaoanz9D1zrOnkltMYwHmhHgOyjr9RW4oX7h/qc/zbtL+J45xT/8D8zpVrE0Zc/Yy4tmDEtRUjrm0YcW3HiGsHRlw7M+LajRHXnoy49mHEtR8jrgMZcR3CiOtwRlwzGHEdzYjrOEZcJzLiOoUR12mMuM5kxPVKRlxnM+I6hxHX6xhxXcCI642MuN7MiOttjLjeeZG5Gmg3cI8Ftyu3nK4vYy5HabkE7rH8g+r3ozZwu//StmvjdtU9FtWGOh6Fyq+h+w7/ZhX/u++gOMt7LEcczsPlv7S/SUCfHzHs81HEw4/2VVvyHsv+M9xPUryLId7qc3w/rBwt7yT6+02n77HgOUBuOY0BnBfqMSDr+Ae1pXjh/qE+x79L/IeWR479A/M7V64rGHFdyYjrKkZc1zDiuo4R1w2MuD7MiOsmRly3MOK6lRHX7Yy47mTEdRcjrnsYcX2CEde9jLg+xYjrfkZcn2XE9XlGXF9kxPVlRlxfZcT1dUZc32TE9S1GXN9hxPU9Rlw/YMT1I0ZcP73IXA20G7jHgtuVW07XlzGXY7RcAvdYjqP6/agN3O4J2nZt3K66x6LaUMejUHl47qx4nMgq/nffQXGWp/3rcB4uH9X+JgF9/q9hn48hHn60r9qS91j6Il//deBdDvFWn+P7YYm0vJMN3G8KjAE8B8gtpzGA83KclosP9z01Bo47tHuStl0bt6vGgGpDHY9C5WmoX5zMKv7XLxRnedoxh/Nw+R/tbxLQ58cM+3wc8fCjfdWWHANjkK/HHHgnIt7qc/wb5Sq0vFMMzL2BMYDHt9xyGgM4L8Rzkw/3PTUGTji0e4q2XRu3q8aAakMdj0LlBahfnMoq/tcvFGd52nGH83BZ/55IQJ8fN+wz/j7yo33VlhwDVyFfjzvwroJ4q8/x79Or0fJONTD3BsYAHt9yy2kM4LwQz00+3PfUGDjp0K4iSNSujdtVY0C1oY5HofK9uZ2DpfqF4ixPO+FwHi7r3xMJ6PMThn3G30d+vA9tyTFwyxl0n+JdDfFWn+O1CWqg+gl41zcw9wbGAB7fKATZ4qPHwcDc5MN9T42BUw7tRhjoD6pdNQZUG+p4FCpvRP0iwqE/K87ytJMO5+Gy/j2RgD4/adhn/H3kR/sRaAwsP4PuU7xrIN7q80hA2bdU3gohX0xqWVWv2sdzi+JgcB5PS3BoW8Zxe+6s8g4o4zlScYu3gnW4PBap1RkH/BNI+dtpss68xHVK/nms7FtOc4xqPxeY3EZlTOsyaVrG5XhYqjqV7sBfTZGoHIX+JtoK5hHjcCzW4VicFbzlQmX0eOJ/eYlAvIqj8/JBOQ86pjirz+Ks4DiRDRpcZ6RWd7KvfkpKRlpShp1sD/MlNRienupLSR1eP91Ot1PTU0cmpScnZ6SnpKc1GN4gzdfATknOsDNTGyRnQuWRhDxfo6vLh32OII7nG4Txi7IcEm+A8+sW8Zc3bG+icrTWx+SmBmSsAZ8srR09jvksw4PKRJLeNFDvAYuuw5ry+wB9jnx6B9Hqtn0hbIt0niHUdjNhfuRyQGGKX6A53wVut1gOPC+wtlsJ45cU3vj5LtTr26wz8LyA2hYTxi85/PHzXYjXt1s58DzP2u4gjF/KxYmf73y9vtM6C8/zqO0uwvilXrz4+c7H6yXWOfA8x9ruJoxf/YsbP9+5en2PdY48z6G2ewnjl3bx4+c7F6/vs86D51lqu58wfunuiJ/vbF4vtc6TZw61PUAYvwbuiZ8vJ68ftC6A5xlqW0YYv4buip/vTF4vty6Qp0NtKwjj18h98fM5eb3SCoGnVttDhPFr7M74+XSvV1kh8kS1rSaMXxP3xs+HvV5jEfCE2tYSxq+pu+PnU16vs4h4itrWE8avmfvjJzd7A2Fd+JpTqPHzM4kf4XUiO5kwfs2ZxI/wOoedShi/FkziR/h/up1GGL+WTOJH+H+m3YAwfq2YxI/w/yS7EWH8WjOJH6HOt5sQxq8Nk/gR6lS7GWH82jKJH6HOspsTxq8dk/gR6gS7JWH82jOJH+H3nN2aMH4dmMSPcJ622xLGryOT+BHOM3Z7wvh1YhI/wnFidySMX+cwxS9Unm8R5oKwz9idw9f/Qnr+6mGL7vmrRwjzOo7J81ebLLrnrzYTxm88k+evtlh0z189Shi/CUyev9pq0T1/tY0wfhOZPH+13aJ7/moHYfwmMXn+aqd1DjzPsbbHCOM3mcnzV7usc+R5DrXtJozfFCbPX+2xzoPnWWp7nDB+U5k8f/WEdZ48c6jtScL4Xc7k+au91gXwPENt+wjjN43J81dPWRfI06G2pwnjN53J81f7rRB4arU9Qxi/GUyev3rWCpEnqu05wvjNZPL81fMWAU+o7QXC+F3B5PmrFy0inqK2lwjjN4vJ9dOXCesaR3j99Eom8SO8TmRPIIzfVUziR3idw55EGL+rmcSP8P90ewph/GYziR/h/5n25YTxu4ZJ/Aj/T7KnE8bvWibxI9T59kzC+M1hEj9CnWrPIozfXCbxI9RZ9lWE8ZvHJH6EOsGeTRi/65jEj/B7zr6WMH7XM4kf4TxtzyWM33wm8SOcZ+zrCOO3gEn8CMeJPZ8wfguZPH/1NmEuCPuMTRk/tbqhWvVQPnMmV5XcCPg24CuAr1pZq07KN7i8a2XfIohz8B5hDpSvkVDfe+DLO8in962sN6iY6lcfEvrE8bm+UOP3kXXpjcsPrezj8iPrzOPyY2H/s7Jv1OPyE8vcuPwEfPkY+STfvvOZlbUaqzo3Es75FFAuMPm5sC8czn0dzvkcUPbLL4V9pcUqkjhWBwjr+tpA3NUKu8UgLsUBSwCWBCwFWBqwDGBZwHKA5QETASsAVkT4jbBvIdZOC8L7iXz8hq4uXyLU852w74X9IOxHYQeF/STsZ2G/CDsk7Fdhvwn7Xdgfwv4Udtg6/ZYg+YacI9bpt6XIt0XI1fLlauFyJeoTEKNTEAy5+naksChh0cJiYEnyCIid5JLLytr/Xtv/Qdv/Uds/qO3/pO3/rO3/ou0f0vZ/1fZ/0/Z/1/b/0Pb/1PYPa/t/aft/a/tHtP2j2v4/2v6/2v4xbf+4tn9C2z+p7Z/S9mUB70do+5HafpS2H63tx0RkX2VabtT/N+AxE+p89R1hXWtcrk8yMuXms78nqkvm4gfC+K11ffwCVds/hl5XEvhsHySM3zo3xy/lP572T6HV5UM+2z8Txm+9W+OXlI2n/cuF1+XTfLYPEcZvgwvjVz8ziKf964XVle7gs/0bYfw2ui1+6Y487d/Pv660M/hs/0EYv4fdFL+0M/K0/zy/upJy8Nk+TBi/R9wSv7Qcedp/nXtdI87is/03Yfw2uSF+aWflaR85t7p85+CzfZQwfpsvdvx858TT/ufsdaWeo8/2v4Tx23Ix45dyzjztYznWlZJ5Hj7bxwnj9+jFil/aefG0T5y5rvTz9Nk+SRi/rRchfg0yz5unfcq5Lt8F+GzLCx9U8dsW7vj5LoinHRHss32BPtuRhPHbHs74jbxgnnZUdp+TQ/DZjiaM344wxS8pMySedkwE3bXENYTPDexk8twF4XU2ex1h/B5jEj/C60T2BsL47WISP8LrHPbDhPHbzSR+hP+n25sI47eHSfwI/8+0txDG73Em8SP8P8neShi/J5jEj1Dn29sJ4/ckk/gR6lR7J2H89jKJH6HOsncRxm8fk/gR6gR7D2H8nmISP8LvOfsJwvg9zSR+hPO0vZcwfvuZxI9wnrGfIozfM0ziRzhObMI+Y5uKH/WzybEXfs0u6PkNp5fGO3H2hbbZsXTX3HyYbxzaiQaMtIL7bqwBnyytHT2O+RyOkTZuIklxEfT15iK8yGzK71wR5DnKcRLwhbZli6kvxC3KyhooThtNO0k+wrqDFlMzx1vcZEJ1xkMic6P+Eg8YaWVNPrGAESi2coI6heqKQBiB6jiF/sbpnIgz1BOPjqm/z4e4EMbEZ2BC9RmdMNUT5jKB+6ysJ85zo4FkoSTgtkP9lo0nnABzR5gZkNQqJYGhSkkwpFLyeCqFNkl5DKiUvC5XKdLvvMxUSt4wqBTqiSuECdakKrloiicfBDj/BSqeFlZwrnTF08I6u+JxqsdTPGfe/lM8+SKygin38zsoHurfsOcm/PbPRzgx5zc0uKknoXwR4ZngQ+VZgKHKK2BI5RX0VB5tkgoaUHmFXK7ypN+FmKm8Qpe2yrMd6LJTeYUhwEU8lcdT5RXWVF4RZiqvMOHEXMTQ4KaehAozUXlFGaq8ooZUXjFP5dEmqZgBlVfc5SpP+l2cmcorfmmrvCQHuuxUXgkIcElP5fFUeSU0lVeSmcorQTgxlzQ0uKknoRJMVF4phiqvlCGVV9pTebRJKm1A5ZVxucqTfpdhpvLKXNoqL9mBLjuVVxYCXM5TeTxVXllN5ZVjpvLKEk7M5QwNbupJqCwTlVeeocorb0jlJXoqjzZJiQZUXgWXqzzpdwVmKq/Cpa3yUhzoslN5FSHAlTyVx1PlVdRUXiVmKq8i4cRcydDgpp6EKjJReZUZqrzKhlReFU/l0SapigGVV9XlKk/6XZWZyqt6aau8VAe67FReNQhwdU/l8VR51TSVV52ZyqtGODFXNzS4qSehakxUXg2GKq+GIZVX01N5tEmqaUDl1XK5ypN+12Km8mpd2iqvvgNddiqvNgS4jqfyeKq82prKq8NM5dUmnJjrGBrc1JNQbSYqry5DlVfXkMqr56k82iTVM6DyfC5XedJvHzOV57u0VV6aA112Ks+GACd5Ko+nyrM1lZfETOXZhBNzkqHBTT0J2UxUXjJDlZdsSOWleCqPNkkpBlReqstVnvQ7lZnKS720VV66A112Kq8+BDjNU3k8VV59TeWlMVN59Qkn5jRDg5t6EqrPROWlM1R56YZUXgNP5dEmqYEBldfQ5SpP+t2QmcpreGmrvAYOdNmpvEYQ4MaeyuOp8hppKq8xM5XXiHBibmxocFNPQo2YqLwmDFVeE0Mqr6mn8miT1NSAymvmcpUn/W7GTOU1u7RV3jAHuuxUnh8C3NxTeTxVnl9Tec2ZqTw/4cTc3NDgpp6E/ExUXguGKq+FIZXX0lN5tElqaUDltXK5ypN+t2Km8lpd2ipvuANddiqvNQS4jafyeKq81prKa8NM5bUmnJjbGBrc1JNQayYqry1DldfWkMpr56k82iS1M6Dy2rtc5Um/2zNTee0vbZU3woEuO5XXAQLc0VN5PFVeB03ldWSm8joQTswdDQ1u6kmoAxOV14mhyutkSOV19lQebZI6G1B5XVyu8qTfXZipvC6Xtsob6UCXncrrCgHu5qk8niqvq6byujFTeV0JJ+ZuhgY39STUlYnK685Q5XU3pPJ6eCqPNkk9DKi8ni5XedLvnsxUXs9LW+VlONBlp/J6QYB7eyqPp8rrpam83sxUXi/Cibm3ocFNPQn1YqLy+jBUeX0Mqby+nsqjTVJfAyrvMperPOn3ZcxU3mWXtsrLdKDLTuX1gwD391QeT5XXT1N5/ZmpvH6EE3N/Q4ObehLqx0TlDWCo8gYYUnkDPZVHm6SBBlTeIJerPOn3IGYqb9AlrfJsSiV20VTeYAjwEE/l8VR5gzWVN4SZyhtMODEPMTS4qSehwUxU3lCGKm+oIZU3zFN5tEkaZkDlDXe5ypN+D2em8oZf2irPdqDLTuWNgACP9FQeT5U3QlN5I5mpvBGEE/NIQ4ObehIawUTlZTBUeRmGVF6mp/Jok5RpQOWNcrnKk36PYqbyRl3aKi/JgS47lTcaAjzGU3k8Vd5oTeWNYabyRhNOzGMMDW7qSWg0E5U3lqHKG2tI5Y3zVB5tksYZUHnjXa7ypN/jmam88Ze2ykt2oMtO5U2AAE/0VB5PlTdBU3kTmam8CYQT80RDg5t6EprAROVNYqjyJhlSeZM9lUebpMkGVN4Ul6s86fcUZipvyqWt8lIc6LJTeVMhwJd7Ko+nypuqqbzLmam8qYQT8+WGBjf1JDSVicqbxlDlTTOk8qZ7Ko82SdMNqLwZLld50u8ZzFTejEtb5aU60GWn8mZCgK/wVB5PlTdTU3lXMFN5Mwkn5isMDW7qSWgmE5U3i6HKm2VI5V3pqTzaJF1pQOVd5XKVJ/2+ipnKu+rSVnn1HeiyU3lXQ4BneyqPp8q7WlN5s5mpvKsJJ+bZhgY39SR0NROVdw1DlXeNIZV3rafyaJN0rQGVN8flKk/6PYeZyptzaau8NAe67FTeXAjwPE/l8VR5czWVN4+ZyptLODHPMzS4qSehuUxU3nUMVd51hlTe9Z7Ko03S9QZU3nyXqzzp93xmKm/+pa3y0h3oslN5CyDACz2Vx1PlLdBU3kJmKm8B4cS80NDgpp6EFjBReTcwVHk3GFJ5N3oqjzZJNxpQeTe5XOVJv29ipvJuurRVXgMHuuxU3iII8M2eyuOp8hZpKu9mZipvEeHEfLOhwU09CS1iovJuYajybjGk8m71VB5tkm41oPJuc7nKk37fxkzl3XZpq7xhDnTZqbzFEODbPZXHU+Ut1lTe7cxU3mLCifl2Q4ObehJazETl3cFQ5d1hSOXd6ak82iTdaUDl3eVylSf9vouZyrvr0lZ5wx3oslN5SyDAd3sqj6fKW6KpvLuZqbwlhBPz3YYGN/UktISJyruHocq7x5DKu9dTebRJuteAyrvP5SpP+n0fM5V336Wt8kY40GWn8u6HAC/1VB5PlXe/pvKWMlN59xNOzEsNDW7qSeh+JirvAYYq7wFDKu9BT+XRJulBAypvmctVnvR7GTOVt+zSVnkjHeiyU3nLIcArPJXHU+Ut11TeCmYqbznhxLzC0OCmnoSWM1F5KxmqvJWGVN5DnsqjTdJDBlTeKperPOn3KmYqb9WlrfIyHOiyU3mrIcBrPJXHU+Wt1lTeGmYqbzXhxLzG0OCmnoRWM1F5axmqvLWGVN46T+XRJmmdAZW33uUqT/q9npnKW39pq7xMB7rsVN4GCPBGT+XxVHkbNJW3kZnK20A4MW80NLipJ6ENxEpE5jcR6osRB3IJjAaMAowEjAC0AE9Zp/Ek4AnA44DHAP8F/AfwKOARwL8B/wI8DPgn4B+AvwP+Bvgr4CHAXwB/BvwJ8CDgj4A/AH4P+B1gIsThYeHfI8I2CdssbIuwR4VtFbZN2HZhO4TtFPaYsF3CdgvbI+xxYU8Ie1LYXmH7hD0l7Glh+4U9I+xZYc8Je17YC8JeFPaSsJeFvQJjEvNZBPs3A94CeCvgbYCLAW8HvAPwTsC7AJcA3g14D+C9gPcB3g+4FPABwAcBlwEuB1wBuBLwIcBVgKsB1wCuBVwHuB5wA+BGPS+w/wjgJsDNgFsAHwXcCrgNcDvgDsCdgI8B7gLcDbgH8HHAJwCfBNwLuA/wKcCnAfcDPgP4LOBzgM8DvgD4IuBLgC8DvgLohzhUgv3KgFUAqwJWA6wOWAOwJmAtwNqAdQDrAtYD9AHagEmAyYApgKmA9QHTANMBGwA2BGwE2BiwCWBTwGbIX4nNAVsAtgRsBdgasA1gW8B2gO0BOwB2BOwE2BmwC2BXwG6A3QF7APYE7AXYG7APYF/AywD7AfYHHAA4EHAQ4GDAIYBDAYcBDreC56nAeADcBLgZcAvgo4BbAbcBbgfcAbgT8DHAXYC7AfcAPg74BOCTgHsB9wE+Bfg04H7AZwCfBXwO8HnAFwBfBHwJ8GXAVwBf1RQS9T8prxLqi3BdqShn0eoDtb3mXamgTdJrEfT1vu7yKxXS79cjyHN0zlcAfKFtpIPLJM9STHgWs+gnK4lzoPyG2HlT2AFhbwl7W9g7wt4V9p6w94V9IOxDYR8J+1jY/4R9IuxTYZ8J+1zYF8K+FPaVsK+FfSPsW2HfCfte2A/CfhR2UNhPwn4W9ouwQ8J+FfabsN+F/SHsT2GHhf0l7G9hR4QdFfaPsH+FHRN2XNgJYSeFnZIOiZk2QliksChh0cJihMUKixOWS1i8sNzCEoTlEZZXWD5h+YUVEFZQWCFhhYUVEVZUWDFhxYWVEFZSWClhpYWVEVZWWDlh5YUlCqsgrKKwSsIqC6sirKqwasKqC6shrKawWsJqC6sjrK6wesJ8wuSloyRhycJShKUKqy8sTVi6sAbCGgprJKyxsCbCmgprJswvrLmwFsJaCmslrLWwNsLaCmsnrL2wDsI6CuskrDP6dsoPKK8K6V9e8VbwFaZ4K/uXm9y4XDmKsU6LI+WHpfmrroLFkrab7pNtxVjZN/1L2e8QT8m1MJRHDBs/vtvUMTOGTctoM33iiGljJk3Ew1pVPwcwysE9/Xg0CkUclGPQMfV3cQgjdP5+wFC/U/H3sy+0LZsooubZJTL0ujIyT2/hEr6Ysy/EDfPtinqWJ3xDrFMmSQaUut5ukXSd35Tf3SLJc2RUnHUjHFDhEugHIszEljhvSQbrznaLrjvs9EAHz+cW3SkrOFcRVvZbdKess9+ic6rHu0V35u2/W3QygSesrFt0PSKDG40ibvtABN23f3fCiblHZHgmzlB59mSonnoaUk+9PPVEm6ReBtRTb5erJ+l3b2bqqTdD9fSWp56yqac+sNPXU0881VMfTT31DYN6eotQPfUhnJj7MlFPlzFUT5cZUk/9PPVEm6R+BtRTf5erJ+l3f2bqqT9D9fS2p56yqacBsDPQU0881dMATT0NDIN6eptQPQ0gnJgHMlFPgxiqp0GG1NNgTz3RJmmwAfU0xOXqSfo9hJl6GsJQPb3vqads6mko7Azz1BNP9TRUU0/DwqCe3idUT0MJJ+ZhTNTTcIbqabgh9TTCU0+0SRphQD2NdLl6kn6PZKaeRjJUTx946imbesqAnUxPPfFUTxmaesoMg3r6gFA9ZRBOzJlM1NMohupplCH1NNpTT7RJGm1APY1xuXqSfo9hpp7GMFRPH3rqKZt6Ggs74zz1xFM9jdXU07gwqKcPCdXTWMKJeRwT9TSeoXoab0g9TfDUE22SJhhQTxNdrp6k3xOZqaeJDNVTZ0MTLHHewqaeJsHOZE898VRPkzT1NDkM6qkz4bf/JMKJebKhwR2pxY9yZYVQ65oS6e4vdLkK0ZRIegX6ZSxtrqn5ydV8TPj9VWx4+rgvtM0mzI/9leFc+0LbAitYmcj1ty7v428a6uPfMenjhPmxv3N5Hy9mqI//6PI+/pGhPn6QSR8nzI990OV9XOrHKZFZsXQz12GMuGYy4joujFxDnUMkTRNz0y8uH6fvGJqTDzGZkwnzYx9yea7fNZTr38OUaxf9n2tT+izzIS+aqTse8n8B+WoNue6RxL6AAwFzC5sqypdDLvGqnu/A374L+B7gMPjbTMBxgAWFTRPl6Q51tYZz2gC2BWwH2B6wA2AeYTNEeSaqazLUNQ3O+Qj4fAz4P8BPAD8F/Azwc8AvAL8E/Arwa8BvAL8F/A7we8AfAH8EPAj4E+DPgL8AHgL8FfA3wN8B/wD8E/Aw4F+AfwMeATwK+A/gv4DHAI8DngA8CXgK0IL4RQBGAkYBRgPGAMYCxgHmAoxXfQgwQeUOMC9gPsD8gAVUfwEsBFgYsAhgUcBigMUBSwCWBCwFWBqwDGBZwHKA5QETASsAVgSsBFgZsApgVcBqgNUBawDWBKwFWBuwDmBdwHqAPkAbMAkwGTAFMBWwPmAaYDpgA8CGgI0AGwM2AWwK2AzQD9gcsAVgS8BWgDMAOwJ2Uv4Ku0KUZ6Gxqa5lvwF9bCqce4XKsbArRfmqSOc7opZF/x1V3qKdV9V2dWRW2buzHGKd5SGg1PXOjnT3nWXp9+xI8hyF7Y4t5eAyybM0E57FLfrJSuIcKF8j+tq1wuYImytsnrDrhF0vbL6wBcIWCrtB2I3CbhK2SNjNwm4Rdquw24QtFna7sDuE3SnsLmFLhN0t7B5h9wq7T9j9wpYKe0DYg8KWCVsubIWwlcIeErZK2Gpha4StFbZO2HphG4RtFPawsEeEbRK2WdgWYY8K2ypsm7DtwnYI2ynsMWG7hO0WtkfY48KeEPaksL3C9gl7StjTwvYLe0bYs8KeE/a8sBeEvSjsJWEvC3tF2KvCXhP2urA3hL0p7ICwt4S9LewdYe8Ke0/Y+8I+EPahsI+EfSzsf8I+EfapsM+EfS7sC2FfCvtK2NfCvhH2rbDvhH0v7AdhPwo7KOwnYT8L+0XYIWG/CvtN2O/C/hD2p7DDwv4S9rewI8KOCvtH2L/Cjgk7LuxEZFa/9V5j4L3GwHLBawzw97MvtM3oawxORvJ7pPJkJP13idxOoZ7lCd8Q65RJkgElD1SUu4Wv9BtPS0T1GhVnOKa+ELdwCfQ5kWZiS5y3sD1SGQFBj0TB9x6ppKkzLI9UygTiRyplIk0/UjmH8Ns/gnBijowKz8QZ8htLo+jiFy71FBVlRj1Fo4nHU08h1imTFB1FX2+My9WT9DuGmXqKYaie5nrqKZt6ioWgx3nqiad6itXUU1wY1NNcQvUUSzgxxzFRT7kYqqdchtRTvKeeaJMUb0A95Xa5epJ+52amnnIzVE/zPPWUTT0lQNDzeOqJp3pK0NRTnjCop3mE6imBcGLOw0Q95WWonvIaUk/5PPVEm6R8BtRTfperJ+l3fmbqKT9D9bTAU0/Z1FMBCHpBTz3xVE8FNPVUMAzqaQGheipAODEXZKKeCjFUT4UMqafCnnqiTVJhA+qpiMvVk/S7CDP1VIShelroqads6qkoBL2Yp554qqeimnoqFgb1tJBQPRUlnJiLMVFPxRmqp+KG1FMJTz3RJqmEAfVU0uXqSfpdkpl6KslQPd3gqads6qkUBL20p554qqdSmnoqHQb1dAOheipFODGXZqKeyjBUT2UMqaeynnqiTVJZA+qpnMvVk/S7HDP1VI6hejrhqads6qk8BD3RU0881VN5TT0lhkE9nSBUT+UJJ+ZEQ+opUosf5coKodZVIcrdX+hyFaIKUfQK9E+XL38tV/Mx4fdhJkutEubHPmw4177QtsAKViZyfcTlffxaQ338KJM+Tpgf+6jL+3hxQ338mMv7+I2G+vhxJn2cMD/2cZf3cakfKxj6J5yaa0FGXIsx4lo6jFwpXmNgYm465fJxep2hOVmup0fpt9qo52TC/NjUPlPn+npDuY4KU65d9H+uTemzzAd+jYH8XyCwVH0ULEUPmAdQvsagoihXglziVT2vg7+9HnA+YEH422KApQHlawwqi3IVh7r+gr/9G/AI4FHAfwD/BZSvMagq6qmG6poMdVWG9m6Ec28CXAR4M+AtgLcC3ga4GPB2wDsA7wS8C3AJ4N2A9wDeC3gf4P2ASwEfAHwQcBngcsAVgCsBHwJcBbgacA3gWsB1gOsBNwBuBHwY8BHATYCbAbcAPgq4FXAb4HbAHYA7AR8D3AW4G3AP4OOATwA+CbgXcB/gU4BPA+4HfAbwWcDnAJ8HfAHwRcCXAF8GfAXwVcDXAF8HfAPwTcADgG8Bvg34DuC7gO8Bvg/4AeCHgB8Bfgz4P8BPAD8F/Azwc8AvAL8E/Arwa8BvAL8F/A7we8AfAH8EPAj4E+DPgL8AHgL8FfA3wN8B/wD8E/AwYFUYZ8dg/zigfI1BdfFZDTQ2lTS7Bs6pCH9bHVC+xqCmKNfS7iZRf3/UvvDr1j6tLjtcd8BrG7oDXse7A06bpDoG7oDXdfkdcOl3XWZ3wOsyvANO+N5ryjvgtsG6g9rCk1M9CLrPuwPO8w64TOA+K+sOuA8NSj14VG3jQRTqt389wonZx+T5QZuherINqackTz3RJinJgHpKdrl6kn4nM7nEXsEQ13ApqFAm2czs2wgHukYUlIkcEtXlw5NdCiQw9QLVWAsHn3U11sI6uxpzquf/lRpzc4dQSi4lKisxcl92iuZW9o1a2VE+T5dK+KVRn27SyVTxrI/iaaI/+Azct4kxfL8qVDUq/U4x4Hesu/x2fA411YDfcYbu04U6b+hf5JTzBu7jIa9Q7dL4aZtN2L9twj5j52JynziF8LsmzeXPlMuxlhZlZg6jzLWJS7fyFd3UfqczuWrUgAnPhkx4NiLkKV9TGm1lXcGSfUrmS8ZCtoM/wxtR+/aZYuQLbTNyu4SaY01D/Y28wzUmJGq4QxlLVuMo93NsQs2RyzdhUyYzdzNChcZ1IDVjMJD8XGbm5nREk7h2qOYMOlQLLh2qJR3RZK4dqiWDDtWKkmO4bsUn0tWV7VZ8a+9WPG2SWhu4Fd/G5bfipd9tGN/eTrSssGhgX2ibXYYJzxIW/WQlMQ+U24pO0U5Ye2EdhHUU1klYZ2FdhHUV1k1Yd2E9UAfKDyhva+uTXbwVfIs83so+GcqNy61veXUqF/LD0vxVt/FjadsdIduKsbJv+iTud4in5FoSyhkTp0zPmJ7Rbfrw8WNGtJk+ccS0MZMmthw2fjzuDKoR1SmiHJzUj0ejgMRBOQYdU38Xh/CMzw+EOhO3iTLzVUrNsyfBt0+4Vz7saejJxV6eXKJNUi8Dcqm3y+WS9Ls3s9999Gb4u4/2pq4c0PIM28qHfSDofb3fffD83YdMIF75sG9UcKPUT6m0J/z270M4Mfdlct/iMobq6TJD6qmfp55ok9TPgHrq73L1JP3uz0w99Weonjp46imbehoAQR/oqSee6mmApp4GhkE9dSD89h9AODEPZKKeBjFUT4MMqafBnnqiTdJgA+ppiMvVk/R7CDP1NISheuroqads6mkoBH2Yp554qqehmnoaFgb11JHw238o4cQ8jIl6Gs5QPQ03pJ5GeOqJNkkjDKinkS5XT9LvkczU00iG6qmrp56yqacMCHqmp554qqcMTT1lhkE9dSX89s8gnJgzmainUQzV0yhD6mm0p55okzTagHoa43L1JP0ew0w9jWGonrp56imbehoLQR/nqSee6mmspp7GhUE9dSP89h9LODGPY6KexjNUT+MNqacJnnqiTdIEA+pposvVk/R7IjP1NJGheuruqads6mkSBH2yp554qqdJmnqaHAb11J3w238S4cQ82dDgjtTiR/nbwFDrmhLl7i/0RFHHlCh6BZrX5evHyl8xm/A7H5N3ehLmx87n8nd6ljHUxwu6vI+3M9THCzHp44T5sQu5vI+XMNTHi7q8j/cw1MeLMenjhPmxi7m8j2dCri3aeo1wHceI6+QwcqV4B72J8V7S5X2/k6F5rhSTeY4wP3Ypl+e6s6Fcl2XybgHK/03KGnwHvdTX8h3QfQEHAg4DlO+gnyrKl0Mu8YpPneCczoBdADMBxwFOBpTvoJ8mytO1q7DUfWQGkztcM5nwvCKKvv+pLjAD+sZMwCsA5YXZWaJ8peG+chWTHFzNhOdsg33lKugbVwPORn3lGlG+1nBfmcMkB3OZ8JxnsK/Mgb4xF3Ae6ivXifL1hvvKfCY5WMCE50KDfWU+9I0FgAtRX7lBlG803FduYpKDRUx43mywr9wEfWMR4M2or9wiyrca7iu3McnBYiY8bzfYV26DvrEY8HbUV+4Q5TsN95W7mORgCROedxvsK3dB31gCeDfqK/eI8r2G+8p9THJwPxOeSw32lfugb9wPuBT1lQdE+UHDfWUZkxwsZ8JzhcG+sgz6xnLAFaivrBTlhwz3lVVMcrCaCc81BvvKKugbqwHXoL6yVpTXGe4r65nkYAMTnhsN9pX10Dc2AG5EfeVhUX7EcF/ZxCQHm5nw3GKwr2yCvrEZcAvqK4+K8lbDfWUbkxxsZ8Jzh8G+sg36xnbAHaiv7BTlxwz3lV1McrCbCc89BvvKLugbuwH3oL7yuCg/YbivPMkkB3uZ8NxnsK88CX1jL+A+1FeeEuWnDfeV/Uxy8AwTns8a7Cv7oW88A/gs6ivPifLzhvvKC0xy8KKBHKjnsF6AmL8IKN/u9pIov2w49q8wif2rBmP/CsT8VRT710T5dcOxf4NJ7N80GPs3IOZvotgfEOW3DMf+bSaxf8dg7N+GmL+DYv+uKL9nOPbvM4n9BwZj/z7E/AMU+w9F+SPDsf+YSez/ZzD2H0PM/4di/4kof2o49p8xif3nBmP/GcT8cxT7L0T5S8Ox/4pJ7L82GPuvIOZfo9h/I8rfGo79d0xi/73B2H8HMf8exf4HUf7RcOwPMon9TwZjfxBi/hOK/c+i/Ivh2B9iEvtfDcb+EMT8VxT730T5d8Ox/4NJ7P80GPs/IOZ/otgfFuW/DMf+byaxP2Iw9n9DzI+g2B8V5X8Mx/5fJrE/ZjD2/0LMj6HYHxflE4Zjf5JJ7E8ZjP1JiPkpFHv548uIaLOxj4zmEfuoaHOxlzGQMY+Kzop9tCjHGI59LJPYxzHhmYsJz3gmPHMz4ZnAhGceJjzzMuGZjwnP/Ex4FmDCsyATnoWY8CzMhGcRJjyLMuFZjAnP4kx4lmDCsyQTnqWY8CzNhGcZJjzLMuFZjgnP8kx4JjLhWYEJz4pMeFZiwrMyE55VmPCsyoRnNSY8qzPhWYMJz5pMeNZiwrM2E551mPCsy4RnPSY8fUx42kx4JjHhmcyEZwoTnqlMeNZnwjONCc90JjwbMOHZ0MAzL32hvmnwnFEPwFh49iVOPQMDGA84C867BvA6wBsAbwG8A/AewAcAVwKuBXwY8FHAnYCPAz4F+BzgS4CvAR4AfBfwQ8BPAL8A/AbwB8CfAX8DPAx4FPA4oAV+RwPmBkwAzAOYFzAfYH7AAoAFAQsBFgYsAlgUsBhgccASgCUBSwGWBiwDWBawHGB5wETACoAVASsBVgasAlgVsBpgdcAagDUBawHWBqwDWBewHqAP0AZMAkwGTAFMBawPmAaYDtgAsKFqX1gjUW4cfXq84d9jt4XcTQVspGIvrIkoN412fjOxZQWPXV9om13Boh27amuGnknz3vAcYp0VIKDU9fqj6b4ETPntjybPUdjenEw5uEzyLMuEZ0mLfrKSmAfKzUVfayGspbBWwloLayOsrbB2wtoL6yCso7BOqF/mB5QLauiTXbwV/CbneCv7ZCg3Lm9ojrHgoW8r+9umlT/qbdOxtO2OkG3FWNk3fRL3O8RTci0J5YyJU6ZnTM/oNn34+DEj2kyfOGLamEkTWw4bPx53BtWI6hRRDk7qx6NRQOKgHIOOqb+LQxihe+EHDHUm9keb+Sql5tmZ4NtHvRI7XHKpczT9DCS3Lp5cok1SFwNyqavL5ZL0u6sBuWShzWRMfSFu4ZJ1LQ1dlyHOW5LBum08OXWDPtcd9T0lDSKtrIksFuVD5Un+ySkrOFcRqBwJ50TlcE7EGerBEkX9vZIoxDExIreMTr4REFyZwBPQkNzvHh3caBRx2y0Jv/27EU7M3ZlcdO3BUD31MKSeenrqiTZJPQ2op14uV0/S717M1FMvhuqplaeesqmn3tDn+njqiad66q2ppz5hUE+tCL/9exNOzH2YqKe+DNVTX0Pq6TJPPdEm6TID6qmfy9WT9LsfM/XUj6F6au2pp2zqqT/0uQGeeuKpnvpr6mlAGNRTa8Jv//6EE/MAJuppIEP1NNCQehrkqSfaJA0yoJ4Gu1w9Sb8HM1NPgxmqp/aeesqmnoZAnxvqqSee6mmIpp6GhkE9tSf89h9CODEPZaKehjFUT8MMqafhnnqiTdJwA+pphMvVk/R7BDP1NIKheurgqads6mkk9LkMTz3xVE8jNfWUEQb11IHw238k4cScwUQ9ZTJUT5mG1NMoTz3RJmmUAfU02uXqSfo9mpl6Gs1QPXX01FM29TQG+txYTz3xVE9jNPU0NgzqqSPht/8Ywol5rKHBHanFj/K3gaHWNS7a3V/oFUQd46LpFWj5ONpcU/OTv2I24XdiXHj6uC+0zSbMj51oONe+0LbAL/dN5LqSy/t4C0N9vDKTPk6YH7uyy/t4SUN9vJrL+3gnQ328OpM+Tpgfu7rL+/hQyLVFW68RrhmMuI4NI9eQX3FpmRnvtVze99sYmudqM5nnCPNj13Z5rtsaynW9MOXaRf872pQ+y3zIC1FqqpT6Wi5J2B2wD+AAwNzCxovyBMglXvGpDZzTFrAd4FDADMCxgAWFTRTlSdFWto26j0xmcodrChOeU6Pp+5+6XjgZ+sYUwKmA8sLs5aI8zXBfmc4kBzOY8JxpsK9Mh74xA3Am6itXiPIsw33lSiY5uIoJz6sN9pUroW9cBXg16iuzRfkaw33lWiY5mMOE51yDfeVa6BtzAOeivjJPlK8z3FeuZ5KD+Ux4LjDYV66HvjEfcAHqKwtF+QbDfeVGJjm4iQnPRQb7yo3QN24CXIT6ys2ifIvhvnIrkxzcxoTnYoN95VboG7cBLkZ95XZRvsNwX7mTSQ7uYsJzicG+cif0jbsAl6C+crco32O4r9zLJAf3MeF5v8G+ci/0jfsA70d9ZakoP2C4rzzIJAfLmPBcbrCvPAh9YxngctRXVojySsN95SEmOVjFhOdqg33lIegbqwBXo76yRpTXGu4r65jkYD0TnhsM9pV10DfWA25AfWWjKD9suK88wiQHm5jw3GywrzwCfWMT4GbUV7aI8qOG+8pWJjnYxoTndoN9ZSv0jW2A21Ff2SHKOw33lceY5GAXE567DfaVx6Bv7ALcjfrKHlF+3HBfeYJJDp5kwnOvwb7yBPSNJwH3or6yT5SfMtxXnmaSg/0GcqCew3oaYr4fUL7d7RlRftZw7J9jEvvnDcb+OYj58yj2L4jyi4Zj/xKT2L9sMPYvQcxfRrF/RZRfNRz715jE/nWDsX8NYv46iv0bovym4dgfYBL7twzG/gDE/C0U+7dF+R3DsX+XSezfMxj7dyHm76HYvy/KHxiO/YdMYv+Rwdh/CDH/CMX+Y1H+n+HYf8Ik9p8ajP0nEPNPUew/E+XPDcf+Cyax/9Jg7L+AmH+JYv+VKH9tOPbfMIn9twZj/w3E/FsU++9E+XvDsf+BSex/NBj7HyDmP6LYHxTlnwzH/mcmsf/FYOx/hpj/gmJ/SJR/NRz735jE/neDsf8NYv47iv0fovyn4dgfZhL7vwzG/jDE/C8U+79F+Yjh2B9lEvt/DMb+KMT8HxT7f0X5mOHYH2cS+xMGY38cYn4Cxf6kKJ8yHHsrhkfsI5jwjGTCM4oJz2gmPGOY8IxlwjOOCc9cTHjGM+GZmwnPBCY88zDhmZcJz3xMeOZnwrMAE54FmfAsxIRnYSY8izDhWZQJz2JMeBZnwrMEE54lmfAsxYRnaSY8yzDhWZYJz3JMeJZnwjORCc8KTHhWZMKzEhOelZnwrMKEZ1UmPKsx4VmdCc8aTHjWZMKzFhOetZnwrMOEZ10mPOsx4eljwtNmwjOJCc9kJjxTCHmqZ176Qn0T4VmXToDyWRSJEYCRgFGAl8N5VwDOBpwHuBDwZsDbAe8GXAq4AnAN4EbALYA7APcA7gN8BvAFwFcA3wB8G/B9wI8BPwP8CvA7wIOAhwD/APwb8F/Ak4DREIcYwFjAOMBcgPGAuQETAPMA5gXMB5gfsABgQcBCgIUBiwAWBSwGWBywBGBJwFKApQHLAJYFLAdYHjARsAJgRcBKgJUBqwBWBawGWB2wBmBNwFqAtQHrANYFrAfoA7QBkwCTAVNUfcJSRbl+zOnxhn+P3RxyNR4wVcVSWJoop8dY2Tbq8dog5oLr8ml12eF6E3UD4jlGbQ1RrNVjdJHoc+9N1OdRp0xSwxj6ehvF0HV+U343iiHPkdE3UTciHFDhehP1lCgzsQ0xb7bBuoPawpNTY+hzTVDf895ETVNnWN5ELRO4DxqS+03QoNSDR9U2HkShfvs3JpyYmzD5b6cpQ/XU1JB6auapJ9okNTOgnvwuV0+BzmlIPVFzDbw63gDXcCmoUCbZzOzbCAe6RhSUkRzS1OXDk11z6BctLlCNtXDwWVdjLayzqzGnev5fqTE3dwil5JrHZCUmkDix39zKvlErO0I/7BaEXxot6SadTBXPliieJvpDkxgD90fc9d72IDUq/W5uwO8kl7+vXvrdwoDfyYbe7RvqvKF/kVPOG7iPh3xfyaXx0zabsH/bhH3GTmHybunmhN81rej+0zXyT54ca61izMxhlLk2cem2STS9362ZXDVqw4RnWyY82xHylP+vSVNXsGSfkvmSsZDtRMPn+kbUvn2mGPlC24zcLqHmmGaov5F3uPaERA13KGPJah/jfo4dqDly+SbsyGTm7kSo0LgOpE4MBlJnLjNzFzqiSVw7VBcGHaorlw7VjY5oMtcO1Y1Bh+rOpUP1YPLV3JMJz15MePYm5kk9gA6IOt434HeDOHf7/aWo42sDfjcM0wXrUHn2IZTghLm2TcWPOs99mcw/lzHh2Y8Jz/5MeA5gwnMgE56DmPAczITnECY8hzLhOYwJz+FMeI5gwnMkE54ZTHhmMuE5ignP0Ux4jmHCcywTnuOY8BzPhOcEJjwnMuE5iQnPyUx4TmHCcyoTnpcz4TmNCc/pTHjOYMJzJhOeVzDhOYsJzyuZ8LyKCc+rmfCczYTnNUx4XsuE5xwmPOcy4TmPCc/rmPC8ngnP+Ux4LmDCcyETnjcw4XkjE543MeG5iAnPm5nwvIUJz1uZ8LyNCc/FTHjezoTnHUx43smE511MeC5hwvNuJjzvYcLzXiY872PC834mPJcy4fkAE54PMuG5jAnP5Ux4rmDCcyUTng8x4bmKCc/VTHiucfnv4GZHWlbTKHq/m7j8d3AV5FIUBvxuyuR3cGsJfwdHmGu7KYN+4zfQb9a5fJ6Qfrcw4Pd6Bn63MuD3Bpf77Y+2rI4GFutr7vLxLRcT7GDA7xZMvhc2En4vEObabsGg33Q20G8edvk8If3uasDvRxj43d2A35uY/F+zmQnPLUx4PsqE51YmPLcx4bmdCc8dTHjuNMQzUuPpC20LvAaNyufHmPgcSejzLiY+RxH6vJuJz9GEPu9h4nMMoc+PM/E5ltDnJ5j4fCOhz08y8Rmv4Riqz3uZ+NyT0Od9THzuRejzU0x87k3o89NMfO5D6PN+Jj73JfT5GSY+X0bo87NMfO5H6PNzTHzuT+jz80x8HkDo8wtMfB5I6POLTHweROjzS0x8Hkzo88tMfB5C6PMrTHweSujzq0x8Hkbo82tMfB5O6PPrTHweQejzG0x8Hkno85tMfM4g9PkAE58zCX1+i4nPowh9fpuJz6MJfX6Hic9jCH1+l4nPYwl9fo+Jz+MIfX6fic/jCX3+gInPEwh9/pCJzxMJff6Iic+TCH3+mInPkwl9/h8Tn6cQ+vwJE5+nEvr8KROfLyf0+TMmPk8j9PlzJj5PJ/T5CyY+zyD0+UsmPs8k9PkrJj5fQejz10x8nkXo8zdMfL6S0Odvmfh8FaHP3zHx+WpCn79n4vNsQp9/YOLzNYQ+/8jE52sJfT7IxOc5hD7/xMTnuYQ+/8zE53mEPv/CxOfrCH0+xMTn6wl9/pWJz/MJff6Nic8LCH3+nYnPCwl9/oOJzzcQ+vwnl99XEfp8mInPNxH6/BcTnxcR+vw3E59vJvT5CBOfbyH0+SgTn28l9PkfJj7fRujzv0x8Xkzo8zEmPt9O6PNxJj7fQejzCSY+30no80kmPt9F6PMpJj4vIfTZiuXh892EPkcw8fkeQp8jmfh8L6HPUUx8vo/Q52gmPt9P6HMME5+XEvocy8TnBwh9jmPi84OEPudi4vMyQp/jmfi8nNDn3Ex8XkHocwITn1cS+pyHic8PEfqcl4nPqwh9zsfE59WEPudn4vMaQp8LMPF5LaHPBZn4vI7Q50JMfF5P6HNhJj5vIPS5CBOfNxL6XJSJzw8T+lyMic+PEPpcnInPmwh9LsHE582EPpdk4vMWQp9LMfH5UUKfSzPxeSuhz2WY+LyN0OeyTHzeTuhzOSY+7yD0uTwTn3cS+pzIxOc4i87nCkx8zkXoc0UmPscT+lyJic+5CX2uzMTnBEKfqzDxOQ+hz1WZ+JyX0OdqTHzOR+hzdSY+5yf0uQYTnwsQ+lyTic8FCX2uxcTnQoQ+12bic2FCn+sw8bkIoc91mfhclNDneoQ+F4V6IsBn+U5I+Y5E8a+vfGTakv8Pyv+P5P8LUj9LPSn1ldQb8vtXfh/J+VnOV3L8yv4s8yvr7Qx1FxNWXFgJYSWFlRJWWlgZYWWFlRNWXliisArCKgqrJKyysCrCqgqrJqy6sBrCagqrJay2sDrC6gqrJ2MhzBaWJGMsLEVYqrD6wtKEpQtrIKyhsEbCGgtrIqypsGaQn+bCWghrKayVsNbC2ghrK6ydsPbCOgjrKKwT+NhFWFdh3YR1F9ZDWE9hvYT1FtZHWF9hlwnrJ6y/sAHCBgobJGywsCHChgobJmy4sCshdvL9qfJ9ovL9mvJ9k/L9i/J9hPL9fPJ9dfL9bfJ9ZvL9XvJ9V/L9T/J9SPL9QPJ9OfL9MfJ9KvL9IvJ9G/L9E/J9DPL9BHK9frl+vVzPXa5vLtf7lutfy/Wg5frIcr1guX6uXE9Wrq8q1xuV62/K9Sjl+oxyvUK5fp9cz06u7ybXO5Prf8n1sOT6UHK9JLl+kFxPR64vI9dbkeuPyPU45PoUcr0GuX6B/D2//H27/L23/P2z/D2w/H2s/L2o/P2k/D2h/H2d/L2Z/P2V/D2S/H2O/L2K/P3GKeis8nl3+fy3fB5aPh8sn5eVz4/K5ynl84XyeTv5/Jl8Hks+nySf15HPr8jnOeTzDfJ+v7z/Le8Hy/uj8n6hvH8m7yfJ+yvyfoO8/i6vR8vrs/J6pbx+J69nyes78nqH/P9f/j8s/z+U/y/J/x+knpb6UuotqT/k97H8fpLztZy/5HhW2/8BTk5KLloKBwA=", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index c661a036019..15268ac7d51 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -141,7 +141,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr index e0bb5a538b7..d5698677b46 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/cards.nr @@ -1,5 +1,5 @@ use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, constants_gen::{MAX_NOTES_PER_PAGE, MAX_READ_REQUESTS_PER_CALL}, log::emit_encrypted_log, note::{ @@ -119,13 +119,11 @@ fn filter_cards(notes: [Option; MAX_READ_REQUESTS_PER_CALL], desir impl Deck { fn new( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, ) -> Self { let set = Set { - private_context, - public_context, + context, storage_slot, note_interface: ValueNoteMethods, }; @@ -136,7 +134,7 @@ impl Deck { fn add_cards(&mut self, cards: [Card; N], owner: Field) -> [CardNote]{ let owner_key = get_public_key(owner); - let context = self.set.private_context.unwrap(); + let context = self.set.context.private.unwrap(); let mut inserted_cards = []; for card in cards { diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr index a1d8b0ce3ca..1d53056a5d1 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/src/main.nr @@ -2,7 +2,7 @@ mod cards; mod game; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, state_vars::{ map::Map, public_state::PublicState, @@ -22,35 +22,29 @@ struct Storage { impl Storage { fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, ) -> Self { Storage { collections: Map::new( - private_context, - public_context, + context, 1, - |private_context, public_context, slot| { + |context, slot| { Deck::new( - private_context, - public_context, + context, slot, ) }, ), game_decks: Map::new( - private_context, - public_context, + context, 2, - |private_context, public_context, slot| { + |context, slot| { Map::new( - private_context, - public_context, + context, slot, - |private_context, public_context, slot|{ + |context, slot|{ Deck::new( - private_context, - public_context, + context, slot, ) } @@ -58,13 +52,11 @@ impl Storage { }, ), games: Map::new( - private_context, - public_context, + context, 3, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, GameSerialisationMethods, ) @@ -90,7 +82,7 @@ contract CardGame { abi::{ Hasher, PrivateContextInputs, }, - context::PrivateContext, + context::{PrivateContext, Context}, note::{ note_header::NoteHeader, utils as note_utils, @@ -121,7 +113,7 @@ contract CardGame { fn buy_pack( seed: Field, // The randomness used to generate the cards. Passed in for now. ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let buyer = context.msg_sender(); let mut cards = get_pack_cards(seed, buyer); @@ -135,7 +127,7 @@ contract CardGame { cards_fields: [Field; 2], ) { let cards = cards_fields.map(|card_field| Card::from_field(card_field)); - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let player = context.msg_sender(); let mut collection = storage.collections.at(player); @@ -153,7 +145,7 @@ contract CardGame { player: Field, deck_strength: u32, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); @@ -164,7 +156,7 @@ contract CardGame { #[aztec(public)] fn start_game(game: u32) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); @@ -177,7 +169,7 @@ contract CardGame { game: u32, card: Card, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let player = context.msg_sender(); let mut game_deck = storage.game_decks.at(game as Field).at(player); @@ -189,7 +181,7 @@ contract CardGame { #[aztec(public)] internal fn on_card_played(game: u32, player: Field, card_as_field: Field) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); @@ -207,7 +199,7 @@ contract CardGame { game: u32, cards_fields: [Field; PLAYABLE_CARDS], ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let player = context.msg_sender(); let cards = cards_fields.map(|card_field| Card::from_field(card_field)); @@ -224,7 +216,7 @@ contract CardGame { #[aztec(public)] internal fn on_cards_claimed(game: u32, player: Field, cards_hash: Field) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let game_storage = storage.games.at(game as Field); let mut game_data = game_storage.read(); @@ -243,21 +235,21 @@ contract CardGame { } unconstrained fn view_collection_cards(owner: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let collection = storage.collections.at(owner); collection.view_cards(offset) } unconstrained fn view_game_cards(game: u32, player: Field, offset: u32) -> [Option; MAX_NOTES_PER_PAGE] { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let game_deck = storage.game_decks.at(game as Field).at(player); game_deck.view_cards(offset) } unconstrained fn view_game(game: u32) -> Game { - Storage::init(Option::none(), Option::none()).games.at(game as Field).read() + Storage::init(Context::none()).games.at(game as Field).read() } // Computes note hash and nullifier. diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr index d661347201d..98641d7054d 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr @@ -4,7 +4,7 @@ contract Child { use dep::aztec::{ abi::CallContext, - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, oracle::{ logs::emit_unencrypted_log, compute_selector::compute_selector, @@ -18,14 +18,10 @@ contract Child { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { current_value: PublicState::new( - private_context, - public_context, + context, 1, FieldSerialisationMethods, ), @@ -69,7 +65,7 @@ contract Child { // Sets `current_value` to `new_value` #[aztec(public)] fn pubSetValue(new_value: Field) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.current_value.write(new_value); let _hash = emit_unencrypted_log(new_value); @@ -79,7 +75,7 @@ contract Child { // Increments `current_value` by `new_value` #[aztec(public)] fn pubIncValue(new_value: Field) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); let _hash = emit_unencrypted_log(new_value); @@ -90,7 +86,7 @@ contract Child { // Increments `current_value` by `new_value`. Can only be called from this contract. #[aztec(public)] fn pubIncValueInternal(new_value: Field) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); check_sender(inputs.call_context); let old_value = storage.current_value.read(); storage.current_value.write(old_value + new_value); @@ -104,14 +100,14 @@ contract Child { let pubSetValueSelector = compute_selector("pubSetValue(Field)"); let _ret = context.call_public_function(context.this_address(), pubSetValueSelector, [10]); - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.current_value.write(20); let _hash = emit_unencrypted_log(20); } #[aztec(public)] fn setValueTwiceWithNestedLast() { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.current_value.write(20); let _hash = emit_unencrypted_log(20); diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr index a47de701dcd..cd6dc5f9b29 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/src/main.nr @@ -6,7 +6,7 @@ mod types; contract DocsExample { use dep::std::option::Option; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, state_vars::{ immutable_singleton::ImmutableSingleton, map::Map, public_state::PublicState, set::Set, singleton::Singleton, @@ -44,33 +44,28 @@ contract DocsExample { // docs:start:state_vars-Set // docs:start:state_vars-MapSingleton impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { // highlight-next-line:state_vars-PublicState - locked: PublicState::new(private_context, public_context, 1, BoolSerialisationMethods), + locked: PublicState::new(context, 1, BoolSerialisationMethods), // highlight-next-line:state_vars-PublicStateCustomStruct queen: PublicState::new( - private_context, - public_context, + context, 2, QueenSerialisationMethods, ), // highlight-next-line:state_vars-ImmutableSingleton - game_rules: ImmutableSingleton::new(private_context, 3, RulesNoteMethods), + game_rules: ImmutableSingleton::new(context, 3, RulesNoteMethods), // highlight-next-line:state_vars-Singleton - legendary_card: Singleton::new(private_context, public_context, 4, CardNoteMethods), + legendary_card: Singleton::new(context, 4, CardNoteMethods), // highlight-next-line:state_vars-Set - cards: Set::new(private_context, public_context, 5, CardNoteMethods), + cards: Set::new(context, 5, CardNoteMethods), // highlight-next-line:state_vars-MapSingleton profiles: Map::new( - private_context, - public_context, + context, 6, - |private_context, public_context, slot| { - Singleton::new(private_context, public_context, slot, ProfileNoteMethods) + |context, slot| { + Singleton::new(context, slot, ProfileNoteMethods) }, ), } @@ -93,7 +88,7 @@ contract DocsExample { max_points: u8, legendary_card_secret: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let mut game_rules = RulesNote::new(min_points, max_points); actions::init_game_rules(storage.game_rules, &mut game_rules); @@ -106,7 +101,7 @@ contract DocsExample { #[aztec(public)] fn lock() { // highlight-next-line:storage-init - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.locked.write(true); } // docs:end:storage-init @@ -114,7 +109,7 @@ contract DocsExample { // docs:start:functions-OpenFunction #[aztec(public)] fn unlock() { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); actions::unlock(storage.locked); } // docs:end:functions-OpenFunction @@ -124,7 +119,7 @@ contract DocsExample { account: Field, points: u8, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let new_queen = Queen { account, points }; @@ -136,7 +131,7 @@ contract DocsExample { // docs:start:state_vars-PublicStateWriteBeforeCall #[aztec(public)] fn replace_queen_unsafe() { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let account = context.msg_sender(); let points = actions::get_total_points(storage.cards, account, 0); @@ -155,7 +150,7 @@ contract DocsExample { // docs:start:functions-SecretFunction #[aztec(private)] fn add_common_cards(secrets: [Field; 4]) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); for i in 0..secrets.len() as u8 { let mut card = CardNote::new(0, secrets[i], 0); @@ -169,7 +164,7 @@ contract DocsExample { new_points: u8, new_secret: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner = inputs.call_context.msg_sender; let mut updated_card = CardNote::new(new_points, new_secret, owner); @@ -181,7 +176,7 @@ contract DocsExample { #[aztec(private)] fn become_queen() { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let legendary_card = actions::get_legendary_card(storage.legendary_card); @@ -205,7 +200,7 @@ contract DocsExample { account: Field, offset: u32, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let mut total_points = 0; let options = create_account_card_getter_options(account, offset); @@ -224,7 +219,7 @@ contract DocsExample { // docs:start:state_vars-check_return_notes #[aztec(private)] fn discard_largest_card() { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let account = context.msg_sender(); let options = create_largest_account_card_getter_options(account); @@ -238,7 +233,7 @@ contract DocsExample { // docs:start:functions-UncontrainedFunction unconstrained fn get_total_points(account: Field) -> u8 { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); actions::get_total_points(storage.cards, account, 0) } // docs:end:functions-UncontrainedFunction diff --git a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr index 37901c0a260..a4fdd1951ac 100644 --- a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/src/main.nr @@ -2,7 +2,7 @@ contract EasyPrivateToken { use dep::std::option::Option; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, note::{ note_header::NoteHeader, utils as note_utils, @@ -23,17 +23,13 @@ contract EasyPrivateToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, - |private_context, public_context, slot| { - EasyPrivateUint::new(private_context, public_context, slot) + |context, slot| { + EasyPrivateUint::new(context, slot) }, ), } @@ -48,7 +44,7 @@ contract EasyPrivateToken { initial_supply: u120, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let balances = storage.balances; balances.at(owner).add(initial_supply, owner); @@ -60,7 +56,7 @@ contract EasyPrivateToken { amount: u120, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let balances = storage.balances; balances.at(owner).add(amount, owner); @@ -73,7 +69,7 @@ contract EasyPrivateToken { sender: Field, recipient: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let balances = storage.balances; balances.at(sender).sub(amount, sender); @@ -84,7 +80,7 @@ contract EasyPrivateToken { unconstrained fn getBalance( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let balances = storage.balances; // Return the sum of all notes in the set. diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr index b7739942369..1c6c2e17dc6 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/main.nr @@ -8,7 +8,7 @@ contract EcdsaAccount { use dep::aztec::{ abi::CallContext, constants_gen::GENERATOR_INDEX__SIGNATURE_PAYLOAD, - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, entrypoint::{EntrypointPayload, ENTRYPOINT_PAYLOAD_SIZE}, log::emit_encrypted_log, note::{ @@ -28,9 +28,9 @@ contract EcdsaAccount { } impl Storage { - fn init(private_context: Option<&mut PrivateContext>, _: Option<&mut PublicContext>) -> pub Self { + fn init(context: Context) -> pub Self { Storage { - public_key: ImmutableSingleton::new(private_context, 1, EcdsaPublicKeyNoteInterface), + public_key: ImmutableSingleton::new(context, 1, EcdsaPublicKeyNoteInterface), } } } @@ -42,7 +42,7 @@ contract EcdsaAccount { signature: pub [u8;64], ) { // Load public key from storage - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let public_key = storage.public_key.get_note(); // Verify payload signature using Ethereum's signing scheme @@ -69,7 +69,7 @@ contract EcdsaAccount { signing_pub_key_x: pub [u8;32], signing_pub_key_y: pub [u8;32], ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let this = context.this_address(); let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr index af93d9e74c2..81131fae5e3 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/main.nr @@ -6,7 +6,7 @@ contract Escrow { use dep::std::option::Option; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, log::emit_encrypted_log, note::{ note_getter_options::NoteGetterOptions, @@ -30,12 +30,9 @@ contract Escrow { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { - owners: Set::new(private_context, public_context, 1, AddressNoteMethods), + owners: Set::new(context, 1, AddressNoteMethods), } } } @@ -47,7 +44,7 @@ contract Escrow { ) { let this = context.this_address(); - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let mut note = AddressNote::new(owner, this); storage.owners.insert(&mut note); emit_encrypted_log( @@ -68,7 +65,7 @@ contract Escrow { ) { let this = context.this_address(); let sender = context.msg_sender(); - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // We don't remove note from the owners set. If a note exists, the owner and recipient are legit. let options = NoteGetterOptions::new().select(0, sender).select(1, this).set_limit(1); diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr index dc887d2ea04..3683aafe96d 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -14,7 +14,7 @@ contract Lending { use dep::safe_math::SafeU120; use dep::std::option::Option; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, oracle::compute_selector::compute_selector, state_vars::{ map::Map, @@ -40,57 +40,46 @@ contract Lending { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { collateral_asset: PublicState::new( - private_context, - public_context, + context, 1, FieldSerialisationMethods, ), stable_coin: PublicState::new( - private_context, - public_context, + context, 2, FieldSerialisationMethods, ), assets: Map::new( - private_context, - public_context, + context, 3, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, AssetSerialisationMethods, ) }, ), collateral: Map::new( - private_context, - public_context, + context, 4, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, FieldSerialisationMethods, ) }, ), static_debt: Map::new( - private_context, - public_context, + context, 5, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, FieldSerialisationMethods, ) @@ -118,7 +107,7 @@ contract Lending { collateral_asset: Field, stable_coin: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let asset_loc = storage.assets.at(0); let asset = asset_loc.read(); @@ -142,7 +131,7 @@ contract Lending { // Create a position. #[aztec(public)] fn update_accumulator() -> Asset { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let asset_loc = storage.assets.at(0); let mut asset = asset_loc.read(); @@ -202,7 +191,7 @@ contract Lending { collateral_asset: Field, ) -> Field { let _asset = Lending::at(context.this_address()).update_accumulator(context); - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let coll_asset = storage.collateral_asset.read(); assert(coll_asset == collateral_asset); @@ -245,7 +234,7 @@ contract Lending { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -300,7 +289,7 @@ contract Lending { let asset = Lending::at(context.this_address()).update_accumulator(context); let price = PriceFeed::at(asset.oracle_address).get_price(context); - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); // Fetch collateral and static_debt, compute health of current position let collateral = storage.collateral.at(owner).read() as u120; @@ -355,7 +344,7 @@ contract Lending { stable_coin: Field, ) { let asset = Lending::at(context.this_address()).update_accumulator(context); - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); // To ensure that private is using the correct token. assert(stable_coin == storage.stable_coin.read()); @@ -371,14 +360,14 @@ contract Lending { unconstrained fn get_asset( assetId: Field, ) -> Asset { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.assets.at(assetId).read() } unconstrained fn get_position( owner: Field, ) -> Position { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); let asset = storage.assets.at(0).read(); @@ -387,7 +376,7 @@ contract Lending { } unconstrained fn get_assets() -> [Field; 2] { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); [storage.collateral_asset.read(), storage.stable_coin.read()] } } diff --git a/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr index b7a14525a4f..0f140b06731 100644 --- a/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/native_token_contract/src/main.nr @@ -14,7 +14,7 @@ contract NativeToken { use dep::std; use dep::aztec::{ constants_gen::GENERATOR_INDEX__SIGNATURE_PAYLOAD, - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, note::{ note_header::NoteHeader, utils as note_utils, @@ -52,52 +52,42 @@ contract NativeToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, // Storage slot - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), total_supply: PublicState::new( - private_context, - public_context, + context, 2, FieldSerialisationMethods, ), - pending_shields: Set::new(private_context, public_context, 3, TransparentNoteMethods), + pending_shields: Set::new(context, 3, TransparentNoteMethods), public_balances: Map::new( - private_context, - public_context, + context, 4, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, FieldSerialisationMethods, ) }, ), public_allowances: Map::new( - private_context, - public_context, + context, 5, - |private_context, public_context, s1| { + |context, s1| { Map::new( - private_context, - public_context, + context, s1, - |private_context, public_context, s2| { + |context, s2| { PublicState::new( - private_context, - public_context, + context, s2, FieldSerialisationMethods, ) @@ -114,7 +104,7 @@ contract NativeToken { initial_supply: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let balance = storage.balances.at(owner); increment(balance, initial_supply, owner); @@ -125,7 +115,7 @@ contract NativeToken { to: Field, amount: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let new_balance = storage.public_balances.at(to).read() + amount; storage.public_balances.at(to).write(new_balance); storage.total_supply.write(storage.total_supply.read() + amount); @@ -139,7 +129,7 @@ contract NativeToken { amount: Field, secret_hash: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let pending_shields = storage.pending_shields; let mut note = TransparentNote::new(amount, secret_hash); @@ -162,7 +152,7 @@ contract NativeToken { secret: Field, canceller: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let content_hash = get_mint_content_hash(amount, owner, canceller); @@ -183,7 +173,7 @@ contract NativeToken { recipient: Field, // ethereum address in the field callerOnL1: Field, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender_balance = storage.balances.at(sender); decrement(sender_balance, amount, sender); @@ -204,7 +194,7 @@ contract NativeToken { secret: Field, canceller: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let content_hash = get_mint_content_hash(amount, owner_address, canceller); @@ -228,7 +218,7 @@ contract NativeToken { recipient: Field, callerOnL1: Field, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let sender = context.msg_sender(); @@ -248,7 +238,7 @@ contract NativeToken { spender: Field, allowance: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.public_allowances.at(context.msg_sender()).at(spender).write(allowance); } @@ -257,7 +247,7 @@ contract NativeToken { to: Field, amount: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); // Decrease user's balance. let sender = context.msg_sender(); @@ -281,7 +271,7 @@ contract NativeToken { to: Field, amount: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); // Decrease allowance let allowance = storage.public_allowances.at(from).at(context.msg_sender()); @@ -310,7 +300,7 @@ contract NativeToken { to: Field, amount: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Gets the set of sender's notes and picks 2 of those. let sender_balance = storage.balances.at(from); @@ -326,7 +316,7 @@ contract NativeToken { amount: Field, secretHash: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let pending_shields = storage.pending_shields; @@ -355,7 +345,7 @@ contract NativeToken { secret: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let pending_shields = storage.pending_shields; let public_note = TransparentNote::new_from_secret(amount, secret); @@ -374,7 +364,7 @@ contract NativeToken { to: Field, amount: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // If `from != sender` then we use the is_valid function to check that the message is approved. if (from != context.msg_sender()) { @@ -411,7 +401,7 @@ contract NativeToken { amount: Field, to: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let to_balance = storage.public_balances.at(to); let current_balance = to_balance.read(); @@ -422,7 +412,7 @@ contract NativeToken { unconstrained fn balance_of( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let owner_balance = storage.balances.at(owner); balance_utils::get_balance(owner_balance) @@ -441,14 +431,14 @@ contract NativeToken { } unconstrained fn total_supply() -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.total_supply.read() } unconstrained fn public_balance_of( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.public_balances.at(owner).read() } @@ -456,7 +446,7 @@ contract NativeToken { owner: Field, spender: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.public_allowances.at(owner).at(spender).read() } } diff --git a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr index 8c585b078d3..c19f4ca5a3c 100644 --- a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr @@ -33,7 +33,7 @@ contract NonNativeToken { use crate::hash::{get_mint_content_hash, get_withdraw_content_hash}; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, note::{ note_header::NoteHeader, utils as note_utils, @@ -52,28 +52,22 @@ contract NonNativeToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, // Storage slot - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), - pending_shields: Set::new(private_context, public_context, 2, TransparentNoteMethods), + pending_shields: Set::new(context, 2, TransparentNoteMethods), public_balances: Map::new( - private_context, - public_context, + context, 3, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, FieldSerialisationMethods, ) @@ -88,7 +82,7 @@ contract NonNativeToken { initial_supply: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let balance = storage.balances.at(owner); increment(balance, initial_supply, owner); @@ -106,7 +100,7 @@ contract NonNativeToken { secret: Field, canceller: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let content_hash = get_mint_content_hash(amount, owner, canceller); @@ -127,7 +121,7 @@ contract NonNativeToken { recipient: Field, // ethereum address in the field callerOnL1: Field, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender_balance = storage.balances.at(sender); decrement(sender_balance, amount, sender); @@ -148,7 +142,7 @@ contract NonNativeToken { secret: Field, canceller: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let content_hash = get_mint_content_hash(amount, owner_address, canceller); @@ -173,7 +167,7 @@ contract NonNativeToken { recipient: Field, callerOnL1: Field, // ethereum address that can call this function on the L1 portal (0x0 if anyone can call) ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let sender = context.msg_sender(); @@ -201,7 +195,7 @@ contract NonNativeToken { amount: Field, recipient: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender = context.msg_sender(); // Gets the set of sender's notes and picks 2 of those. @@ -218,7 +212,7 @@ contract NonNativeToken { amount: Field, secretHash: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let public_balances = storage.public_balances; let pending_shields = storage.pending_shields; @@ -247,7 +241,7 @@ contract NonNativeToken { secret: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let pending_shields = storage.pending_shields; let public_note = TransparentNote::new_from_secret(amount, secret); @@ -265,7 +259,7 @@ contract NonNativeToken { amount: Field, recipient: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner = context.msg_sender(); // Remove user balance @@ -284,7 +278,7 @@ contract NonNativeToken { amount: Field, recipient: Field, ) { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let recipient_balance = storage.public_balances.at(recipient); let current_balance = recipient_balance.read(); @@ -295,7 +289,7 @@ contract NonNativeToken { unconstrained fn getBalance( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); let owner_balance = storage.balances.at(owner); balance_utils::get_balance(owner_balance) @@ -316,7 +310,7 @@ contract NonNativeToken { unconstrained fn publicBalanceOf( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.public_balances.at(owner).read() } } diff --git a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr index cd9110b7629..85525a26448 100644 --- a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/src/main.nr @@ -12,7 +12,7 @@ contract PendingCommitments { }; use dep::aztec::{ constants_gen::ARGS_LENGTH, - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, log::emit_encrypted_log, note::{ note_getter::NoteGetterOptions, @@ -28,17 +28,13 @@ contract PendingCommitments { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, // Storage slot - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), } @@ -59,7 +55,7 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -93,7 +89,7 @@ contract PendingCommitments { amount: Field, owner: Field, ) -> Field { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner_balance = storage.balances.at(owner); @@ -131,7 +127,7 @@ contract PendingCommitments { amount: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner_balance = storage.balances.at(owner); let mut note = ValueNote::new(amount, owner); @@ -153,7 +149,7 @@ contract PendingCommitments { expected_value: Field, owner: Field, ) -> Field { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner_balance = storage.balances.at(owner); @@ -172,7 +168,7 @@ contract PendingCommitments { fn get_note_zero_balance( owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let owner_balance = storage.balances.at(owner); diff --git a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/main.nr index 860350460b7..706c734d602 100644 --- a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/main.nr @@ -9,7 +9,7 @@ contract PokeableToken { value_note::{VALUE_NOTE_LEN, ValueNoteMethods, ValueNote}, }; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, log::emit_encrypted_log, note::{ note_getter::NoteGetterOptions, @@ -28,19 +28,15 @@ contract PokeableToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { - sender: ImmutableSingleton::new(private_context, 1, AddressNoteMethods), - recipient: ImmutableSingleton::new(private_context, 2, AddressNoteMethods), + sender: ImmutableSingleton::new(context, 1, AddressNoteMethods), + recipient: ImmutableSingleton::new(context, 2, AddressNoteMethods), balances: Map::new( - private_context, - public_context, + context, 3, - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), } @@ -54,7 +50,7 @@ contract PokeableToken { sender: Field, recipient: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let mut sender_note = AddressNote::new(sender); let mut recipient_note = AddressNote::new(recipient); @@ -73,7 +69,7 @@ contract PokeableToken { sender: Field, recipient: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // TODO: This check is not satisfying constraints // let mut sender_note = AddressNote::new(sender); @@ -111,7 +107,7 @@ contract PokeableToken { unconstrained fn getBalance( sender: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); // Get the set of notes owned by the user. let sender_balance = storage.balances.at(sender); diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr index 78441d762f2..6adea42406b 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/src/main.nr @@ -3,7 +3,7 @@ mod asset; contract PriceFeed { use dep::std::option::Option; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, state_vars::{ map::Map, public_state::PublicState, @@ -17,19 +17,14 @@ contract PriceFeed { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { assets: Map::new( - private_context, - public_context, + context, 1, - |private_context, public_context, slot| { + |context, slot| { PublicState::new( - private_context, - public_context, + context, slot, AssetSerialisationMethods, ) @@ -47,7 +42,7 @@ contract PriceFeed { asset_id: Field, price: u120, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let asset = storage.assets.at(asset_id); asset.write(Asset {price: price}); @@ -58,7 +53,7 @@ contract PriceFeed { fn get_price( asset_id: Field, ) -> Asset { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); storage.assets.at(asset_id).read() } @@ -66,7 +61,7 @@ contract PriceFeed { unconstrained fn fetch_price( assetId: Field, ) -> Asset { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.assets.at(assetId).read() } } diff --git a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/main.nr index 359a46bdca9..da67fc0bb4f 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/src/main.nr @@ -10,7 +10,7 @@ contract PrivateTokenAirdrop { value_note::{VALUE_NOTE_LEN, ValueNote, ValueNoteMethods}, }; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, state_vars::{map::Map, set::Set}, note::{ note_getter_options::NoteGetterOptions, @@ -30,20 +30,16 @@ contract PrivateTokenAirdrop { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, // Storage slot - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), - claims: Set::new(private_context, public_context, 2, ClaimNoteMethods), + claims: Set::new(context, 2, ClaimNoteMethods), } } } @@ -54,7 +50,7 @@ contract PrivateTokenAirdrop { initial_supply: Field, owner: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. let owner_balance = storage.balances.at(owner); @@ -69,7 +65,7 @@ contract PrivateTokenAirdrop { amount: Field, owner: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. let owner_balance = storage.balances.at(owner); @@ -83,7 +79,7 @@ contract PrivateTokenAirdrop { amount: Field, owner: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let msg_sender = context.msg_sender(); let this_address = context.this_address(); @@ -112,7 +108,7 @@ contract PrivateTokenAirdrop { amount: Field, recipient: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender = context.msg_sender(); let sender_balance = storage.balances.at(sender); @@ -142,7 +138,7 @@ contract PrivateTokenAirdrop { amounts: [Field; 2], secrets: [Field; 2], ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender = context.msg_sender(); // Pick from the set of sender's notes to spend amount. @@ -166,7 +162,7 @@ contract PrivateTokenAirdrop { secret: Field, owner: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Remove the claim note if it exists in the set. let note = ClaimNote::new(amount, secret); @@ -187,7 +183,7 @@ contract PrivateTokenAirdrop { recipients: [Field; 3], spend_note_offset: u32, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Gets the set of sender's notes and picks 4 of those based on the offset. // Spends the first of those 4 notes. @@ -228,7 +224,7 @@ contract PrivateTokenAirdrop { unconstrained fn getBalance( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); // Get the set of notes owned by the user. let owner_balance = storage.balances.at(owner); diff --git a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr index f3aae3c8dcc..8395bbd1ea0 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr @@ -6,7 +6,7 @@ contract PrivateToken { value_note::{VALUE_NOTE_LEN, ValueNote, ValueNoteMethods}, }; use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, note::{ note_header::NoteHeader, utils as note_utils, @@ -20,17 +20,13 @@ contract PrivateToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, // Storage slot - |private_context, public_context, slot| { - Set::new(private_context, public_context, slot, ValueNoteMethods) + |context, slot| { + Set::new(context, slot, ValueNoteMethods) }, ), } @@ -44,7 +40,7 @@ contract PrivateToken { initial_supply: Field, owner: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. let owner_balance = storage.balances.at(owner); if (initial_supply != 0) { @@ -60,7 +56,7 @@ contract PrivateToken { amount: Field, owner: Field ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. let owner_balance = storage.balances.at(owner); @@ -75,7 +71,7 @@ contract PrivateToken { amount: Field, recipient: Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let sender = context.msg_sender(); // Pick from the set of sender's notes to spend amount. @@ -93,7 +89,7 @@ contract PrivateToken { unconstrained fn getBalance( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); // Get the set of notes owned by the user. let owner_balance = storage.balances.at(owner); diff --git a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr index e94ccf1b7e0..f32f3ec07bf 100644 --- a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr @@ -6,7 +6,7 @@ contract PublicToken { // docs:end:unencrypted_import use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, state_vars::{ map::Map, public_state::PublicState, @@ -21,22 +21,13 @@ contract PublicToken { } impl Storage { - fn init( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, - ) -> pub Self { + fn init(context: Context) -> pub Self { Storage { balances: Map::new( - private_context, - public_context, + context, 1, - |private_context, public_context, slot| { - PublicState::new( - private_context, - public_context, - slot, - FieldSerialisationMethods, - ) + |context, slot| { + PublicState::new(context, slot, FieldSerialisationMethods) }, ), } @@ -54,7 +45,7 @@ contract PublicToken { recipient: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let recipient_balance = storage.balances.at(recipient); let new_amount = recipient_balance.read() + amount; // docs:start:unencrypted_log @@ -72,7 +63,7 @@ contract PublicToken { amount: Field, recipient: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::some(&mut context)); + let storage = Storage::init(Context::public(&mut context)); let sender = context.msg_sender(); let sender_balance = storage.balances.at(sender); @@ -101,7 +92,7 @@ contract PublicToken { unconstrained fn publicBalanceOf( owner: Field, ) -> Field { - let storage = Storage::init(Option::none(), Option::none()); + let storage = Storage::init(Context::none()); storage.balances.at(owner).read() } } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr index 65aebff95c2..0b7e926224e 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/main.nr @@ -7,7 +7,7 @@ contract SchnorrAccount { use dep::std::option::Option; use dep::aztec::{ constants_gen::GENERATOR_INDEX__SIGNATURE_PAYLOAD, - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, entrypoint::{ENTRYPOINT_PAYLOAD_SIZE, EntrypointPayload}, log::emit_encrypted_log, note::{ @@ -25,9 +25,9 @@ contract SchnorrAccount { } impl Storage { - fn init(private_context: Option<&mut PrivateContext>, _: Option<&mut PublicContext>) -> pub Self { + fn init(context: Context) -> pub Self { Storage { - signing_public_key: ImmutableSingleton::new(private_context, 1, PublicKeyNoteMethods), + signing_public_key: ImmutableSingleton::new(context, 1, PublicKeyNoteMethods), } } } @@ -39,7 +39,7 @@ contract SchnorrAccount { signature: pub [u8;64], // schnorr signature of the payload hash ) { // Load public key from storage - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let public_key = storage.signing_public_key.get_note(); // Verify payload signature @@ -68,7 +68,7 @@ contract SchnorrAccount { signing_pub_key_x: pub Field, signing_pub_key_y: pub Field, ) { - let storage = Storage::init(Option::some(&mut context), Option::none()); + let storage = Storage::init(Context::private(&mut context)); let this = context.this_address(); let mut pub_key_note = PublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this); diff --git a/yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr b/yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr index 0c6761ec0fb..62f6e85d6e0 100644 --- a/yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr +++ b/yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr @@ -1,5 +1,5 @@ use dep::aztec::{ - context::{PrivateContext, PublicContext}, + context::{PrivateContext, PublicContext, Context}, log::emit_encrypted_log, note::note_getter_options::NoteGetterOptions, oracle::get_public_key::get_public_key, @@ -13,26 +13,24 @@ use dep::value_note::{ }; struct EasyPrivateUint { - maybe_context: Option<&mut PrivateContext>, + context: Context, set: Set, storage_slot: Field, } impl EasyPrivateUint { fn new( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, ) -> Self { assert(storage_slot != 0, "Storage slot 0 not allowed. Storage slots must start from 1."); let set = Set { - private_context, - public_context, + context, storage_slot, note_interface: ValueNoteMethods, }; EasyPrivateUint { - maybe_context: private_context, + context, set, storage_slot, } @@ -48,7 +46,7 @@ impl EasyPrivateUint { // Emit the newly created encrypted note preimages via oracle calls. let owner_key = get_public_key(owner); - let context = self.maybe_context.unwrap(); + let context = self.context.private.unwrap(); emit_encrypted_log( context, (*context).this_address(), @@ -94,7 +92,7 @@ impl EasyPrivateUint { let owner_key = get_public_key(owner); - let context = self.maybe_context.unwrap(); + let context = self.context.private.unwrap(); emit_encrypted_log( context, (*context).this_address(), diff --git a/yarn-project/noir-libs/noir-aztec/src/context.nr b/yarn-project/noir-libs/noir-aztec/src/context.nr index f28b1e3fa9b..7043ec87b76 100644 --- a/yarn-project/noir-libs/noir-aztec/src/context.nr +++ b/yarn-project/noir-libs/noir-aztec/src/context.nr @@ -47,6 +47,7 @@ use crate::oracle::{ context::get_portal_address, }; +use dep::std::option::Option; // When finished, one can call .finish() to convert back to the abi struct PrivateContext { @@ -548,4 +549,32 @@ impl PublicContext { ) } +} + +struct Context { + private: Option<&mut PrivateContext>, + public: Option<&mut PublicContext>, +} + +impl Context { + fn private(context: &mut PrivateContext) -> Context { + Context { + private: Option::some(context), + public: Option::none() + } + } + + fn public(context: &mut PublicContext) -> Context { + Context { + public: Option::some(context), + private: Option::none() + } + } + + fn none() -> Context { + Context { + public: Option::none(), + private: Option::none() + } + } } \ No newline at end of file diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/immutable_singleton.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/immutable_singleton.nr index 1d135f03137..f419e7a0c32 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/immutable_singleton.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/immutable_singleton.nr @@ -1,5 +1,5 @@ use crate::constants_gen::{EMPTY_NULLIFIED_COMMITMENT, GENERATOR_INDEX__INITIALISATION_NULLIFIER}; -use crate::context::PrivateContext; +use crate::context::{PrivateContext, Context}; use crate::note::{ lifecycle::create_note, note_getter::{get_note, view_notes}, @@ -11,14 +11,14 @@ use dep::std::hash::pedersen_with_separator; use dep::std::option::Option; struct ImmutableSingleton { - context: Option<&mut PrivateContext>, + context: Context, storage_slot: Field, note_interface: NoteInterface, } impl ImmutableSingleton { fn new( - context: Option<&mut PrivateContext>, + context: Context, storage_slot: Field, note_interface: NoteInterface, ) -> Self { @@ -38,12 +38,12 @@ impl ImmutableSingleton { fn initialise(self, note: &mut Note) { // Nullify the storage slot. let nullifier = self.compute_initialisation_nullifier(); - self.context + self.context.private .unwrap() .push_new_nullifier(nullifier, EMPTY_NULLIFIED_COMMITMENT); create_note( - self.context.unwrap(), + self.context.private.unwrap(), self.storage_slot, note, self.note_interface, @@ -59,7 +59,7 @@ impl ImmutableSingleton { fn get_note(self) -> Note { let storage_slot = self.storage_slot; - get_note(self.context.unwrap(), storage_slot, self.note_interface) + get_note(self.context.private.unwrap(), storage_slot, self.note_interface) } unconstrained fn view_note(self) -> Note { diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/map.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/map.nr index 0adb1ea0303..10df31dd31a 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/map.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/map.nr @@ -1,28 +1,21 @@ -use crate::context::{PrivateContext, PublicContext}; +use crate::context::{PrivateContext, PublicContext, Context}; use dep::std::option::Option; struct Map { - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, - state_var_constructor: fn(Option<&mut PrivateContext>, Option<&mut PublicContext>, Field) -> V, + state_var_constructor: fn(Context, Field) -> V, } impl Map { fn new( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, - state_var_constructor: fn( - Option<&mut PrivateContext>, - Option<&mut PublicContext>, - Field, - ) -> V, + state_var_constructor: fn(Context, Field) -> V, ) -> Map { assert(storage_slot != 0, "Storage slot 0 not allowed. Storage slots must start from 1."); Map { - private_context, - public_context, + context, storage_slot, state_var_constructor, } @@ -33,10 +26,6 @@ impl Map { let derived_storage_slot = dep::std::hash::pedersen([self.storage_slot, key])[0]; let state_var_constructor = self.state_var_constructor; - state_var_constructor( - self.private_context, - self.public_context, - derived_storage_slot, - ) + state_var_constructor(self.context, derived_storage_slot) } } diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/public_state.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/public_state.nr index ee10446a7fd..5216ae906f3 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/public_state.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/public_state.nr @@ -1,4 +1,4 @@ -use crate::context::{PrivateContext, PublicContext}; +use crate::context::{Context}; use crate::oracle::storage::storage_read; use crate::oracle::storage::storage_write; use crate::types::type_serialisation::TypeSerialisationInterface; @@ -12,8 +12,7 @@ struct PublicState { impl PublicState { fn new( // Note: Passing the contexts to new(...) just to have an interface compatible with a Map. - _: Option<&mut PrivateContext>, - _: Option<&mut PublicContext>, + _: Context, storage_slot: Field, serialisation_methods: TypeSerialisationInterface, ) -> Self { diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr index 5012ab86e7e..69685deeee4 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/set.nr @@ -1,7 +1,7 @@ use dep::std::option::Option; use crate::abi::PublicContextInputs; use crate::constants_gen::{MAX_NOTES_PER_PAGE, MAX_READ_REQUESTS_PER_CALL}; -use crate::context::{PrivateContext, PublicContext}; +use crate::context::{PrivateContext, PublicContext, Context}; use crate::note::{ lifecycle::{create_note, create_note_hash_from_public, destroy_note}, note_getter::{ensure_note_exists, ensure_note_hash_exists, get_notes, view_notes}, @@ -12,23 +12,20 @@ use crate::note::{ }; struct Set { - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, note_interface: NoteInterface, } impl Set { fn new( - private_context: Option<&mut PrivateContext>, - public_context: Option<&mut PublicContext>, + context: Context, storage_slot: Field, note_interface: NoteInterface, ) -> Self { assert(storage_slot != 0, "Storage slot 0 not allowed. Storage slots must start from 1."); Set { - private_context, - public_context, + context, storage_slot, note_interface, } @@ -36,7 +33,7 @@ impl Set { fn insert(self, note: &mut Note) { create_note( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, note, self.note_interface, @@ -45,7 +42,7 @@ impl Set { fn insert_from_public(self, note: &mut Note) { create_note_hash_from_public( - self.public_context.unwrap(), + self.context.public.unwrap(), self.storage_slot, note, self.note_interface, @@ -57,13 +54,13 @@ impl Set { fn assert_contains_note_and_remove(self, note: Note) { let mut note_with_header = note; ensure_note_exists( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, self.note_interface, &mut note_with_header, ); destroy_note( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, note_with_header, self.note_interface, @@ -77,7 +74,7 @@ impl Set { let mut note_with_header = note; // Modifies note with the header which is necessary for the next step (remove). ensure_note_hash_exists( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, self.note_interface, &mut note_with_header, @@ -94,7 +91,7 @@ impl Set { header.nonce = 1; set_header(&mut note_with_header, header); destroy_note( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, note_with_header, self.note_interface, @@ -103,12 +100,12 @@ impl Set { fn remove(self, note: Note) { let note_hash = compute_note_hash_for_read_or_nullify(self.note_interface, note); - let read_requests = self.private_context.unwrap_unchecked().read_requests; + let read_requests = self.context.private.unwrap_unchecked().read_requests; let has_been_read = read_requests.any(|r| r == note_hash); assert(has_been_read, "Can only remove a note that has been read from the set."); destroy_note( - self.private_context.unwrap(), + self.context.private.unwrap(), self.storage_slot, note, self.note_interface, @@ -121,7 +118,7 @@ impl Set { ) -> [Option; MAX_READ_REQUESTS_PER_CALL] { let storage_slot = self.storage_slot; let opt_notes = get_notes( - self.private_context.unwrap(), + self.context.private.unwrap(), storage_slot, self.note_interface, options, diff --git a/yarn-project/noir-libs/noir-aztec/src/state_vars/singleton.nr b/yarn-project/noir-libs/noir-aztec/src/state_vars/singleton.nr index e386107f78b..e1033604995 100644 --- a/yarn-project/noir-libs/noir-aztec/src/state_vars/singleton.nr +++ b/yarn-project/noir-libs/noir-aztec/src/state_vars/singleton.nr @@ -1,5 +1,5 @@ use crate::constants_gen::{EMPTY_NULLIFIED_COMMITMENT, GENERATOR_INDEX__INITIALISATION_NULLIFIER}; -use crate::context::{PrivateContext, PublicContext}; +use crate::context::{PrivateContext, PublicContext, Context}; use crate::note::{ lifecycle::{create_note, destroy_note}, note_getter::{get_note, view_notes}, @@ -18,14 +18,13 @@ struct Singleton { impl Singleton { fn new( - context: Option<&mut PrivateContext>, - _: Option<&mut PublicContext>, + context: Context, storage_slot: Field, note_interface: NoteInterface, ) -> Self { assert(storage_slot != 0, "Storage slot 0 not allowed. Storage slots must start from 1."); Singleton { - context, + context: context.private, storage_slot, note_interface, } diff --git a/yarn-project/noir-libs/value-note/src/utils.nr b/yarn-project/noir-libs/value-note/src/utils.nr index f431895e956..4b7fcebd127 100644 --- a/yarn-project/noir-libs/value-note/src/utils.nr +++ b/yarn-project/noir-libs/value-note/src/utils.nr @@ -94,7 +94,7 @@ fn create_note( if note.value != 0 { // Emit the newly created encrypted note preimages via oracle calls. // docs:start:encrypted - let context = balance.private_context.unwrap(); + let context = balance.context.private.unwrap(); let application_contract_address = (*context).this_address(); let note_storage_slot = balance.storage_slot; let encryption_pub_key = get_public_key(owner); From e5f50df55e68f6c94b602fc16b33abbcea15674e Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:55:33 +0100 Subject: [PATCH 063/104] fix(test): Fix regex in canary test (#2165) This PR fixes an out of date regex in the canary cli test. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- yarn-project/canary/src/cli.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/canary/src/cli.test.ts b/yarn-project/canary/src/cli.test.ts index 96e75a945df..e9d43af33ea 100644 --- a/yarn-project/canary/src/cli.test.ts +++ b/yarn-project/canary/src/cli.test.ts @@ -115,7 +115,7 @@ describe('CLI canary', () => { // generate a private key debug('Create an account using a private key'); await run('generate-private-key', false); - const privKey = findInLogs(/Private\sKey:\s+(?[a-fA-F0-9]+)/)?.groups?.privKey; + const privKey = findInLogs(/Private\sKey:\s+0x(?[a-fA-F0-9]+)/)?.groups?.privKey; expect(privKey).toHaveLength(64); await run(`create-account --private-key ${privKey}`); const foundAddress = findInLogs(/Address:\s+(?
0x[a-fA-F0-9]+)/)?.groups?.address; From 4318b62128b59e867d488a35613b81e5f4e9172c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:02:36 +0200 Subject: [PATCH 064/104] chore(master): Release 0.6.6 (#2162) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.6 ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.5...aztec-packages-v0.6.6) (2023-09-11) ### Features * **noir:** Introduce context union to simplify storage declarations ([#2143](https://github.com/AztecProtocol/aztec-packages/issues/2143)) ([2288e44](https://github.com/AztecProtocol/aztec-packages/commit/2288e44a5b817076c9d51db5f99905deeeffc418)), closes [#2012](https://github.com/AztecProtocol/aztec-packages/issues/2012) ### Bug Fixes * **test:** Fix regex in canary test ([#2165](https://github.com/AztecProtocol/aztec-packages/issues/2165)) ([e5f50df](https://github.com/AztecProtocol/aztec-packages/commit/e5f50df55e68f6c94b602fc16b33abbcea15674e))
barretenberg.js: 0.6.6 ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.5...barretenberg.js-v0.6.6) (2023-09-11) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.6 ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.5...barretenberg-v0.6.6) (2023-09-11) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 12 ++++++++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 35 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6b992073547..51102ba9694 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.5", - "circuits/cpp/barretenberg": "0.6.5", - "circuits/cpp/barretenberg/ts": "0.6.5" + ".": "0.6.6", + "circuits/cpp/barretenberg": "0.6.6", + "circuits/cpp/barretenberg/ts": "0.6.6" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d62e483f6e5..9a1c4a5b52c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.5...aztec-packages-v0.6.6) (2023-09-11) + + +### Features + +* **noir:** Introduce context union to simplify storage declarations ([#2143](https://github.com/AztecProtocol/aztec-packages/issues/2143)) ([2288e44](https://github.com/AztecProtocol/aztec-packages/commit/2288e44a5b817076c9d51db5f99905deeeffc418)), closes [#2012](https://github.com/AztecProtocol/aztec-packages/issues/2012) + + +### Bug Fixes + +* **test:** Fix regex in canary test ([#2165](https://github.com/AztecProtocol/aztec-packages/issues/2165)) ([e5f50df](https://github.com/AztecProtocol/aztec-packages/commit/e5f50df55e68f6c94b602fc16b33abbcea15674e)) + ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.4...aztec-packages-v0.6.5) (2023-09-08) diff --git a/VERSION b/VERSION index 7c36cc52a83..fe152d6af84 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.5 x-release-please-version +v0.6.6 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index ba8800267d5..412af9b65a9 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.5...barretenberg-v0.6.6) (2023-09-11) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.4...barretenberg-v0.6.5) (2023-09-08) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index 7c36cc52a83..fe152d6af84 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.5 x-release-please-version +v0.6.6 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 827ab34a450..7ebdaec86e9 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.5"; # x-release-please-version + version = "0.6.6"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index 2c4d51b9949..f82fa08b206 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.5"; # x-release-please-version + version = "0.6.6"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index 2e1f201cf1a..f1825eea176 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.5 # x-release-please-version + VERSION 0.6.6 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index fddd3b1da06..b224fc4d353 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.5...barretenberg.js-v0.6.6) (2023-09-11) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.5](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.4...barretenberg.js-v0.6.5) (2023-09-08) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index 7ea68ff39ba..3b10a1613c8 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.5", + "version": "0.6.6", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From bae313d9a483649cbea7790d4c9753d9700adc07 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Mon, 11 Sep 2023 09:03:06 +0000 Subject: [PATCH 065/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "4a9f5cc35" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "4a9f5cc35" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 6ad0761f1e7..46ee2fd938e 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = a2a882b31be65284181146c25926616402157faa - parent = 0853caeaa3d69db4f654b459c9056de2707440e0 + commit = 4a9f5cc359b5416861c495a5245e089fcf17b3c4 + parent = 4318b62128b59e867d488a35613b81e5f4e9172c method = merge cmdver = 0.4.6 From e6af6164095a706109a6f61ef7e1196de67716dc Mon Sep 17 00:00:00 2001 From: kevaundray Date: Mon, 11 Sep 2023 10:55:14 +0100 Subject: [PATCH 066/104] fix: use Github Bot token for dispatch workflow (#2171) The github dispatch workflow is not working when we cut releases. This is a potential fix. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .github/workflows/release_please.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release_please.yml b/.github/workflows/release_please.yml index 240aab5b1f1..ce4badd3ed4 100644 --- a/.github/workflows/release_please.yml +++ b/.github/workflows/release_please.yml @@ -19,6 +19,7 @@ jobs: id: release uses: google-github-actions/release-please-action@v3 with: + token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} command: manifest - name: Dispatch to publish workflow @@ -26,7 +27,6 @@ jobs: if: ${{ steps.release.outputs.tag_name }} with: workflow: publish-bb.yml - repo: AztecProtocol/aztec-packages ref: master - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} inputs: '{ "tag": "${{ steps.release.outputs.tag_name }}", "publish": true }' From 73328dbe4e509235329e32ff88f823d849a2b673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bene=C5=A1?= Date: Mon, 11 Sep 2023 13:51:43 +0200 Subject: [PATCH 067/104] feat: testing commands in CLI docs (#2119) Fixes #1893 **Note**: It replaces the incorrect private key value in docs. The problematic command was: > aztec-cli create-account --private-key 0x6622c828e9cd5adc86f10878765fe921d2b8cb2c79bdbc391157e43811ce88e3 This could bite users so we should ideally merge this before next release. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --------- Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com> --- .circleci/config.yml | 13 + .../docs/concepts/foundation/accounts/main.md | 2 +- docs/docs/dev_docs/getting_started/cli.md | 133 +----- yarn-project/cli/src/encoding.ts | 4 +- .../end-to-end/src/cli_docs_sandbox.test.ts | 397 ++++++++++++++++++ 5 files changed, 427 insertions(+), 122 deletions(-) create mode 100644 yarn-project/end-to-end/src/cli_docs_sandbox.test.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 611cfc34b85..bd7238dad61 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -969,6 +969,17 @@ jobs: command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local aztec_rpc_sandbox.test.ts ./scripts/docker-compose-e2e-sandbox.yml working_directory: yarn-project/end-to-end + cli-docs-sandbox: + machine: + image: ubuntu-2004:202010-01 + steps: + - *checkout + - *setup_env + - run: + name: "Test" + command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local cli_docs_sandbox.test.ts ./scripts/docker-compose-e2e-sandbox.yml + working_directory: yarn-project/end-to-end + guides-writing-an-account-contract: machine: image: ubuntu-2004:202010-01 @@ -1429,6 +1440,7 @@ workflows: - e2e-browser-sandbox: *e2e_test - e2e-card-game: *e2e_test - aztec-rpc-sandbox: *e2e_test + - cli-docs-sandbox: *e2e_test - guides-writing-an-account-contract: *e2e_test - guides-dapp-testing: *e2e_test @@ -1461,6 +1473,7 @@ workflows: - e2e-canary-test - e2e-card-game - aztec-rpc-sandbox + - cli-docs-sandbox - guides-writing-an-account-contract - guides-dapp-testing <<: *defaults diff --git a/docs/docs/concepts/foundation/accounts/main.md b/docs/docs/concepts/foundation/accounts/main.md index 7343fd73f3a..8666a33eff9 100644 --- a/docs/docs/concepts/foundation/accounts/main.md +++ b/docs/docs/concepts/foundation/accounts/main.md @@ -1,6 +1,6 @@ # Accounts -**Every account in Aztec is a smart contract** which defines the rules for whether a transaction is or not valid. This allows implementing different schemes for transaction signing, nonce management, and fee payments. However, encryption and nullifying keys, which are specific to private blockchains, are still enshrined at the protocol level. +**Every account in Aztec is a smart contract** which defines the rules for whether a transaction is or is not valid. This allows implementing different schemes for transaction signing, nonce management, and fee payments. However, encryption and nullifying keys, which are specific to private blockchains, are still enshrined at the protocol level. ## Background diff --git a/docs/docs/dev_docs/getting_started/cli.md b/docs/docs/dev_docs/getting_started/cli.md index b3154f4a4a3..d5681106936 100644 --- a/docs/docs/dev_docs/getting_started/cli.md +++ b/docs/docs/dev_docs/getting_started/cli.md @@ -36,10 +36,7 @@ Lets first establish that we are able to communicate with the Sandbox. Most comm To test communication with the Sandbox, let's run the command: -```bash -% aztec-cli block-number -1 -``` +#include_code block-number yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash You should see the current block number (1) printed to the screen! @@ -47,25 +44,7 @@ You should see the current block number (1) printed to the screen! We have shipped a number of example contracts in the `@aztec/noir-contracts` npm package. This is included with the cli by default so you are able to use these contracts to test with. To get a list of the names of the contracts run: -```bash -% aztec-cli example-contracts -ChildContractAbi -EasyPrivateTokenContractAbi -EcdsaAccountContractAbi -EscrowContractAbi -LendingContractAbi -NonNativeTokenContractAbi -ParentContractAbi -PendingCommitmentsContractAbi -PokeableTokenContractAbi -PrivateTokenAirdropContractAbi -PrivateTokenContractAbi -PublicTokenContractAbi -SchnorrAccountContractAbi -SchnorrSingleKeyAccountContractAbi -TestContractAbi -UniswapContractAbi -``` +#include_code example-contracts yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash In the following sections there will be commands that require contracts as options. You can either specify the full directory path to the contract abi, or you can use the name of one of these examples as the option value. This will become clearer later on. @@ -73,19 +52,11 @@ In the following sections there will be commands that require contracts as optio The first thing we want to do is create a couple of accounts. We will use the `create-account` command which will generate a new private key for us, register the account on the sandbox, and deploy a simple account contract which [uses a single key for privacy and authentication](../../concepts/foundation/accounts/keys.md): -```bash -% aztec-cli create-account -Created new account: - -Address: 0x20d3321707d53cebb168568e25c5c62a853ae1f0766d965e00d6f6c4eb05d599 -Public key: 0x02d18745eadddd496be95274367ee2cbf0bf667b81373fb6bed715c18814a09022907c273ec1c469fcc678738bd8efc3e9053fe1acbb11fa32da0d6881a1370e -Private key: 0x2aba9e7de7075deee3e3f4ad1e47749f985f0f72543ed91063cc97a40d851f1e -Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed -``` +#include_code create-account yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash Once the account is set up, the CLI returns the resulting address, its privacy key, and partial address. You can read more about these [here](../../concepts/foundation/accounts/keys.md#addresses-partial-addresses-and-public-keys). -Save the Address and Private key as environement variables. We will be using them later. +Save the Address and Private key as environment variables. We will be using them later. ```bash export ADDRESS=
@@ -94,38 +65,13 @@ export PRIVATE_KEY= Alternatively, we can also manually generate a private key and use it for creating the account, either via a `-k` option or by setting the `PRIVATE_KEY` environment variable. -```bash -% aztec-cli generate-private-key - -Private Key: 0x6622c828e9cd5adc86f10878765fe921d2b8cb2c79bdbc391157e43811ce88e3 -Public Key: 0x08aad54f32f1b6621ee5f25267166e160147cd355a2dfc129fa646a651dd29471d814ac749c2cda831fcca361c830ba56db4b4bd5951d4953c81865d0ae0cbe7 - - -% aztec-cli create-account --private-key 0x6622c828e9cd5adc86f10878765fe921d2b8cb2c79bdbc391157e43811ce88e3 - -Created new account: - -Address: 0x175310d40cd3412477db1c2a2188efd586b63d6830115fbb46c592a6303dbf6c -Public key: 0x08aad54f32f1b6621ee5f25267166e160147cd355a2dfc129fa646a651dd29471d814ac749c2cda831fcca361c830ba56db4b4bd5951d4953c81865d0ae0cbe7 -Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed -``` +#include_code create-account-from-private-key yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash For all commands that require a user's private key, the CLI will look for the `PRIVATE_KEY` environment variable in absence of an optional argument. Let's double check that the accounts have been registered with the sandbox using the `get-accounts` command: -```bash -% aztec-cli get-accounts -Accounts found: - -Address: 0x20d3321707d53cebb168568e25c5c62a853ae1f0766d965e00d6f6c4eb05d599 -Public key: 0x02d18745eadddd496be95274367ee2cbf0bf667b81373fb6bed715c18814a09022907c273ec1c469fcc678738bd8efc3e9053fe1acbb11fa32da0d6881a1370e -Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed - -Address: 0x175310d40cd3412477db1c2a2188efd586b63d6830115fbb46c592a6303dbf6c -Public key: 0x08aad54f32f1b6621ee5f25267166e160147cd355a2dfc129fa646a651dd29471d814ac749c2cda831fcca361c830ba56db4b4bd5951d4953c81865d0ae0cbe7 -Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed -``` +#include_code get-accounts yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash Save one of the printed accounts (not the one that you generated above) in an environment variable. We will use it later. @@ -137,11 +83,7 @@ export ADDRESS2= We will now deploy the private token contract using the `deploy` command, minting 1000000 initial tokens to address `0x175310d40cd3412477db1c2a2188efd586b63d6830115fbb46c592a6303dbf6c`. Make sure to replace this address with one of the two you created earlier. -```bash -% aztec-cli deploy PrivateTokenContractAbi --args 1000000 $ADDRESS - -Contract deployed at 0x1ae8eea0dc265fb7f160dae62cc8912686d8a9ed78e821fbdd8bcedc54c06d0f -``` +#include_code deploy yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash Save the contract address as an environment variable. We will use it later. @@ -158,30 +100,17 @@ Alternatively you can pass the name of an example contract as exported by `@azte The command takes a few optional arguments while the most important one is: -- `--args` - Arguments to the constructor of the contract. In this case we have minted 1000000 initial tokens to the aztec address 0x175310d40cd3412477db1c2a2188efd586b63d6830115fbb46c592a6303dbf6c. +- `--args` - Arguments to the constructor of the contract. In this case we have minted 1000000 initial tokens to the aztec address 0x20d3321707d53cebb168568e25c5c62a853ae1f0766d965e00d6f6c4eb05d599. The CLI tells us that the contract was successfully deployed. We can use the `check-deploy` command to verify that a contract has been successfully deployed to that address: -```bash -% aztec-cli check-deploy --contract-address $CONTRACT_ADDRESS - -Contract found at 0x1ae8eea0dc265fb7f160dae62cc8912686d8a9ed78e821fbdd8bcedc54c06d0f -``` +#include_code check-deploy yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash ## Calling a View Method When we deployed the token contract, an initial supply of tokens was minted to the address provided in the constructor. We can now query the `getBalance()` method on the contract to retrieve the balance of that address. Make sure to replace the `contract-address` with the deployment address you got from the previous command, and the `args` with the account you used in the constructor. -```bash -% aztec-cli call getBalance \ - --args $ADDRESS \ - --contract-abi PrivateTokenContractAbi \ - --contract-address $CONTRACT_ADDRESS - -View result: [ - "{\"type\":\"bigint\",\"data\":\"1000000\"}" -] -``` +#include_code call yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash The `call` command calls a read-only method on a contract, one that will not generate a transaction to be sent to the network. The arguments here are: @@ -195,19 +124,7 @@ As you can see from the result, this address has a balance of 1000000, as expect We can now send a transaction to the network. We will transfer funds from the owner of the initial minted tokens to our other account. For this we will use the `send` command, which expects as arguments the quantity of tokens to be transferred, the sender's address, and the recipient's address. Make sure to replace all addresses in this command with the ones for your run. -```bash -% aztec-cli send transfer \ - --args 543 $ADDRESS2 \ - --contract-abi PrivateTokenContractAbi \ - --contract-address $CONTRACT_ADDRESS \ - --private-key $PRIVATE_KEY - -Transaction has been mined -Transaction hash: 15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c -Status: mined -Block number: 5 -Block hash: 163697608599543b2bee9652f543938683e4cdd0f94ac506e5764d8b908d43d4 -``` +#include_code send yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash We called the `transfer` function of the contract and provided these arguments: @@ -218,32 +135,8 @@ We called the `transfer` function of the contract and provided these arguments: The command output tells us the details of the transaction such as its hash and status. We can use this hash to query the receipt of the transaction at a later time: -```bash -% aztec-cli get-tx-receipt 15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c - -Transaction receipt: -{ - "txHash": "15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c", - "status": "mined", - "error": "", - "blockHash": "163697608599543b2bee9652f543938683e4cdd0f94ac506e5764d8b908d43d4", - "blockNumber": 5, - "origin": "0x2337f1d5cfa6c03796db5539b0b2d5a57e9aed42665df2e0907f66820cb6eebe" -} -``` +#include_code get-tx-receipt yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash Let's now call `getBalance()` on each of our accounts and we should see updated values: -```bash -% aztec-cli call getBalance -a $ADDRESS -c PrivateTokenContractAbi -ca $CONTRACT_ADDRESS - -View result: [ - "{\"type\":\"bigint\",\"data\":\"999457\"}" -] - -% aztec-cli call getBalance -a $ADDRESS2 -c PrivateTokenContractAbi -ca $CONTRACT_ADDRESS - -View result: [ - "{\"type\":\"bigint\",\"data\":\"543\"}" -] -``` +#include_code calls yarn-project/end-to-end/src/cli_docs_sandbox.test.ts bash diff --git a/yarn-project/cli/src/encoding.ts b/yarn-project/cli/src/encoding.ts index da1381c321c..93cbc4296a5 100644 --- a/yarn-project/cli/src/encoding.ts +++ b/yarn-project/cli/src/encoding.ts @@ -90,7 +90,9 @@ function encodeArg(arg: string, abiType: ABIType, name: string): any { */ export function encodeArgs(args: any[], params: ABIParameter[]) { if (args.length !== params.length) { - throw new Error(`Invalid number of args provided. Expected: ${params.length}, received: ${args.length}`); + throw new Error( + `Invalid number of args provided. Expected: ${params.length}, received: ${args.length}\nReceived args: ${args}`, + ); } return args .map((arg: any, index) => { diff --git a/yarn-project/end-to-end/src/cli_docs_sandbox.test.ts b/yarn-project/end-to-end/src/cli_docs_sandbox.test.ts new file mode 100644 index 00000000000..9975f3addc4 --- /dev/null +++ b/yarn-project/end-to-end/src/cli_docs_sandbox.test.ts @@ -0,0 +1,397 @@ +import { AztecAddress, createDebugLogger, sleep } from '@aztec/aztec.js'; +import { getProgram } from '@aztec/cli'; +import { TxHash } from '@aztec/types'; + +import stringArgv from 'string-argv'; +import { format } from 'util'; + +const debug = createDebugLogger('aztec:e2e_cli'); + +const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + +describe('CLI docs sandbox', () => { + let cli: ReturnType; + let log: (...args: any[]) => void; + + // All logs emitted by the cli will be collected here, and reset between tests + const logs: string[] = []; + + beforeAll(async () => { + log = (...args: any[]) => { + logs.push(format(...args)); + debug(...args); + }; + + await waitForSandboxWithCli(); + }, 60_000); + + const waitForSandboxWithCli = async () => { + while (true) { + resetCli(); + try { + await run('get-node-info'); + break; + } catch (err) { + await sleep(1000); + } + } + }; + + // in order to run the same command twice, we need to create a new CLI instance + const resetCli = () => { + cli = getProgram(log, debug); + }; + + beforeEach(() => { + logs.splice(0); + resetCli(); + }); + + // Run a command on the CLI + const run = (cmd: string, addRpcUrl = true) => { + const args = stringArgv(cmd, 'node', 'dest/bin/index.js'); + if (addRpcUrl) { + args.push('--rpc-url', SANDBOX_URL); + } + return cli.parseAsync(args); + }; + + // Returns first match across all logs collected so far + const findInLogs = (regex: RegExp) => { + for (const log of logs) { + const match = regex.exec(log); + if (match) return match; + } + }; + + const findMultipleInLogs = (regex: RegExp) => { + const matches = []; + for (const log of logs) { + const match = regex.exec(log); + if (match) matches.push(match); + } + return matches; + }; + + const clearLogs = () => { + logs.splice(0); + }; + + it('prints example contracts', async () => { + const docs = ` +// docs:start:example-contracts +% aztec-cli example-contracts +CardGameContractAbi +ChildContractAbi +DocsExampleContractAbi +EasyPrivateTokenContractAbi +EcdsaAccountContractAbi +EscrowContractAbi +ImportTestContractAbi +LendingContractAbi +MultiTransferContractAbi +NativeTokenContractAbi +NonNativeTokenContractAbi +ParentContractAbi +PendingCommitmentsContractAbi +PokeableTokenContractAbi +PriceFeedContractAbi +PrivateTokenAirdropContractAbi +PrivateTokenContractAbi +PublicTokenContractAbi +SchnorrAccountContractAbi +SchnorrAuthWitnessAccountContractAbi +SchnorrHardcodedAccountContractAbi +SchnorrSingleKeyAccountContractAbi +TestContractAbi +UniswapContractAbi +// docs:end:example-contracts +`; + + const command = docs.split('\n')[2].split('aztec-cli ')[1]; + const expectedConsoleOutput = docs.split('\n').slice(3, -2); + + await run(command, false); + expect(logs).toEqual(expectedConsoleOutput); + }); + + it('gets a block number', async () => { + const docs = ` +// docs:start:block-number +% aztec-cli block-number +1 +// docs:end:block-number +`; + + const command = docs.split('\n')[2].split('aztec-cli ')[1]; + + await run(command); + // expect logs to contain a number and nothing else + expect(logs.length).toEqual(1); + expect(logs[0]).toMatch(/\d+/); + }); + + it('creates an account from private key', async () => { + const docs = ` +// docs:start:create-account-from-private-key +% aztec-cli generate-private-key + +Private Key: 0x12684562c8676e66be100878434b01286a757dea468233f818b906f66fb34984 +Public Key: 0x1003732857c052c1d6af4dd74b5631863a056c90a586c4e3ea6d94782ee712d317cdb713ed1ba02d3df0ac2b581d269490f9e24916c1b677c7259444aa0ad66b + + +% aztec-cli create-account --private-key 0x12684562c8676e66be100878434b01286a757dea468233f818b906f66fb34984 + +Created new account: + +Address: 0x26e831b1b146d1faf0c1d27fc72f2243887e9963cc87a6b3af64fe6481920a80 +Public key: 0x1003732857c052c1d6af4dd74b5631863a056c90a586c4e3ea6d94782ee712d317cdb713ed1ba02d3df0ac2b581d269490f9e24916c1b677c7259444aa0ad66b +Partial address: 0x01e5e7b2abbfb98a93b7549ae80faa6886f8ea8e8f412416fb330b565fd2b4ed +// docs:end:create-account-from-private-key +`; + + const generateCommand = docs.split('\n')[2].split('aztec-cli ')[1]; + await run(generateCommand, false); + + const foundPrivateKey = findInLogs(/Private\sKey:\s+(?0x[a-fA-F0-9]+)/)?.groups?.privateKey; + expect(foundPrivateKey).toBeDefined(); + const foundPublicKeyGenerate = findInLogs(/Public\sKey:\s+(?0x[a-fA-F0-9]+)/)?.groups?.publicKey; + expect(foundPublicKeyGenerate).toBeDefined(); + + clearLogs(); + + const createCommand = docs.split('\n')[8].split('aztec-cli ')[1]; + + await run(createCommand); + const foundAddress = findInLogs(/Address:\s+(?
0x[a-fA-F0-9]+)/)?.groups?.address; + expect(foundAddress).toBeDefined(); + const foundPublicKey = findInLogs(/Public\skey:\s+(?0x[a-fA-F0-9]+)/)?.groups?.publicKey; + expect(foundPublicKey).toBeDefined(); + const foundPartialAddress = findInLogs(/Partial\saddress:\s+(?0x[a-fA-F0-9]+)/)?.groups + ?.partialAddress; + expect(foundPartialAddress).toBeDefined(); + }); + + it('creates an account, gets account, deploys, checks deployed, view method, sending a tx... [SEQUENTIAL]', async () => { + // Test create-account + let docs = ` +// docs:start:create-account +% aztec-cli create-account +Created new account: + +Address: 0x20d3321707d53cebb168568e25c5c62a853ae1f0766d965e00d6f6c4eb05d599 +Public key: 0x02d18745eadddd496be95274367ee2cbf0bf667b81373fb6bed715c18814a09022907c273ec1c469fcc678738bd8efc3e9053fe1acbb11fa32da0d6881a1370e +Private key: 0x2aba9e7de7075deee3e3f4ad1e47749f985f0f72543ed91063cc97a40d851f1e +Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed +// docs:end:create-account +`; + + let command = docs.split('\n')[2].split('aztec-cli ')[1]; + + await run(command); + const foundAddress = findInLogs(/Address:\s+(?
0x[a-fA-F0-9]+)/)?.groups?.address; + expect(foundAddress).toBeDefined(); + const foundPublicKey = findInLogs(/Public\skey:\s+(?0x[a-fA-F0-9]+)/)?.groups?.publicKey; + expect(foundPublicKey).toBeDefined(); + const foundPrivateKey = findInLogs(/Private\skey:\s+(?0x[a-fA-F0-9]+)/)?.groups?.privateKey; + expect(foundPrivateKey).toBeDefined(); + const foundPartialAddress = findInLogs(/Partial\saddress:\s+(?0x[a-fA-F0-9]+)/)?.groups + ?.partialAddress; + expect(foundPartialAddress).toBeDefined(); + const newAddress = AztecAddress.fromString(foundAddress!); + + clearLogs(); + + // Test get-account + docs = ` +// docs:start:get-accounts +% aztec-cli get-accounts +Accounts found: + +Address: 0x20d3321707d53cebb168568e25c5c62a853ae1f0766d965e00d6f6c4eb05d599 +Public key: 0x02d18745eadddd496be95274367ee2cbf0bf667b81373fb6bed715c18814a09022907c273ec1c469fcc678738bd8efc3e9053fe1acbb11fa32da0d6881a1370e +Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed + +Address: 0x175310d40cd3412477db1c2a2188efd586b63d6830115fbb46c592a6303dbf6c +Public key: 0x08aad54f32f1b6621ee5f25267166e160147cd355a2dfc129fa646a651dd29471d814ac749c2cda831fcca361c830ba56db4b4bd5951d4953c81865d0ae0cbe7 +Partial address: 0x72bf7c9537875b0af267b4a8c497927e251f5988af6e30527feb16299042ed +// docs:end:get-accounts +`; + + command = docs.split('\n')[2].split('aztec-cli ')[1]; + await run(command); + + const fetchedAddresses = findMultipleInLogs(/Address:\s+(?
0x[a-fA-F0-9]+)/); + const foundFetchedAddress = fetchedAddresses.find(match => match.groups?.address === newAddress.toString()); + expect(foundFetchedAddress).toBeDefined(); + + clearLogs(); + + // Set some of the found addresses as address2 for later use + const address2 = AztecAddress.fromString(fetchedAddresses[1].groups?.address as string); + + // Test deploy + docs = ` +// docs:start:deploy +% aztec-cli deploy PrivateTokenContractAbi --args 1000000 $ADDRESS + +Contract deployed at 0x1ae8eea0dc265fb7f160dae62cc8912686d8a9ed78e821fbdd8bcedc54c06d0f +// docs:end:deploy + `; + + command = docs.split('\n')[2].split('aztec-cli ')[1].replace('$ADDRESS', newAddress.toString()); + await run(command); + + let foundContractAddress = findInLogs(/Contract\sdeployed\sat\s(?
0x[a-fA-F0-9]+)/)?.groups?.address; + expect(foundContractAddress).toBeDefined(); + const contractAddress = AztecAddress.fromString(foundContractAddress!); + + clearLogs(); + + // Test check-deploy + docs = ` +// docs:start:check-deploy +% aztec-cli check-deploy --contract-address $CONTRACT_ADDRESS + +Contract found at 0x1ae8eea0dc265fb7f160dae62cc8912686d8a9ed78e821fbdd8bcedc54c06d0f +// docs:end:check-deploy +`; + command = docs.split('\n')[2].split('aztec-cli ')[1].replace('$CONTRACT_ADDRESS', contractAddress.toString()); + await run(command); + + foundContractAddress = findInLogs(/Contract\sfound\sat\s(?
0x[a-fA-F0-9]+)/)?.groups?.address; + expect(foundContractAddress).toEqual(contractAddress.toString()); + + clearLogs(); + + // Test call + docs = ` +// docs:start:call +% aztec-cli call getBalance \ + --args $ADDRESS \ + --contract-abi PrivateTokenContractAbi \ + --contract-address $CONTRACT_ADDRESS + +View result: 1000000n +// docs:end:call +`; + command = docs + .split('\n')[2] + .split('aztec-cli ')[1] + .replace('$ADDRESS', newAddress.toString()) + .replace('$CONTRACT_ADDRESS', contractAddress.toString()); + await run(command); + + let foundBalance = findInLogs(/View\sresult:\s+(?\S+)/)?.groups?.data; + expect(foundBalance!).toEqual(`${BigInt(1000000).toString()}n`); + + clearLogs(); + + // We reset CLI so that we can call the same command again later on + resetCli(); + + // Test send + docs = ` +// docs:start:send +% aztec-cli send transfer \ + --args 543 $ADDRESS2 \ + --contract-abi PrivateTokenContractAbi \ + --contract-address $CONTRACT_ADDRESS \ + --private-key $PRIVATE_KEY + +Transaction has been mined +Transaction hash: 15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c +Status: mined +Block number: 5 +Block hash: 163697608599543b2bee9652f543938683e4cdd0f94ac506e5764d8b908d43d4 +// docs:end:send +`; + + command = docs + .split('\n')[2] + .split('aztec-cli ')[1] + .replace('$ADDRESS2', address2.toString()) + .replace('$CONTRACT_ADDRESS', contractAddress.toString()) + .replace('$PRIVATE_KEY', foundPrivateKey!); + await run(command); + + let foundTxHash = findInLogs(/Transaction\shash:\s+(?\S+)/)?.groups?.txHash; + expect(foundTxHash).toBeDefined(); + + clearLogs(); + + // Save the tx hash for later use + const transferTxHash = TxHash.fromString(foundTxHash!); + + // Test get-tx-receipt + docs = ` +// docs:start:get-tx-receipt +% aztec-cli get-tx-receipt 15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c + +Transaction receipt: +{ + "txHash": "15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c", + "status": "mined", + "error": "", + "blockHash": "163697608599543b2bee9652f543938683e4cdd0f94ac506e5764d8b908d43d4", + "blockNumber": 5, + "origin": "0x2337f1d5cfa6c03796db5539b0b2d5a57e9aed42665df2e0907f66820cb6eebe" +} +// docs:end:get-tx-receipt +`; + + command = docs + .split('\n')[2] + .split('aztec-cli ')[1] + .replace('15c5a8e58d5f895c7e3017a706efbad693635e01f67345fa60a64a340d83c78c', transferTxHash.toString()); + await run(command); + + foundTxHash = findInLogs(/"txHash":\s+"(?\S+)"/)?.groups?.txHash; + expect(foundTxHash).toEqual(transferTxHash.toString()); + const status = findInLogs(/"status":\s+"(?\S+)"/)?.groups?.status; + expect(status).toEqual('mined'); + const error = findInLogs(/"error":\s+"(?\S*)"/)?.groups?.error; + expect(error).toEqual(''); + + clearLogs(); + + // get balance + docs = ` +// docs:start:calls +% aztec-cli call getBalance -a $ADDRESS -c PrivateTokenContractAbi -ca $CONTRACT_ADDRESS + +View result: 999457n + +% aztec-cli call getBalance -a $ADDRESS2 -c PrivateTokenContractAbi -ca $CONTRACT_ADDRESS + +View result: 543n +// docs:end:calls +`; + command = docs + .split('\n')[2] + .split('aztec-cli ')[1] + .replace('$ADDRESS', newAddress.toString()) + .replace('$CONTRACT_ADDRESS', contractAddress.toString()); + + await run(command); + + foundBalance = findInLogs(/View\sresult:\s+(?\S+)/)?.groups?.data; + expect(foundBalance!).toEqual(`${BigInt(999457).toString()}n`); + + clearLogs(); + resetCli(); + + command = docs + .split('\n')[6] + .split('aztec-cli ')[1] + .replace('$ADDRESS2', address2.toString()) + .replace('$CONTRACT_ADDRESS', contractAddress.toString()); + + await run(command); + + foundBalance = findInLogs(/View\sresult:\s+(?\S+)/)?.groups?.data; + expect(foundBalance!).toEqual(`${BigInt(543).toString()}n`); + + clearLogs(); + }, 60_000); +}); From 0b5258c881a84ae7c4f47297df1586927aa3b4d2 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Mon, 11 Sep 2023 11:52:11 +0000 Subject: [PATCH 068/104] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "76da28406" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "76da28406" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index 794f4ba1140..586639dbe05 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = 00d33529c9c7737a1eca09876c999f9fe967e81c - parent = 73b484f474a16b53920fa1dc4f71cbe1ff2bf9ce + commit = 76da28406fa55dc0f34dbed9014d68391e6ef18e + parent = 73328dbe4e509235329e32ff88f823d849a2b673 method = merge cmdver = 0.4.6 From 27b8bed05fea4f44f36894739613b07cdb8089ac Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Mon, 11 Sep 2023 15:20:55 +0200 Subject: [PATCH 069/104] fix(ci): add install backend step in noir rebuild (#2182) Please provide a paragraph or two giving a summary of the change, including relevant motivation and context. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- .../aztec.js/src/abis/ecdsa_account_contract.json | 6 +++--- .../aztec.js/src/abis/schnorr_account_contract.json | 6 +++--- .../abis/schnorr_auth_witness_account_contract.json | 6 +++--- .../abis/schnorr_single_key_account_contract.json | 2 +- .../end-to-end/src/e2e_nested_contract.test.ts | 4 ++-- yarn-project/noir-contracts/Dockerfile.build | 1 + yarn-project/noir-contracts/bootstrap.sh | 1 + .../noir-contracts/scripts/install_noir_backend.sh | 13 +++++++++++++ 8 files changed, 27 insertions(+), 12 deletions(-) create mode 100755 yarn-project/noir-contracts/scripts/install_noir_backend.sh diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index edf8ef64388..9b641c8c749 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "H4sIAAAAAAAA/9XdB3wUVR4H8NkkJCShifQuHWlJ6H0pgvTepPeOSO9NQEA6SO+99yZNEFCxi3d6nmc9Pb2z3enpnZ7lnM38yY+3j5DAe8sv+/lA3s6+fe87/9/M7CSbnWR0HMfnJN7Cf/8X4QTf5HG/9zXu7m7xPnNjxdl0hqURZ7hBp2tL59jNP8JCXU0b06UBY2QaMEalAWN6x+z+I0Y5lkb//i/m93+xv//L4CTdvsmc9Ljsc+HwHHl+GCwLV2oQDY/LLRLafjPrVSnSfN3j0nl+B77i+mby1iXK7LzxWKMIJ6nOUZCBPJ4RvrrL0huugbrush3IPDFgkX62ahKjcUSBIxra4og160hwx8igccTC3DJ/BnBkNOuo4I6RSePICA6ZPxM4Mpt1VHTHyKJxZAaHzJ8FHFlMOuLj4twx7zM5ZlxCnLs9ZfXGkrHdZdk0y+53br75lPt+aGeD52WHmsjXnEbXI/GYnwvG98Mc2WB5brPzxuO8Pu+fzCHLw6EdD32ln3vs+xXqlAX65PHaYV6f3Jo+OaCN48hz1bbkKPWJhcdxrOy38UXC8/ze17i7uwXqmROsfrifBzxFwZDdrCEBayrnybINZbe37nG4Tcg2rObiLs9roeYyr2zDMocsD4d2Iyfplhfasl2JOQbqJf3c44Fuv7SxTjlhnfxwPy8sv1WfPLdZx5ywjrk0/ZKrSyw8niuF8+BzcBu0UTdcdz/cl7ncfaIiGHKZNcTpjgFZlXrZOP/SvYZEKTm4y3NYmFcydc8t0CFzhUOflt7XjI6981Dd6wWeh6qvMTbOQ33K+H6Yw3YeuZU88mjykD6dlDxsnI/rjg14Pi6WvFAX0+fjPmV8P8xhO498Sh55NXlIn17OzXnY+L4kvxOcB35fIpb8UBfT35f4lPH9MIftPAooeeTX5CF9Bit52Pj+rKATnAd+fyaWglCXQmYdlXzK+H6Yw3YeDyh5FNTkIX1GKXkUMlwHd4zCTnAehSAPsRSGuhQx66jsU8b3wxy28yiq5FFYk4f0mazkYboO7hjFnOA8ikAeYikGdSlu1lHFp4zvhzls51FCyaOYJg/pM1vJw3Qd3DFKOsF5FIc8xFIS6lLKrKOqTxnfD3PYzuNBJY+SmjykzyIlD9N1cMco7QTnUQryEEtpqEsZs45qPmV8P8xhO4+ySh6lNXlIn1VKHqbr4I5RzgnOowzkIZZyUJfyZh29fMr4fpjDdh5xSh7lNHlIn83OzXmYroM7hvzcEvMoD3mIJR7qkmDW0dunjO+HOWznUUHJI16Th/TZo+Rhug7uGPLzF8wjAfIQC/6cppJZRx+fMr4f5rCdR2Ulj4qaPKTPUSUP03Vwx6jiBOdRCfIQSxWoS1Wzjr4+ZXw/zGE7j2pKHlU0eUifs0oepuvgjlHdCc6jKuQhlupQlxpmHf18yvh+mMN2HjWVPKpr8pA+V5Q8TNfBHaOWE5xHDchDLLWgLrXNOvr7lPH9MIftPOooedTS5CF9XlHyMF0HHAvzqA151FHmdB11jTri43zK+H6Yw3Ye9ZQ8/Jo8pM9bzs15mK6DO0Z9JziPupCHWOpDXRqYdQTqUl/Jo0GI8nhIyaO+Jg/p84GSh+k6uGM0dILzaAB5iKUh1KWRWUfg/Y+GSh6NQpTHw0oeDTV5SJ/PlTxM18Edo7ETnEcjyEMsjaEuTcw6Au9/NFbyaBKiPJoqeTTW5CF9/qXkYboO7hjNnOA8mkAeYmkGdWlu1hF4/6OZkkfzEOXRQsmjmSYP6fOTkofpOrhjyHvCmEdzyEMsLaEurcw6Au9/tFTyaBWiPForebTU5CF9wn0352G6Du4YbZzgPFpBHmJpA3Vpa9YReP+jjZJH2xDl0U7Jo40mD+mTQcnDdB3cMdo7wXm0hTzE0h7q0sGsI/D+R3sljw4hyqOjkkd7TR7SJ7uSh+k6uGPI70xgHh0gD7F0grp0NusIvP/RScmjc4jyeETJo5MmD+lTQMnDdB3cMbo4wXl0hjzE0gXq0tWsI/D+Rxclj64hyqObkkcXTR7Sp4SSh+k6uGN0d4Lz6Ap5iKU71KWHWUfg/Y/uSh49QpRHTyWP7po8pE+ckofpOrhjyO8UYR49II+eXrsX1KW3WUfg/Y9eSh69Q5RHHyWPXpo8pE81JQ/TdXDH6OsE59Eb8hBLX6hLP7OOwPsffZU8+oUoj/5KHn01eUifekoepuvgjjHACc6jH+QhlgFQl4FmHYH3PwYoeQwMUR6DlDwGaPKQPk2VPEzXwR1DfucO8xgIeYhlMNRliFlH4P2PwUoeQ0KUx1Alj8GaPKRPOyUP03VwxxjmBOcxBPIQyzCoy3CzjsD7H8OUPIaHKI9HlTyGafKQPt2UPEzXwR1jhBOcx3DIQywjoC5p5fN8YsbP7o3ULHvMufnmU+77oT0SnjcK2lKbMUbXI/EzIGNhfD/MMRKWjzM7bzzO6/P+yRyyPBzaY3xJfaWffF5O6oSf1RvvtcO8PuM0fUZDG8eR56ptyVHqEwuP41ijbuOLhOf5va9xd3cL1HMMWP1wfzx4BvqSDKPMGhKwpvJ5PtmGRtlb9zjcJmQbVnNxl0+wUHOZV7ZhmUOWh0P7SdjxJyQ1b2xXYo6Bekk/9xig2y9trNMYWCc/3J8Ay2/VB/cX3TqOgXUcq+mXXF1i4fGxKZwHn4PboI264br74b7M5e4T42H/G2vWEKc7BoxQ6mXrfEd9DRmu5GDrfEcylfMdceD5jvRZHoLzHTneuDfZFvF8Ryx4XEor5ztixnObcZpluB84TvLnO+PgeROgTlKbSUbXI3EfmQzj+2EOfA2ZYnbeeJxXXitkDlkeDu19cL4j/eR8QuqE5zJTvbac70zR9JkIbRxHnqu2JUepTyw8jmNNuI0vEp7n977G3d0tUM9JYPXD/ang2QjHW8PH/ASsqZzvyDY0wd66x+E2Iduwmou7fJqFmsu8sg3LHLI8HNqXYMefltS8sV2JOQbqJf3c44Fuv7SxTpNgnfxwfxosv1Uf3F906zgJ1nGypl9ydYmFxyencB58Dm6DNuqG6+6H+zKXu08chP1vsllDnO4YMFqplzuvjesXqK8hUUoOts53JFM53xEHnu9In2vK+Y6N6xfI8ca9ybaI1y8QCx6XbFy/YKKSR2yI8piq5DFRk4f0ua7kYeP6BXLsxTzw+gViwdcPG9cvUF+fMoYoj2lKHlM0eUifd5U8bFy/YLoTnAdev0As06EuNq5fMF3JI3OI8pih5DFdk4f0+UTJw8b1C2Y6wXng9QvEMhPqUsisI/D7ezOVPAqFKI/HlTxmavKQPl8peRQyXAd3jFlOcB6FIA+xzIK6FDHrCPz+3iwljyIhymO2kscsTR7S5wclDxvXL5jjBOeB1y8QyxyoS3GzjsDv781R8igeojyeUPKYo8lD+vym5GG6Du4Yc53gPIpDHmKZC3Wxcf2CuUoepUKUxzwlj7maPKRP+rCb87Bx/YL5TnAeeP0CscyHuti4fsF8JY8yIcrjSSWP+Zo8pM99Sh42rl+wwAnOA69fIJYFUBcb1y9YoORRPkR5LFTyWKDJQ/rkUfKwcf0CuYYI5oHXLxDLIqiLjesXLFLySAhRHouVPBZp8pA+RZQ8bFy/YIkTnAdev0AsS6AuNq5fsETJo1KI8liq5LFEk4f0KaPkYeP6Bcuc4Dzw+gViWQZ1sXH9gmVKHlVDlMdyJY9lmjykTyUlDxvXL1jhBOeB1y8Qywqoi43rF6xQ8qgRojyeUvJYoclD+tRW8rBx/YKVTnAeeP0CsayEuti4fsFKJY/aIcpjlZLHSk0e0qeRkoeN6xesdoLzwOsXiGU11KWuUUfi9QtWK3nUDVEea5Q8VmvykD6tlDxM18EdY60TnEddyEMsa6EuNq5fsFbJo0GI8lin5LFWk4f06azkYeP6Beud4Dzw+gViWQ91sXH9gvVKHo1ClMcGJY/1mjykT28lDxvXL9joBOeB1y8Qy0aoSxOzjsD7HxuVPJqEKI9NSh4bNXlInyFKHjauX7DZCc4Dr18gls1Ql+ZmHYH3PzYreTQPUR5blDw2a/KQPqOVPGxcv2CrE5wHXr9ALFuhLjauX7BVyaNViPLYpuSxVZOH9Jmi5GHj+gXbneA88PoFYtkOdbFx/YLtSh5tQ5THDiWP7Zo8pM8cJQ8b1y/Y6QTngdcvEMtOqEsHs47A+x87lTw6hCiPXUoeOzV5SJ/FSh42rl+w2wnOA69fIJbdUBcb1y/YreTROUR57FHy2K3JQ/qsVvKwcf2CvU5wHnj9ArHshbrYuH7BXiWPriHKY5+Sx15NHtJni5KHjesX7HeC88DrF4hlP9TFxvUL9it59AhRHgeUPPZr8pA+e5U8bFy/4KATnAdev0AsB6Euvc06Au9/HFTy6B2iPA4peRzU5CF9jil5mK6DO8ZhJziP3pCHWA5DXWxcv+Cwkke/EOVxRMnjsCYP6XNOycPG9QvkGtGYB16/QCxHoS42rl9wVMljYIjyOKbkcVSTh/S5quRh4/oFx53gPPD6BWI5DnWxcf2C40oeQ0KUxwklj+OaPKTPq0oeNq5fcNIJzgOvXyCWk1AXG5/nO6nkMTxEeZxS8jipyUP6vK3kYePzfKed4Dzw83xiOQ11SSuf5xMzfnbvjGbZ087NN59y3w/tM/C8s14b/3b1eaPrkfgZkAswvh/mOAPLnzE7bzzO6/P+yRyyPBza34Ql9ZV+8nk5qRN+Vu+i1w7z+jyj6XMO2jiOPFdtS45Sn1h4HMc6extfJDzP732Nu7tboJ7nweqH+xfB83FYkuGsWUMC1lQ+zyfb0Fl76x6H24RswxeVXNzllyzUXOaVbVjmkOXh0E4X7ty4XUpq3tiuLnpfY6Be0s89Huj2SxvrdB7WyQ/3L8HyW/W56CS/judhHS9o+iVXl1h4/EIK58Hn4DZoo24XweGH+zKXu098C/vfBbOGON0x4LRSL1vnO+pryHAlB1vnO5KpnO+IA893bvwdF2//s3m+I8cb9ybbIp7viEX6RUP7UVh20WufgmVyHBkKNX3W5Dr8fq7kjiHbaxjMKfO4t8vQFjsep+TvtJyw7LwKzisa53PQvuh9vQrO5732IHBeM+eMd/9zx3gBnDLnNbC9CG2p7QvgfMlrH7PsfBmcL2mcr0BbavsyOF/12v3B+bopZ3ziF3eM18Apc74OtjegLbV9DZzXvfYRy843wXld4/wDtKW2b4Lzj167DzjfNuOMl4Y7xlvglDnfBtufoC21fQuc73jtQ5adfwbnOxrnu9CW2v4ZnH/x2j3B+b4JZ3xS0x3jPXDKnO+D7QNoS23fA+eHXvuAZedH4PxQ4/wY2lLbj8D5V6/dDZyf3r0zHu+4Y3wCTpnzU7D9DdpS20/A+ZnX3mfZ+Tk4P9M4/w5tqe3n4PyH134EnF/erTP+5rvuGF+AU+b8EmxfQVtq+wU4v/baeyw7vwHn1xrnP6Ettf0GnPL3ZTqC87u7c8arC9wxvgWnzPkd2P4Nbantt+D83mvvsuz8AZzfa5z/gbbU9gdw/tdrtwPnT3fjjA9e5I7xIzhlzp/A9j9oS21/BOfPXnuHZecv4PxZ4/wV2lLbX8D5m9duDU6f746d8bqFgUF8SU6Z0wc/hAyD9o3a+pKc8ndotll2RoBT5kRnOl9wbSPAGem1W4Az/Z064/WL3TGiwClzpgdbtKa2UeCM8dpbLDtjwRmjcWbQ1DYWnBm9dlNwZr4zZ/ytHnDHyAROmTMz2LJoapsJnPd57U2WnVnBeZ/Geb+mtlnBmc1rPwzOHHfijL/1Q+4Y2cEpc+YAW05NbbODM5fX3mDZmRucuTTOPJra5gZnXq/9EDjzp94Zn9yD7hj5wClz5gdbAU1t84GzoNdeZ9lZCJwFNc4HNLUtBM7CXrseOIum1hmf/MPuGEXAKXMWBVsxTW2LgLO4115j2VkCnMU1zpKa2pYAZymvXQecpVPnvI0y0fkgOGXO0mAro6ntg+As67VXWXaWA2dZjbO8prblwCl/P6cmOBNS47ytMtEZD06ZMwFsFTS1jQdnRa/9lGVnJXBW1Dgra2pbCZxVvHY1cFZLuTMFykRnVXDemBNs1TW1rQrOGl57uWVnTXDW0DhraWpbE5y1vXZlcPpT6kyRMtFZB5wypx9sdTW1rQNO+Ts7Sy0764OznsbZQFPb+uB8yGtXAGejlDlTqEx0NgSnzNkIbA9ratsQnI299mLLzibgbKxxNtXUtgk4m3ntOHC2SIkzxcpEZ3NwypwtwNZSU9vm4GzltRdadrYGZyuNs42mtq3B2dZrlwVn+9s7U6FMdLYDp8zZHmwdNLVtB86OXvtJy85O4OyocXbW1LYTOB+RcxNwdr2dM1XKRGcXcMqcXcHWTVPbLuDs7rXnWXb2AGd3jbOnprY9wNnLa5cAZ5/knalUJjp7g1Pm7AO2vpra9gZnP6/9hGVnf3D20zgHaGrbH5zyt1+KgnNwcs5UKxOdg8Apcw4G2xBNbQeBc6jXnm3ZOQycQzXO4ZraDgPno177AXA+dmvnHSgTnSPAKXM+BraRmtqOAOcor/24ZedocI7SOMdoajsanGO9dgFwjr+V846Uic5x4JQ5x4Ntgqa248A50WvPsOycBM6JGudkTW0ngXOK184Hzml65x0qE51TwSlzTgPbdE1tp4JzhjzHsnMmOGdonI9rajsTnLO8dm5wztE571iZ6JwNTplzDtie0NR2NjjnSo0tO+eBc67GOV9T23nglL+HlR2cC4Odd6FMdC4Ap8y5EGyLNLVdAM7FXnuCZecScC7WOJdqarsEnMu8Nv7dQPmbR/i7o08lf26S2lsld54VYHNvyt0bczkwv2tZadYSqOMqmFxcMk8sPL4IHKvMOgI/Tlvpu3n95T76UmpdloasS9OQdXkasmZy7q3Vxv7qjrna7JgJ0UpN3Vtyx6PVsH5rDB8b3c8+RUGua5R8V8ExXwzpHaOGwDFxnWZ7k3nc3+te6y1bB7VYbyGXdanIZT1YNlh4ndgIk4trA+x38niEk+TYaGG/26Dsd3IffSm1rvXdW6utY8RGC9vihlRsi7h+mwxb5BghuW5SjhEbQnSM2AIF2KA5Rmz2lm2BWmy1kMuWVOSyFSzbLBwjtsPk4toG+912TTbbLex325T9Tu6jL6XWzb57a7WQVUV3zB0WtsXtqdgWd8D67bR0jJBcdyr5bg/RMWK3ZnvDY8Qub9luqMUeC7nsTkUue8Cy18IxYh9MLq69sN/J4/Lx2UhYZsgR2O/2Kvud3EdfSq27fPfWaiGrCu6Y+y1si/tSsS3uh/U7YOkYIbkeUPLdF6JjxCHN9obHCPmboIegFocNf98VrThul8thsByxcIw4CpOL6wjsd/I4/kzqqIX97oiy38l99KXUuiwNWZemIevyNGTFn0ndC6ut7zcNr0vgdeJIKo5HuH7HDB8b5XVCcpXxVyo5236dOAEFOKJ5nTjuLTsBtThpIZcTqcjlJFhOWXidOA2Ti+sU7HfyOP5M6rSF/e6Ust/JffSl1Hrcd2+tto4Rpy1si6dSsS3i+j1t6VxScn1aOUacCtEx4iwU4JTmGHHGW3YWanHOQi5nU5HLObCct3CMuACTi+s87HcXNNlcsLDfnVf2O7mPvpRaz/jurdXWz6QuWNgWz6diW8T1e8bSMUJylfG3KTnbPkZcggKc1xwjLnrLLkEtnrWQy6VU5PIsWC5bOEZcgcnFdRn2O3kcfyZ1xcJ+d1nZ7+Q++lJqvei7t1ZbP5O6YmFbvJyKbRHX76qlY4TkKuPvVXK2fYx4HgpwWXOMeM5b9jxsd3JD2/MWtrtb5aKzhBNZIogs6YgskUSWKCJLeiJLNJElhsgSS2TJQGTJSGTJRGTJTGTJQmS5j8iSlchyP5ElG5ElO5ElB5ElJ5ElF5ElN5ElD5ElL5ElH5ElP5GlAJGlIJGlEJHlASJLYSJLESJLUSJLMSJLcSJLCSJLSSJLKSLLg0SW0kSWMkSWskSWckSW8kSWOCJLPJElgchSgchSkchSichSmchShchSlchSjchSnchSg8hSk8hSi8hSm8hSh8jiJ7LUJbLUI7LUJ7I0ILI8RGRpSGRpRGR5mMjSmMjShMjS1PvKYGlGZGlOZGlBZGlJZGlFZGlNZGlDZGlLZGlHZGlPZOlAZOlIZOlEZOlMZHmEyNKFyNKVyNKNyNKdyNKDyNKTyNKLyNKbyNKHyNKXyNKPyNKfyDKAyDKQyDKIyDKYyDKEyDKUyDKMyDKcyPIokWUEkeUxIstIIssoIstoIssYIstYIss4Ist4IssEIstEIsskIstkIssUIstUIss0Ist0IssMIstMIsvjRJZZRJbZRJY5RJYniCxziSzziCzziSxPElkWEFkWElkWEVkWE1mWEFmWElmWEVmWE1lWEFmeIrKsJLKsIrKsJrKsIbKsJbKsI7KsJ7JsILJsJLJsIrJsJrJsIbJsJbJsI7JsJ7LsILLsJLLsIrLsJrLsIbLsJbLsI7LsJ7IcILIcJLIcIrIcJrIcIbIcJbIcI7IcJ7KcILKcJLKcIrKcJrI8TWQ5Q2Q5S2Q5R2Q5T2S5QGR5hshykchyicjyLJHlMpHlCpHlKpHlOSLL80SWF4gs14gsLxJZXiKyvExkeYXI8iqR5TUiy+tEljeILNeJLG8SWf5AZPkjkeUtIsvbRJY/EVneIbL8mcjyLpHlL0SW94gs7xNZPiCyfEhk+YjI8jGR5a9Elk+ILJ8SWf5GZPmMyPI5keXvRJZ/EFm+ILJ8SWT5isjyNZHlGyLLP4ks/yKyfEtk+Y7I8m8iy/dElh+ILP8hsvyXyPIjkeUnIsv/iCw/E1l+IbL8SmT5jcji+HgsPiJLGJElnMgSQWRJR2SJJLJEEVnSE1miiSwxRJZYIksGIktGIksmIktmIksWIst9RJasRJb7iSzZiCzZiSw5iCw5iSy5iCy5iSx5iCx5iSz5iCz5iSwFiCwFiSyFiCwPEFkKE1mKEFmKElmKEVmKE1lKEFlKEllKEVkeJLKUJrKUIbKUJbKUI7KUJ7LEEVniiSwJRJYKRJaKRJZKRJbKRJYqRJaqRJZqRJbqRJYaRJaaRJZaRJbaRJY6RBY/kaUukaUekaU+kaUBkeUhIktDIksjIsvDRJbGRJYmRJamRJZmRJbmRJYWRJaWRJZWRJbWRJY2RJa2RJZ2RJb2RJYORJaORJZORJbORJZHiCxdiCxdiSzdiCzdiSw9iCw9iSy9iCy9iSx9iCx9iSz9iCz9iSwDiCwDiSyDiCyDiSxDiCxDiSzDiCzDiSyPEllGEFkeI7KMJLKMIrKMJrKMIbKMJbKMI7KMJ7JMILJMJLJMIrJMJrJMIbJMJbJMI7JMJ7LMILLMJLI8TmSZRWSZTWSZQ2R5gsgyl8gyj8gyn8jyJJFlAZFlIZFlEZFlMZFlCZFlKZFlGZFlOZFlBZHlKSLLSiLLKiLLaiLLGiLLWiLLOiLLeiLLBiLLRiLLJiLLZiLLFiLLViLLNiLLdiLLDiLLTiLLLiLLbiLLHiLLXiLLPiLLfiLLASLLQSLLISLLYSLLESLLUSLLMSLLcSLLCSLLSSLLKSLLaSLL00SWM0SWs0SWc0SW80SWC0SWZ4gsF4ksl4gszxJZLhNZrhBZrhJZniOySP97ZYkGg9yi4fFMsCxMeW663/9tyZz0+DVveRg850VvWbhm7GtgeMFrv+gLfi7W6JqFGuE8frgvc8WA4UXfvbc85+OxXCWyXCGyXCayPEtkuURkuUhkeYbIcoHIcp7Ico7IcpbIcobI8jSR5TSR5RSR5SSR5QSR5TiR5RiR5SiR5QiR5TCR5RCR5SCR5QCRZT+RZR+RZS+RZQ+RZTeRZReRZSeRZQeRZTuRZRuRZSuRZQuRZTORZRORZSORZQORZT2RZR2RZS2RZQ2RZTWRZRWRZSWR5Skiywoiy3IiyzIiy1IiyxIiy2IiyyIiy0IiywIiy5NElvlElnlElrlElieILHOILLOJLLOILI8TWWYSWWYQWaYTWaYRWaYSWaYQWSYTWSYRWSYSWSYQWcYTWcYRWcYSWcYQWUYTWUYRWUYSWR4jsowgsjxKZBlOZBlGZBlKZBlCZBlMZBlEZBlIZBlAZOlPZOlHZOlLZOlDZOlNZOlFZOlJZOlBZOlOZOlGZOlKZOlCZHmEyNKZyNKJyNKRyNKByNKeyNKOyNKWyNKGyNKayNKKyNKSyNKCyNKcyNKMyNKUyNKEyNKYyPIwkaURkaUhkeUhIksDIkt9Iks9IktdIoufyFKHyFKbyFKLyFKTyFKDyFKdyFKNyFKVyFKFyFKZyFKJyFKRyFKByJJAZIknssQRWcoTWcoRWcoSWcoQWUoTWR4kspQispQkspQgshQnshQjshQlshQhshQmsjxAZClEZClIZClAZMlPZMlHZMlLZMlDZMlNZMlFZMlJZMlBZMlOZMlGZLmfyJKVyHIfkSULkSUzkSUTkSUjkSUDkSWWyBJDZIkmsqQnskQRWSKJLOmILBFElnAiSxiRxUdkcYgsvzk8ll+JLL8QWX4msvyPyPITkeVHIst/iSz/IbL8QGT5nsjybyLLd0SWb4ks/yKy/JPI8g2R5Wsiy1dEli+JLF8QWf5BZPk7keVzIstnRJa/EVk+JbJ8QmT5K5HlYyLLR0SWD4ksHxBZ3ieyvEdk+QuR5V0iy5+JLO8QWf5EZHmbyPIWkeWPRJY/EFneJLJcJ7K8QWR5ncjyGpHlVSLLK0SWl4ksLxFZXiSyXCOyvEBkeZ7I8hyR5SqR5QqR5TKR5VkiyyUiy0UiyzNElgtElvNElnNElrNEljNElqeJLKeJLKeILCeJLCeILMeJLMeILEeJLEeILIeJLIeILAeJLAeILPuJLPuILHuJLHuILLuJLLuILDuJLDuILNuJLNuILFuJLFuILJuJLJuILBuJLBuILOuJLOuILGuJLGuILKuJLKuILCuJLE8RWVYQWZYTWZYRWZYSWZYQWRYTWRYRWRYSWRYQWZ4ksswnsswjsswlsjxBZJlDZJlNZJlFZHmcyDKTyDKDyDKdyDKNyDKVyDKFyDKZyDKJyDKRyDKByDKeyDKOyDKWyDKGyDKayDKKyDKSyPIYkWUEkeVRIstwIsswIstQIssQIstgIssgIstAIssAIkt/Iks/IktfIksfIktvIksvIktPIksPIkt3Iks3IktXIksXIssjRJbORJZORJaORJYORJb2RJZ2RJa2RJY2RJbWRJZWRJaWRJYWRJbmRJZmRJamRJYmRJbGRJaHiSyNiCwNiSwPEVkaEFnqE1nqEVnqEln8RJY6RJbaRJZaRJaaRJYaRJbqRJZqRJaqRJYqRJbKRJZKRJaKRJYKRJYEIks8kSWOyFKeyFKOyFKWyFKGyFKayPIgkaUUkaUkkaUEkaU4kaUYkaUokaUIkaUwkeUBIkshIktBIksBIkt+Iks+IkteIkseIktuIksuIktOIksOIkt2Iks2Isv9RJasRJb7iCxZiCyZiSyZiCwZiSwZiCyxRJYYIks0kSU9kSWKyBJJZElHZIkgsoQTWcI0lpfMWipEw5xyU+7emMuB+V3Ly2YtgbeFXoHJxSXzxMLjz4HjFQv5vOy7ef3lPvpSan0+DVlfuMdWd96VhrcrC+uSEK2si3tLbr/B9XvV8D7snp9FQa4y/kolZzmeuIb0jlFDYN99HQogc8o87vHsNW/Z61CLN8zWomK04rhdLm+A5bqF49mbMLm4rsN+J49vBsebFva768p+J/fRl1LrrjRkPZiGrK/dY2s0LHsdlslxQx6LcpK+D3Ocm48r4Y55N9780Ja50OK7x5ZoJ/h4Ew2Ph8GyMOW57jn555mTHo/QPEf6RjjB/XDd01lYd5zHD/dlrhgwRBBYwjSWSLOWwDFevsd0IJ9IcIgpCh4z/Pob+PWuaI0DX39l/mhwxJh1BH7lLVbjiIGvMn8sODKYdQS+r0GHe0tu/80AloxmLYFtJBPMJa6McF8eTweOTGYdgf0mo7L+ch99KbVGpSFr9D22Wtiu+rtjZjY7ZuD7Gqype0tuv8kM65fFrOXG9zWSq4yv1hbPP2wc37Mmre5Nebo3fG8H+0k7Ah7H13t5/J3MSevkjnm/WX8gT3S5t+TylPnd1w05Jg7oN7ptvz4j+41u2m+CD8bIqqxXGIyTDtp4nLCRT3aYKyvM5d7w/dHs8JiN198cGge+/sr80i8a2tlgWU7Fi+eK+Fx5bZX+Ud66RZhdtwo4l9yS24YiYN1hG2o1pvfQQX2UbUjGDdeMi+e96ZR+WBM8v1JdxgJOD8AwDxLhTR7pTZ5eUwQXKm9cZYDH/w92mWj/Nd8CAA==", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -84,7 +84,7 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+2dB3hU1RaFDwmEqmKjl9A73JseaiCEFnqxISKBCSJKBIOKz957Q0REREREROy99957fU99vft6972zwx64HCdkyppk1vfmfN9ms2fynVn/unNn7txz7rlvNDJmlQ1pkjJsNNb/h+smTp3l1G1sNAvUbZ26nVO3d+oOTt3RqTs5dWen7uLUXZ0626m7OXV3p+7h1D2dupdT93bqPk7d16n7OXV/px7g1AOdepBTD3bqIU7tObXv1DlOnevUeU6dr7W8L4z6K03eB7Lt2+k27qDbspNusy66bbJ1G3RXr3uqp73Vu77qUX/1YqAyD1Y2TxlyVGueagrrK3D0Fjp1kVMXO/VQpx7m1MOdeoRTj3TqUU5d4tSjnXqMU5c69VinLnPqcU493qknOPVEp57k1OVOPdmppzj1VKee5tTTnXqGU8906llOPdup55jd70d5LNvsbPI+KNTtXazbdZhuvxG6nUbp9hitvpeqv2Xq43j1a6L6Uq78U5RzmvLMUN2zVN8c1ZJl9tw/vjM79xHJ7TS319xBc0fNnTR31txFc1fN2Zq7ae6uuYfmnpp7ae6tuY/mvpr7ae6veYDmgZoHaR6seYhmT7OvOUdzruY8zfmB/g6xcWgEbwr0bwo1F2ku1jxU8zDNwzWP0DxS8yjNJZpHax6juVTzWM1lmsdpHq95guaJmidpLtc8WfMUzVM1T9M8XfMMzTM1z9I8W/OcgDeH2Tjc7Nn0q7mGR1quV5CXFyrMCfm5/gIvp7iiKN/Ly68oKPKL/Pyi/EU5Rbm5oaK8osLiiuJCr9jPyw35lfnFuZXeznZEoC8vwZZMnXNJdB5JonMeic6jSHTOJ9F5NInOBSQ6K0h0LiTRuYhEZ4hEZyWJzsVAneFjydbanxxjyjHVYZqP0DxX85Ga52k+SvN8zUdrXqC5QvNCzYs0hzRXal5sdh/LHWNjidmzoT08FuehH/YwrPFYZZHHlto4zmHJdFikDy+B1sZlSaC3tkCPD2+UnP0pgn9eItTtTASdcfbWHujfEfXrnxcvdQdTi844eusI9G9u/fvnxUPdyexFZ4y9dQb6d2TD+OfFSt3F1KEzht66Av2b13D+ebFQZ5sodEbZWzegf0c1rH9etNTdTZQ6o+itB9C/+Q3vnxcNdU8Tg846eusF9O/o1PDPq4u6t4lR51566wP0b0Hq+OftjbqviUNnLb31A/pXkVr+ebVR9zdx6ozQ2wCgfwtTzz8vEvVAk4BOp7dBQP8WpaZ/nks92CSoM9DbEKB/odT1z9uD2gB0am8+0L/K1PavBlf+yTEgnba3XKB/i1PfP2l+HrCv4DmnRP07hsQ/4Hkify7QvyUk/gHPc/jzgP4dS+If8He6Px/o31IS/4C/M/0FQP+OI/EP+DvJXwj073gS/4DH+X4I6N8yEv+Ax6n+YqB/VST+AY+z/CVA/04g8Q94nOAvBfq3nMQ/4PecfzzQvxUk/gE/p/0qoH8nkvgH/JzxlwP9qybxD7if+CcC/VtZT/4lfJwK3BbA94y/sv7efwnNvyowuPlXhcDtuppk/lWRwc2/Kgb6dy3J/KuhBjf/ahjQvzUk86+GG9z8qxFA/64jmX810uDmX40C+reWZP5ViYlCZ5S9jQb6dz3J/KsxJkqdUfRWCvRvHcn8q7EmBp119FYG9O8GkvlX40yMOvfS23igf+tJ5l9NMHHorKW3iUD/biSZfzXJxKkzQm/lQP82kMy/mmwS0On0NgXo300k86+mmgR1BnqbBvRvI8n8q+kGoFN7mwH072aS+VczDUin7W0W0L9NJOdPZwP7Wg08f3oLiX/A80T+GqB/m0n8A57n8NcC/buVxD/g73R/HdC/LST+AX9n+uuB/t1G4h/wd5K/AejfVhL/gMf5/kagf7eT+Ac8TvU3Af3bRuIf8DjL3wz07w4S/4DHCf4WoH/bSfwDfs/5W4H+3UniH/Bz2t8G9G8HiX/Azxl/O9C/u0j8A+4n/g6gf3eTzL9aBtwWwPeMj/QvvEZWeN1rmXMWXN92mdlzTdcMzdKqbJxg9mzo9cCWA7dBmDVD+1uuLFUBphU2TtT3UqapvZUANTVx+u76/ddIyXXI9KGUW98r8HBKrZvlPJUy61FFeDol1nmq5U8afP2kvfxZg65LVMefNth6P17drUHW0fGia/W+Po0XfavXdV+82Fq9rafixd7qZZ0SL76W9PU/vPhbUtfV8BJryPUqdv2ucI9nvcSan58EjejjxWRdN6EPpdz1CIGHU2qev/NUysyfj/B0SsxLr+VPGny+917+rEHnUdfxpw02P9mruzXIvF8vulbv82m96Fu9zlP1Ymv1Nv/Ti73Vy7xKL76W9PmKXvwtqfMAvcQacn5d0o4X5xBozEiCxmToXAHU2Sigszrw/1aam5ud9xyVlhF4LNNhax54PtyyAv8vwejNz8L76cl562YBDuPw7qvP76/1sqrqJZWrSleEFlSHFk2tqg4FTQyfBM+M0FGjwOPBk+WNAy+e5TwfNDb8XFOz24RdrcRA3PCDfaLfudW4vrzMSCaY1P5UaBTQGH4jrLRxko2TAwz7mO9v/HBLwl7lJWuvygpwhFtwr5LnG2NfNzf46WQCfpsIvpnA68seHv7UWxyqnr6y4rglC8tDqyJts8wI/QY/Hd0PgeB2DD+X1J04PEQYfJPJ0OBJmk/WvJ+NU2yscnRkOHoSHf4E7kT+KQb7IeIOWxrDc2iBft8k04OVSfIArfMkg/3ATw+Lp4fFo2npYfHYess2Ueyn6WHxXS09LB5bb+lh8dh6Sw+Lx9hb4n2lh8XjbNpNeli8RrUXd0sPi8fW0sPisfWWHhaPrbf0sHhsvaWHxWPrLT0sHltv6WHx2HpLD4unnsZkDYBl6P9PtfEDs7t11BwcDQ2OkEYaXPl/GKJuEeAwDm94iLq11qHjl1SXLVu4YtUJdoh6ctXi4EBTU81NIvQT9FVa48D/mwT8dEepswK6SjDMOc3N7mF5E3jtYCsJ/L95QEsLrJaafatl4LXCusKv0zLwfNOAjpZYHTXjei0c/qCGJL1uDX+rOvhbRdDRqh75g1NWWjg6g/t++LkGm0WR6GDqaQb/pZEMnaeT6DyDROeZJDrPItF5NonOc0h0nkui8zwSneeT6LyAROeFJDovItF5MYnOS0h0Xkqi8zISnZeT6LyCROeVJDqvItF5NYnOa0h0ribReS2JzjUkOq8j0bmWROf1JDrXkei8gUTnehKdN5Lo3ECi8yYSnRtJdN5MonMTic5bSHRuJtF5K4nOLSQ6byPRuZVE5+0kOreR6LyDROd2Ep13kujcQaLzLhKdd5PovIdE570kOu8j0Xk/ic4HSHQ+SKLzIRKdD5PofIRE56MkOh8j0fk4ic4nSHQ+SaLzKYzOyrycvKTqfJrEz2dIdD5LovM5Ep3Pk+h8gUTniyQ6XyLR+TKJzldIdL5KovM1Ep2vk+h8g0TnmyQ63yLR+TaJzndIdL5LovM9Ep3vk+j8gETnhyQ6PyLR+TGJzk9IdH5KovMzEp2fk+j8gkTnl0nSmeHo9BJrNYsqoJh/SMKcAWT+EQlzJpD5KxLmxkDmr0mYmwCZvyFhzgIy/5iE+Rgg809ImE8DMv+UhPl0IPPPSJjPADL/nIT5TCDzL0iYzwIy/5KE+Wwg869ImM8BMv+ahPlcIPNvSJjPAzL/loT5fCDz70iYLwAy/56E+UIg87ckzBcBmf9AwnwxkPmPJMyXAJn/RMJ8KZD5zyTMlwGZ/0LCfDmQ+a8kzFcAmf9GwnwlkPnvJMxXAZn/QcJ8NZD5nyTM1wCZ/0XCvBrI/G8S5muBzP8hYV4DZP6OhPk6IPN/SZjXApllsgYD8/VA5kYkzOuAzBkkzDcAmTNJmNcDmRuTMN8IZG5CwrwByJxFwnwTkLkpCfNGIHMzEuYVQObmJMw3A5lbkDBvAjK3JGG+BcjcioR5M5B5HxLmW4HM+5IwbwEy70fCfBuQuTUJ81Yg8/4kzLcDmQ8gYd4GZD6QhPkOIPNBJMzbgcwHkzDfCWRuQ8K8A8jcloT5LiBzOxLmpUDm9iTMdwOZO5Aw3wNk7kjCfC+QuRMJ831A5s4kzPcDmbuQMD8AZO5KwvwgkDmbhPkhIHM3EuaHgczdSZgfATL3IGF+FMjck4T5MSBzLxLmx4HMvUmYnwAy9yFhfhLI3JeE+Skgcz8S5qeBzP1JmJ8BMg8gYX4WyDyQhPk5IPMgEubngcyDSZhfADIPIWF+EcjskTC/BGT2SZhfBjLnkDC/AmTOJWF+FcicR8L8GpA5n4T5dSBzAQnzG0DmQhLmN4HMRSTMbwGZi0mY3wYyDyVhfgfIPIyE+V0g83AS5veAzCNImN8HMo8kYf4AyDyKhPlDIHMJCfNHQObRJMwfA5nHkDB/AmQuJWH+FMg8loT5MyBzGQnz50DmcSTMXwCZx5MwfwlknkDC3BTIPJGEuRmQeRIJc3MgczkJcwsg82QS5pZA5ikkzK2AzFNJmPcBMk8jYd4XyDydhHk/IPMMEubWQOaZJMz7A5lnkTAfAGSeTcJ8IJB5DgnzQUDmQ0iYDwYyHwpkPlj7aaTMck9IuUei3DNQ7qEnvwfl95H8XpDjZzmelOMrOd6Q71/5PpLPZ/m8kv1X3s+yfYO8bWy0tdHORnsbHWx0tNHJRmcbXWx0tZFto5uN7jZ62Ohpo5eN3jb62Ohro5+N/jYG2BhoY5CNwTaGiBc2fBs54rGNPBv5NgpsFNooslFsY6iNYTaG2xhhY6SNUap3tI0xNkptjLVRZmOcjfE2JtiYaGOSjXIbk21MsTHVxjQb023MsDHTxiwbs23MsXGq+iD3QpV7g35l42sb39iQewvKvfbk3nNyLza5N5ncq0vuXSX3cpJ7G8m9fuTeN3IvGLk3yrc25N4Zci8JubeC3GtA1t6XtehlbXZZq1zW7pa1rGVtZ1nrWNb+lbVwZW1Y2diydqispSlrS8pai7L2oKzFJ2vTyVptsnaZrOUla1vJWk+y9pGsBSRr48haMbJ2iqwlImtryFoTsvaCrEUg1+bLtepy7bZcyyzX9sq1rnLtp1wLKdcGyrVycu2YXEsl1xbJtTZy7YlciyHXJshcfZm7LnO5ZW6zzPWVua8yF1TmRspcQZk7J3PJZG6VzDWSuTcyF0XmZshcBRm7l7FsGduVsU4Z+5OxsJqxIRsydiDn0uXcspxrlXOPci5Ozk3JuRo5dyG/5eW3rfzWk98+8ltAjo3lWFGOneRYQr5b5btGPnvls0j2zXD7H2tTeVqwTwEA", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -153,7 +153,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index 15268ac7d51..e2d89237085 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -72,7 +72,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -141,7 +141,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json index 4ebe956d4ae..8590b945486 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json @@ -15,7 +15,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -80,7 +80,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "H4sIAAAAAAAA/+1dB5wUxdOd3bsj55w5JOedC3AE9QiC5KCAiIBw3AGSo4CCgAFMgIqoiIiomLNixoQJMYCKAiqoIAjmHAhftbyR3mH9q2z1OvXR8/sVb6bZ63mvq6anamd2Zkk+x6lFppYQWZgsGevedopvOx/WUw792R+fV0s5svJkFcgqan/n/X8lsspkVciq4v/D2v9XI6tOlkpWw4leQsBsYHqkWUZGbvO0XDfdHRJJazE0KzOSkTm0WZab5WZmZQ5Ly0pPz83KyGreYmiL5pEWbkZ6rpuX2SI9L3Joqan1FYlzMcmzlhCetYXwrCOEZ10hPOsJ4VlfCM8GQng2FMKzkRCejYXwbCKEZ1MhPCNCeLpCeKYJ4ZkuhGeGEJ6ZjDwVN1XjpKI/VdcccA7VNgorACsCKwErA6sAqwKrAasDU4E1gMcBawJrAWsD6wDrAusB6wMbABsCGwEbA5sAmwIjQBeYBkwHZgAztf6akTV3DtVsSc6hus3R2k36NsuREYMthPBsKYRnKyE8WwvhebwQnicI4XmiEJ7ZQni2EcKzrRCe7YTwbC+E50lCeHZw+HPhEuhP5XsqJ8wCtgC2BLYCtgYeDzwBeCIwG9gG2BbYDtgeeBKwg3M4F+1IdrJzKBdV1w68XNRr9zgXRXui8neFncg6g1uKxs1rT3IO+1tf/DEQiW9xO/H1FUnWeHYBdgVnbx/dyLqT9SDrSdaLrDfZKWSnkvUh60vWj+w0sv5kp5MNIDuDbCDZILLBZGeSDSEbSpZDNowslyyPbDjZCLKRZGeRjSIbTTaGbCzZOLLxZBPIJpJNIptMNoVsKtnZZNPIppPNIDuH7FyymWSzyM4jm002h2wu2flkF5BdSHYR2Tyy+WQXk11CdinZZRiDy7VxWgqHFnQOx4C35NPWs4GROBfvmhxnnyng72joaHoKavtMco7Um6y1ef/vXTMshnFIZuWcka7vy1v8x1u2tu7tvwA4qWV47uQ2UyaP6Ddy8tjcSZNCWi9ez+1i9Oypzucc9nA2i6pIWkFt5P6JqnwaFmDlkhFRXPL/Cy4FNC4FWbkcivpCzH2qPgpr/D2tHvfC2v8X0rQV5uXhhpzooy7bx8Hbr9XPul+r37H6rX6r3+q3+q1+q9/qt/qtfqvf6rf6rX6r3+q3+q1+q9/qt/qtfqvf6rf6rX6r3+q3+q1+qz/b6rf6rX6r3+q3+q1+q9/qt/qtfqvf6rf6rX6r3+q3+q1+q9/qt/qtfqvf6rf6rX6r3+r/1/oLam0p/zGXwhqH/Ma4ZEQKO7HjgFlzpGCM/ainZQwMHd5nUWZtqs8SzDoUXe/JHmo5T9NVQhs/E/st7ttvUd9+1WeKaBzO07h6f5ukfWZa6LAfcjU/cPte9VFS4+4990Q/7j0NJTX+pXh5qAeUOqVj8Cil8fD2X1pr89b1OaEsK7cM9dDUP54s5edWVuNRBuve5wpq6yW0tvK+sVRtFXy6VFtFrJfR2sIx9uFxKa+1eU+6qaC1eePj9ZsfvL1tffy8vrKBkfiWNJ2Lx0fnrJZK2nqSj38hTXMljWdlXp5/HMc6jwLafitr+63Cut9Dz9mp7EQvId92trZeReNSjZXLoTGorvWfre1D328q735dfb8hmLcPrz1JW1+gDVDq4dU/49njrGKnaozP6euVfX9TWPv/qoY1V9N4ZGvb3r7UsXy+prVqDN76udv7f/04MTFXV9F4ePsvpW17PPR5hTlW/xi/qr7x87Z1X6b4xoufy6Fczb9vPa/yxkvPq/zHONvAhH2dB/mRg6noZwHZQrJFZFeQXUl2FdlisqvJlpBdQ3Yt2XVkS8muJ1tGdgPZcrIbyVaQ3US2kuxmslvIbiVbRXYb2e1kd5DdSXYX2d1k92CQ1DiFwaWAc3h7oW97kW/7Ct/2lb7tq3zbi33bV/u2l/i2r/FtX+vbvs63vdS3fb1ve5lv+wbf9nLf9o2+7RW+7Zt82yt92zf7tm/xbd/q217l277Nt327b/sO3/advu27fNt3+7bvcQ4/vM5bvCQkGxiJb4k6ZuJ97OsCxr5+T+EtJv5q/I6WZ26eWiLuQqa+lC8WMY7fvsCP3x9du1fE31caNLtXMo7f/iCPX8afPN2r4usroml2FzOO34Ggjl9aFE/36qPvK+LT7C5hHL+DARy/ZnlH8HSvObq+smJodq9lHD+VTQdq/LJi8nSv+/d9Nf8Lze5SxvELBWn8mv8lT/f6f9dX2v/Q7C5jHL9wUMav+f/k6d7wz/vK+RvN7nLG8UsKwvg1/1ue7o3/rK/IP9DsrmAcv+T/evwi/4ine9Pf95X5DzW7KxnHL+W/HL+Mf8zTvfl/9pWR9y80u7cwjl++/2r8mv8rnu6tf91X1r/U7K5iHL/8/8H4tcj71zzd22L3FTkKze7tjONXINHjFzkqnu4dR/blHqVm907G8SuYyPEbdtQ83bui+0qPQ7N7N+P4FUrQ+KXlxcXTvcfh+y5R/84u3vErnKDxi8S3uIzfs7n7GceviJDxY/yeyD3IOH5FhYwf4/ccrl7zxzt+xYSMH2Od7iYxjl9xIePHWGe6KYzjV0LI+DHWSW5+xvErKWT8GPN8tyDj+JUSMn6MeapbmHH8SgsZP8Y8yy3KOH5lhIwfY57gFmccv7JCxo/xPOeWZBy/ckLGj3Gedkszjl95IePHOM+4ZRnHr4KQ8WM8TlzGmHE5x0/d6KrfqKy+c1Lftanv7tR3luo7UPXdr/oueZVz6L47dS1CXdtQ13TUNaIVzqH7/dQ1RnXNUl2rVdd+1TVvdQ1d3Tug7kVQ92CoezrUvSzq3hh1T5C6x0jdW6Xu1VrgRC/+e1Djjbt7j76vI+4nSdSruu/l6yui871PW/d+/BHW2rxjKZ8BTY5vP/5xLOYYvNHZlJPuM9Dv/Q5f8JvSfT+/j6ImdZNjGolzSXKOfJ84f8ymRRj7dv0N5ngf+lGBtzwAfFBr837pEHai35CulpA2tmqCOqj9XUjDkNbHQe1vYn0m9Bf96L/e9f7eewe9wzsmEQMTasTohOnd8a4cuMY5fAf8g9o+HM0J+r7jPcs+4PBNgA86Zg5I7izlIUdelvKQYyZLeVhbt1lKnH0+hAHl7vcRJ9hZitL9CL+PjGYpjzjmsxTuiSuOCdZkVvKfZTyrgY9qbf8m42nrHOkrf8bT1vn7jCdWPzbj+evlz4xntTaYavtR58iMh+s3V7EOonjP/qsZeT3qmDkAuSeh1U5iJvh4eT7GyFNNFvqB6/i4RuJc/moMIvEtLucYmOL4uGMmntgD6gmHb+JIVNnwBF9fUWXDk9q6LRvi7PMJDCh3v085wS4blO6n+H1ktGx4ipGnwLLBjUFXXNnwNHCN1mbLBp4+E1I2PO1Elw1rHFllw9OMvNY4Zg5u7knoaScxE3y8PJ9hjFepZcMzAjg+65iJJ/aAes7hmzgSVTY8x9dXVNnwvLZuy4Y4+3wOA8rd7wtOsMsGpfsFfh8ZLRteYOQpsGxIi0FXXNmwFvii1mbLBp4+E1I2rHWiy4YXHVllw1pGXi86Zg5u7klorZOYCT5eni/x8UyTWja8JIDjy46ZeGIPqFccvokjUWXDK3x9RZUNr2rrtmyIs89XMKDc/a5zgl02KN3r+H1ktGxYx8hTYNmQHoOuuLLhNeB6rc2WDTx9JqRseM2JLhvWO7LKhtcYea13zBzc3JPQa05iJvh4eb7OxzNdatnwugCObzhm4ok9oN50+CaORJUNb/L1FVU2vKWt27Ihzj7fxIBy97vBCXbZoHRv4PeR0bJhAyNPgWVDRgy64sqGjcC3tTZbNvD0mZCyYaMTXTa87cgqGzYy8nrbMXNwc09CG53ETPDx8nyHj2eG1LLhHQEc33XMxBN7QG1y+CaORJUNm/j6iiob3tPWbdkQZ5+bMKDc/b7vBLtsULrf5/eR0bLhfUaeAsuGzBh0xZUNm4FbtDZbNvD0mZCyYbMTXTZscWSVDZsZeW1xzBzc3JPQZicxE3y8PLfy8cyUWjZsFcDxA8dMPLEH1IcO38SRqLLhQ76+osqGj7R1WzbE2eeHGFDufrc5wS4blO5t/D4yWjZsY+QpsGxoFoOuuLJhO/Bjrc2WDTx9JqRs2O5Elw0fO7LKhu2MvD52zBzc3JPQdicxE3y8PD/h49lMatnwiQCOnzpm4ok9oHY4fBNHosqGHXx9RZUNO7V1WzbE2ecODCh3v585wS4blO7P+H1ktGz4jJGnwLKheQy64sqGXcDdWpstG3j6TEjZsMuJLht2O7LKhl2MvHY7Zg5u7klol5OYCT5enp/z8WwutWz4XADHPY6ZeGIPqL0O38SRqLJhL19fUWXDF9q6LRvi7HMvBpS73y+dYJcNSveX/D4yWjZ8ychTYNmQFYOuuLLhK+DXWpstG3j6TEjZ8JUTXTZ87cgqG75i5PW1Y+bg5p6EvnISM8HHy/MbPp5ZUsuGbwRw/NYxE0/sAfWdwzdxJKps+I6vr6iy4Xtt3ZYNcfb5HQaUu98fnGCXDUr3D/w+Mlo2/MDIU2DZ0CIGXXFlw4/An7Q2Wzbw9JmQsuFHJ7ps+MmRVTb8yMjrJ8fMwc09Cf3oJGaCj5fnz3w8W0gtG34WwPEXx0w8sQfUrw7fxJGosuFXvr6iyobftHVbNsTZ568YUO5+f3eCXTYo3b/z+8ho2fA7I0+BZcOQGHTFlQ37gPu1Nls28PSZkLJhnxNdNux3ZJUN+xh57XfMHNzck9A+JzETfLw8D/DxHCK1bDgggONBx0w8sQeU6vAo+/rPygadcyTORecb0jZs2RBvn6FDA8rdbzjEGPyGdIdD7D4yWjaEGQ8ogWXD0Bh0xZUNSRjgZC32bNnA02dCyoakUHTZkBySVTYkMU7MySEzBzf3JJQUSswEHy/PFD6eQ6WWDSmh4HPMZyie2AMqv8CyIb+hsqGALRt4nVTAQNlQMOBlg9JdUFjZUPDYLhtyYtAVVzYUwgAXtmWDzLKhkK9sKCysbCjEODEXDpk5uLknoUJCyoYifDxzpJYNRULB51hUStlQTGDZUMxQ2VDclg28TipuoGwoEfCyQekuIaxsKHFslw3DYtAVVzaUxACXsmWDzLKhpK9sKCWsbCjJODGXCpk5uLknoZJCyobSfDyHSS0bSoeCz7GMlLKhrMCyoayhsqGcLRt4nVTOQNlQPuBlg9JdXljZUP7YLhtyY9AVVzZUwABXtGWDzLKhgq9sqCisbKjAODFXDJk5uLknoQpCyoZKfDxzpZYNlULB51hZStlQRWDZUMVQ2VDVlg28TqpqoGyoFvCyQemuJqxsqHZslw15MeiKKxuqY4BTbdkgs2yo7isbUoWVDdUZJ+bUkJmDm3sSqi6kbKjBxzNPatlQIxR8jsdJKRtqCiwbahoqG2rZsoHXSbUMlA21A142KN21hZUNtY/pssHlTO3/s7KhDga4ri0bZJYNdXxlQ11hZUMdxom5bsjMwc09CdURUjbUY+PpRqSWDfVCwedYX0rZ0EBg2dDAUNnQ0JYNvE5qaKBsaBTwskHpbiSsbGh0bJcNbgy64sqGxhjgJrZskFk2NPaVDU2ElQ2NGSfmJiEzBzf3JNRYSNnQlK9scKWWDU1DwecYkVI2uALLBtdQ2ZBmywZeJ6UZKBvSA142KN3pwsqG9GO7bEiLQVdc2ZCBAc60ZYPMsiHDVzZkCisbMhgn5syQmYObexLKEFI2NOMrG9Kklg3NQsHn2FxK2ZAlsGzIMlQ2tLBlA6+TWhgoG1oGvGxQulsKKxtaHttlQ3oMuuLKhlYY4Na2bJBZNrTylQ2thZUNrRgn5tYhMwc39yTUSkjZcDxf2ZAutWw4PhR8jidIKRtOFFg2nGiobMi2ZQOzkwyUDW0CXjYo3W2ElQ1tju2yISMGXXFlQ1sMcDtbNsgsG9r6yoZ2wsqGtowTc7uQmYObexJqK6RsaM9XNmRILRvah4LP8SQpZUMHgWVDB0NlQ0dbNvA6qaOBsuHkgJcNSvfJwsqGk4/tsiEzBl1xZUMnDHBnWzbILBs6+cqGzsLKhk6ME3PnkJmDm3sS6iSkbOjCVzZkSi0buoSCz7GrlLKhm8CyoZuhsqG7LRt4ndTdQNnQI+Blg9LdQ1jZ0OPYLhuaxaArrmzoiQHuZcsGmWVDT1/Z0EtY2dCTcWLuFTJzcHNPQj2FlA29+cqGZlLLht6h4HM8RUrZcKrAsuFUQ2VDH1s28Dqpj4GyoW/Aywalu6+wsqHvsV02NI9BV1zZ0A8DfJotG2SWDf18ZcNpwsqGfowT82khMwc39yTUT0jZ0J+vbGgutWzoHwo+x9OllA0DBJYNAwyVDWfYsoHXSWcYKBsGBrxsULoHCisbBh7bZUNWDLriyoZBGODBtmyQWTYM8pUNg4WVDYMYJ+bBITMHN/ckNEhI2XAmX9mQJbVsODMUfI5DpJQNQwWWDUMNlQ05tmzgdVKOgbJhWMDLBqV7mLCyYdixXTa0iEFXXNmQiwHOs2WDzLIh11c25AkrG3IZJ+a8kJmDm3sSyhVSNgznKxtaSC0bhoeCz3GElLJhpMCyYaShsuEsWzbwOuksA2XDqICXDUr3KGFlw6hju2wYEoOuuLJhNAZ4jC0bZJYNo31lwxhhZcNoxol5TMjMwc09CY0WUjaM5SsbhkgtG8aGgs9xnJSyYbzAsmG8obJhgi0beJ00wUDZMDHgZYPSPVFY2TDx2C4bhsagK65smIQBnmzLBpllwyRf2TBZWNkwiXFinhwyc3BzT0KThJQNU/jKhqFSy4YpoeBznCqlbDhbYNlwtqGyYZotG3idNM1A2TA94GWD0j1dWNkw/dguG3Ji0BVXNszAAJ9jywaZZcMMX9lwjrCyYQbjxHxOyMzBzT0JzRBSNpzLVzbkSC0bzg0Fn+NMKWXDLIFlg845EucS0niep23YsiHOPpWT1IBy9zs7FOyyQemeHWL3kdGyYTbjASWwbBgWg664smEOBniuFnu2bODpMyFlw5xQdNkwNySrbJjDODHPDZk5uLknoTmhxEzw8fI8n42nO0xq2XB+KPgcLzAUT+wBdWGIb+JIVNlwoaGy4SJbNvA66SIDZcO8gJcNSvc8YWXDvGO7bMiNQVdc2TAfA3yxLRtklg3zfWXDxcLKhvmME/PFITMHN/ckNF9I2XAJX9mQK7VsuCQUfI6XSikbLhNYNlxmqGy43JYNvE663EDZsCDgZYPSvUBY2bDg2C4b8mLQFVc2LMQAL7Jlg8yyYaGvbFgkrGxYyDgxLwqZObi5J6GFQsqGK/jKhjypZcMVoeBzvJKToyKXQtaF7ABZV6C3g25kBci6A3sAewJ7AXsDTwGeCuwD7AvsBzwN2B94OnAA8AzgQOAg4GDgmcAhwKHAHOAwYC4wDzgcOAI4EngWcBRwNHAMcCxwHHA8cAJwInAScDJwCnAq8GzgNOB04AzgOcBzgTOBs4DnAWcD5wDnAs8HXgC8EHgRcB5wPvBi4CXAS4GXAVOdQ8vj2H4W+DLwDeC7wA+AnwL3AL8F/gI8CMwXOoRFgWWAlYHHAesDI8DmwBOAJwG7Ak8Bng4cAhwBHAecCpwJvAB4KfBK4FW+Uzv3QX0V44lRcVOTr5cI+I/ty4HFyRbTh68OHZoD8juHM0CvXV/CPs3x8gwzjt9i5uokEV9RVOPrK+oriiX2KwpeJy0x8BXFNQH/ikLpvsbAVxT/tPSPxLewHlwmeVYSwrOcwz9ZKZyN9Wtp4zqypWTXky0ju4FsOdmNZCvIbiJbSXYz2S1kt5KtIruN7HayO8juJLuL7G6ye8juJbuP7H6yB8geJHuI7GGyR8hWkz1K9hjZ42RPkD1J9hTZ02RryJ4he5bsObLnyV4gW0v2ItlLZC+TvUL2Ktk6stfI1pO9TvYG2Ztkb5FtINtI9jbZO2Tvkm0ie4/sfbLNZFvItpJ9QPYh2Udk28i2k31M9gnZp2Q7yHaSfUa2i2w32edke8j2kn1B9iXZV2Rfk31D9i3Zd2Tfk/1A9iPZT2Q/k/1C9ivZb2S/k+0j2092gOygchSdQUJkYbIksmSyFLJ8ZPnJCpAVJCtEVpisCFlRsmJkxclKkJUkK0VWmqwMWVmycmTltbNTcaD6Osh/8iroHPnVUkEn+uSmFilfGamkq4Cmw/Hp9b7+yse636yI2leKE734T8rZMcZTcS2N9Zwho0f3nDhy6pDJuR2mjM2ZPHLcWP2w9rqfDUyKIc/fnqwNRX6sp2ht3t/l1zDk558NjPecqp+fI/EtUUkRN88K4fj7ys07tCQq8dU5R+JcdL4VtciyiW+cfSonqQFlT3jCwU58le5KYXYfmU0iw/IS9KUhM2PL7Lc0g31HXZurjI0qWuO/uTZ30DnSVyEn+trcQefvr83F6sdem/vr5c9rc8qB+53D1+aqhI/caRLzvvWDKN6zf2XGiblKODETZ7w8qwrMnqoayp6q2eyJ10nVDGRP1QOePSnd1YVlT9UFZk/X2+wpKntKxUYNmz3JzJ5SfdlTjQRkT9czZk+pjBNzDSHZ03ECs6fjDGVPNW32xOukmgayp1oBz56U7lrCsqdaArOnZTZ7isqeamOjjs2eZGZPtX3ZU50EZE/LGLOn2owTcx0h2VNdgdlTXUPZUz2bPfE6qZ6B7Kl+wLMnpbu+sOypvsDsaYXNnqKypwbYaGizJ5nZUwNf9tQwAdnTCsbsqQHjxNxQSPbUSGD21MhQ9tTYZk+8TmpsIHtqEvDsSeluIix7aiIwe7rJZk9R2VNTbERs9iQze2rqy54iCciebmLMnpoyTswRIdmTKzB7cg1lT2k2e+J1UpqB7Ck94NmT0p0uLHtKF5g9rbTZU1T2lIGNTJs9ycyeMnzZU2YCsqeVjNlTBuPEnCkke2omMHtqZih7am6zJ14nNTeQPWUFPHtSurOEZU9ZArOn8oYmWGa/JSx7aoGNljZ7kpk9tfBlTy0TkD2VZzz7t2CcmFsaOrjDvvHjfLJCvH21Cgf7hK6eQtQqzJ+BNs/H62tufuppPiZ0Z+VLTIxH4ltcRv+4WYZ9HYlv+eMJViZ83SrgMX6doRhvLSTGGf3jtg54jJczFOMnBjzGbzYU49lCYpzRP252wGNc5Y+twofHMshcGwriGhHENTOBXDkeH2xibmoX8OP0BkNzcnshczKjf9z2Aff1ckO+7pggXweoznU5NSt/qC/NvCseqhZQj1RXzz1SWANYB1iIrDWtHx8+9EjLAtpYee1en94XfDegz+XAG4EN0WcEmAksSXYCrZ+IfeiPzPTa/fsojr8t4fUBLAUsDSwDLKJ8S+ttsI9Cus/R7u1jvLZv9bc3g/8twFuBq4C3AW8H3gG8E3gX8G7gPcB7gfcB7wc+AHwQ+BDwYeAjwNXAR4GPAR8HPgF8EvgU8GngGuAzwGeBzwGfB74AXAt8EfgS8GXgK8BXgeuArwHXA18HvgF8E/gWcANwI/Bt4DvAd4GbgO8B3wduBm4BbgV+APwQ+BFwG3A78GPgJ8BPgTuAO4GfAXcBdwM/B+4B7gV+AfwS+BXwa+A3wG+B3wG/B/4A/BH4E/Bn4C/AX4G/AX8H7gPuBx4AHgQ6iPcQMAxMAiYDU4D5gPmBBYAFvbkDWNg7BoFFgcWA2cCywHLABmRtab0djtnCzuFj1mv3jlnvu/JroaU1+mjrzQtk7Wn9JPRVROvLa0/UFe3qDu987i0dtPzXXtGOs8/qGFDufjuGg31FW+nuaKCQStSVYs6DyyTPykJ4lnf4JyuFs7F+MsVaJ7LOZF3IupJ1I+tO1oOsJ1kvst5kp5CdStaHrC9ZP7LTyPqTnU42gOwMsoFkg8gGk51JNoRsKFkO2TCyXLI8suFkI8hGkp1FNopsNNkYsrFk48jGk00gm0g2iWwy2RSyqWRnk00jm042g+wcsnPJZpLNIjuPbDbZHLK5ZOeTXUB2IdlFZPPI5pNdTHYJ2aVkl5FdTraAbCHZIrIryK4ku4psMdnVZEvIriG7luw6sqVk15MtI7uBbDnZjWQryG4iW0l2M9ktZLeSrSK7jex2sjvI7iS7i+xusnvI7iW7j+x+sgfIHiR7iOxhskfIVpM9SvYY2eNkT5A9SfYU2dNka8ieIXuW7Dmy58leIFtL9iLZS2Qvhw/HrX19gn19ghOA1yfo5+dIfIvR1ye8Eua7mSNRie8rYf5ziVpe1SLLJr5x9qmcpAaUu991Yb7gN6V7XZjdR0aTs3WMB1SiEvTOYTNjy+y3hN3K+Ro21muN9lZOnj4TciuncqB+K+f6sPlbOTsznv1fY5yY14cTM3HGy/N1gdnT64aypzds9sTrpDcMZE9vBjx7UrrfFJY9vSkwe+pis6eo7OktbGyw2ZPM7OktX/a0IQHZUxfGs/9bjBPzBiHZ00aB2dNGQ9nT2zZ74nXS2wayp3cCnj0p3e8Iy57eEZg9dbXZU1T29C42NtnsSWb29K4ve9qUgOypK+PZ/13GiXmTkOzpPYHZ03uGsqf3bfbE66T3DWRPmwOePSndm4VlT5sFZk89bfYUlT1twcZWmz3JzJ62+LKnrQnInnoynv23ME7MW4VkTx8IzJ4+MJQ9fWizJ14nfWgge/oo4NmT0v2RsOzpI4HZUy+bPUVlT9uwsd1mTzKzp22+7Gl7ArKnXoxn/22ME/N2IdnTxwKzp48NZU+f2OyJ10mfGMiePg149qR0fyose/pUYPbU22ZPUdnTDmzstNmTzOxphy972pmA7Kk349l/B+PEvFNI9vSZwOzpM0PZ0y6bPfE6aZeB7Gl3wLMnpXu3sOxpt8Ds6WWbPUVlT59jY4/NnmRmT5/7sqc9CcieXmY8+3/OODHvMXRwh33jx/lkhXj72hsO9gldPYVob5g/A+0U8Mduq6f5mNDdWcgjXhn943Y27OtIfMsfT7Ay4etuAY/xToZivLuQGGf0j9s94DFe3lCM9wp4jJ9iKMZ7C4lxRv+4vQMe43vga4e3XyNctwriul0Q150J5Mrx+gQTc1OfgB+n3QzNyX2FzMmM/nH7BtzX3Q35ur+Q1ydw1lGcmpU/9NcnqFrgj0fbAzcANwHVawa+oPUvw4ceaVlUGyuv3evT+4KvG/62O7AHcCtwO3AnUL0+4Sta/xr7KKbtw2v37+MZ/O2zwOeAzwNfAK4Fqself0Pr32IfxbV9eO3ePsZr+1Z/ewrwVGAfYF9gP+BpwP7A04EDgGcABwIHAQcDzwQOAQ4F5gCHAXOBecDhwBHAkcCzgKOAo4FjgGOB44DjgROAE4GTgJOBU4BTgWcDpwGnA2cAzwGeC5wJnAU8DzgbOAc4F3g+8ALghcCLgPOA84EXAy8BXgq8DHg5cAFwIXAR8ArglcCrgIuBVwOXAK8BXgu8DrgUeD1wGfAG4HLgjcAVwJuAK4E3A28B3gpcBbwNeDvwDuCdwLuAdwPvAd4LvA94P/AB4IPAh4APAx8BrgY+CnwM+DjwCeCTwKeATwPXAL8Bvgh8Cahen/AdrX+PY7aEdsx67d4x631XfjL+9gvgd0D1+oQfaP1H9FVS68tr1xfu89ZP4aPuK+Lry03UlXedcyTORef7szbW9sp7nH0qJ/0c5u/3lzBf8JvS/UuY3UdGr7z/wnhAJerKO+N7vjmvvLsG+z5iX/rk9Cs2ftMa7ZV3nj4TcuVdOXCNc/jK+29agPsHj2vfrRjP/r8yTsy/hRMzccbL83eB2dPvhrKnfTZ74nXSPgPZ0/6AZ09K935D2RM3172GuCYqg4pnks2LXnJi0DWSQZnwIVNfEX2yO4CNg0eZjbWNodmfjbV1/j4bi9XP/6tsLMgB4WVyB8KHHfNHGk3/tHGiF+7MjvM+voOcJ40ktkknzxtP1Wcbg/HwW5g/cxwQrPtUjshGlW4vbjl1nxHw+3OU7oMGdA80dH0w3nnDfyLnnDf0GI93/AYFdPx8i8sY3y5jzLiDhFyfPhDm6yuUxDd+qg8T5xbF0cQcxulrE1/dtjcwx4aTzMQ4N88kITyThfBMYeSprsGqa7J/foNFfSt/qbFQ+0nG//sXpv27fzVGkfgWI5dLuDn+EDYTb+wBl48x4AwHlDFn5UsKPsf83BylnAkLCJm5CzJmaFIPpIICDqRCSUJm5sJ8RNOkBlRhAQFVREpAFeUjmi41oIoKCKhinBwTdSk+la+vqEvxxbXLh/ZSfJx9pmJAufstkRTsS/FKd4kkdh8l7PJ2quMkJAeOxLe4VYTwrODwT1YKi2C9JAVFKbLSZGXIypKVIytPVoGsIlklsspkVbQAKg5Ul7X9k11B58hL5AWd6MlQLVIufatvpwpoOhyfXu8yfj7e/eaofaU40Yt/Es+OMZ6Ka0Ws546dMCV3Sm7PKUNHj8zpMGVszuSR48a2GzJ6tB4M3k68oEiKIdLfnqwNSH6sp2ht3t/l1/Av7x+IdyYukWTmVMrNsyrD2SfRT1ysmsQ/A6mlmk2XeJ1UzUC6VD3g6ZLSXd1AuuRoi8kxjcS5JCqtK23qmwNengl74mIqBr2GNvj2dx88fSbkdx/KgfoTF2skHblT7rtUSjOe/VMZJ+YaQq5bHCcwezrOUPZU02ZPvE6qaSB7qhXw7EnpriUse6olMHsqY7OnqOypNga9js2eZGZPtX3ZU50EZE9lGM/+tRkn5jpCsqe6ArOnuoayp3o2e+J1Uj0D2VP9gGdPSnd9YdlTfYHZU1mbPUVlTw0w6A1t9iQze2rgy54aJiB7Kst49m/AODE3FJI9NRKYPTUylD01ttkTr5MaG8iemgQ8e1K6mwjLnpoIzJ4q2uwpKntqikGP2OxJZvbU1Jc9RRKQPVVkPPs3ZZyYI0KyJ1dg9uQayp7SbPbE66Q0A9lTesCzJ6U7XVj2lC4we6pks6eo7CkDg55psyeZ2VOGL3vKTED2VInx7J/BODFnCsmemgnMnpoZyp6a2+yJ10nNDWRPWQHPnpTuLGHZU5bA7KmyzZ6isqcWGPSWNnuSmT218GVPLROQPVVmPPu3YJyYWxo6uMO+8eP8bWC8fbVKCvYJPZX6aJXEn4HmBPz5sepXzCZ0DxPyLlFG/7jDDPs6Et/yxy/3Tfh6eMBjvJShGB8hJMYZ/eOOCHiMVzAU46MCHuNVDMX4aCExzugfd3TAYzwCXzu8/RrhmimIa8sEcuV4972J431cwGO/nKF5bryQeY7RP+74gPu6vCFfTxLybgHO2oRTs/KH/u57lV+rd0PXANYBNgSqd9+3pvXjkw496Ki0NlZeu9en96VZOfxteWAFYASYCWwJVO+hPoHWT8Q+ymj78Nr1hTumsoVcEWsjhGfbJP54/fP7RcRMG2BboPoitx2tt0cMldViyGs3qfkkIb7pIIRnR4MxdBJipgOwoxZDJ9N6J8RQOS2GvHaTmjsL8U0XITy7GoyhzoiZLsCuWgx1o/XuiKHyWgx57SY19xDim55CePYyGEM9EDM9gb20GOpN66cghipoMeS1m9R8qhDf9BHCs6/BGDoVMdMH2FeLoX60fhpiqKIWQ167Sc39hfjmdCE8BxiMof6ImdOBA7QYOoPWByKGKmkx5LWb1DxIiG8GC+F5psEYGoSYGQw8U4uhIbQ+FDFUWYshr92k5hwhvhkmhGeuwRjKQcwMA+ZqMaRu4R2OGKqixZDXblLzCCG+GSmE51kGY2gEYmYk8CwthkbR+mjEUFUthrx2k5rHCPHNWCE8xxmMoTGImbHAcVoMjaf1CYihaloMee0mNU8U4ptJQnhONhhDExEzk4CTtRiaQutTEUPVtRjy2k1qPluIb6YJ4TndYAydjZiZBpyuxdAMWj8HMZSqxZDXblLzuUJ8M1MIz1kGY+hcxMxM4Cwths6j9dmIoRpaDHntJjXPEeKbuUJ4nm8whuYgZuYCz9di6AJavxAxdJwWQ167Sc0XCfHNPCE85xuMoYsQM/OA87UYupjWL0EM1dRiyGs3qflSIb65TAjPyw3G0KWImcuAl2sxtIDWFyKGamkx5LWb1LxIiG+uMOAbb5wXwRdXANXb+K6k9avgk9raZ712k1oXC/HJ1QZ9shi+uFrzyRJavwY+qaN91ms3qfVaIT65zqBProUvrtN8spTWr4dP6mqf9dpNal0mxCc3GPTJMvjiBs0ny2n9RviknvZZr92k1hVCfHKTQZ+sgC9u0nyyktZvhk/qa5/12k1qvUWIT2416JNb4ItbNZ+sovXb4JMG2me9dpNabxfikzsM+uR2+OIOzSd30vpd8ElD7bNeu0mtdwvxyT0GfXI3fHGP5pN7af0++KSR9lmv3aTW+4X45AGDPrkfvnhA88mDtP4QfNJY+6zXblLrw0J88ohBnzwMXzyi+WQ1rT8KnzTRPuu1m9T6mBCfPG7QJ4/BF49rPnmC1p+ET5pqn/XaTWp9SohPnjbok6fgi6c1n6yh9Wfgk4j2Wa/dpNZnhfjkOYM+eRa+eE7zyfO0/gJ84mqf9dpNal0rxCcvGvTJWvjiRc0nL9H6y/BJmvZZr92k1leE+ORVgz55Bb54VfPJOlp/DT5J1z7rtZvUul6IT1436JP18MXrmk/eoPU34ZMM7bNeu0mtbwnxyQYhPDcK4fm2EJ7vCOH5rhCem4TwfE8Iz/eF8NwshOcWITy3CuH5gRCeHwrh+ZEQntuE8NwuhOfHQnh+IoTnp0J47hDCc6cQnp8J4blLCM/dQnh+LoTnHiE89wrh+YUQnl8K4fmVEJ5fC+H5jRCe3wrh+Z0Qnt8L4fmDEJ4/CuH5kxCePwvh+YsQnr8K4fmbEJ6/C+G5TwjP/UJ4HhDC86AQnuph8BJ4hoTwDAvhmSSEZzIjT+9emH7o7wTcA1MF+BZwA3Aj8G1gO+DJwG7A3sB+wDOAQ4B5wFHA8cApwBnA84AXAC8GLgBeCVwCXApcDlwJXAW8E3gv8EHgauATwDXA54EvAdcB3wC+A3wXuAn4HvB94GbgFuBW4AfAD4EfAbcBtwM/Bn4C/BS4A7gT+BlwF3A38HPgHuBe4BfAL4FfAb8GfgP8Fvgd8HvgD8AfgT8Bfwb+AvwV+Bvwd+A+4H7gAeBBoJqLFYaAYWASMBmofteTQuv5kg/ds5XpHL5ny2v3/36+JPbRGpiCvkqR5af1AuirmdaX16768I5rffEf65H4FreGw3use0vB5MPr9g3qcfZZAwPK3W+hZMakxpDuQsnsPkrYm8k5Dy6TPKsK4VnR4Z+sFBbBemGKtSJkRcmKkRUnK0FWkqwUWWmyMmRlycppcVkcqB6M4p/sCjpHvim9oBM9GapFyhvQ1QmrgKbD8en13uaej3e/OWpfKU704p/Es2OMp+JaEeu5YydMyZ2S23PK0NEjczpMGZszeeS4se2GjB6tB4O3Ey8okmKI9LcnawOSH+spWtufZ3cNQ34V2cB4Z+JCyWZOpdw8yzOcfbxXzicqXSqfzD8DqaWCTZd4nVTBQLpUMeDpktJd0UC65GiLyTGNxLkkKq0rauh7HGa/pRns29Unp0qIucpa7HmpQdg5PJHl0/zh+Un9yUHnSF+FtPUwPpP0Pz4T+ot+9BTF+3svRWEeEyPpltHJN4TBVQ7cjx2p7crJR+40iXnfRRnP/pUYJ+bKQr6krSIwe6piKHuqarMnXidVNZA9VQt49qR0VxOWPVUTmD0Vs9lTVPZUHTGXarMnmdlTdV/2lJqA7KkY49m/OuPEnCoke6ohMHuqYSh7Os5mT7xOOs5A9lQz6JfqiF9NYdlTTYHZU3GbPUVlT7UQc7Vt9iQze6rly55qJyB7Ks549q/FODHXFpI91RGYPdUxlD3VtdkTr5PqGsie6gU8e1K66wnLnuoJzJ5K2+wpKnuqj5hrYLMnmdlTfV/21CAB2VNpxrN/fcaJuYGQ7KmhwOypoaHsqZHNnnid1MhA9tQ44NmT0t1YWPbUWGD2VMZmT1HZUxPEXFObPcnMnpr4sqemCcieyjCe/ZswTsxNhWRPEYHZU8RQ9uTa7InXSa6B7Ckt4NmT0p0mLHtKE5g9lbXZU1T2lI6Yy7DZk8zsKd2XPWUkIHsqy3j2T2ecmDMMHdxh3/hx/jYw3r4yk4N9Qq9BfWQm82egU/Lx+pqbn/oVswndU/MlJsYj8S0uo3/cqYZ9HYlv+eOX+yZ8PT3gMV7EUIzPEBLjjP5xZwQ8xisaivGZAY/xcoZifJaQGGf0jzsr4DHeAL52ePs1wrWpIK4ZCeQa92MMHTPH+5yAx34JQ/PcXCHzHKN/3LkB93VJQ76+MEG+DlDt6HJqVv5QX0R5U6XKr9WjCisDU4G1gYXImtF68+RDDzpqro2V1+716X1pVgJ/WxJYCtgA2BSY4X2OLIvWW2AfWdo+vHZ94Y6plkKuiLUSwrN1Mn+8et8vtkTMtAK2Bqovco+n9RMQQy20GPLaTWo+UYhvsoXwbGMwhk5EzGQD22gx1JbW2yGGWmox5LWb1NxeiG9OEsKzg8EYao+YOQnYQYuhjrR+MmKolRZDXrtJzZ2E+KazEJ5dDMZQJ8RMZ2AXLYa60no3xFBrLYa8dpOauwvxTQ8hPHsajKHuiJkewJ5aDPWi9d6IoeO1GPLaTWo+RYhvThXCs4/BGDoFMXMqsI8WQ31pvR9i6AQthrx2k5pPE+Kb/kJ4nm4whk5DzPQHnq7F0ABaPwMxdKIWQ167Sc0DhfhmkBCegw3G0EDEzCDgYC2GzqT1IYihbC2GvHaTmocK8U2OEJ7DDMbQUMRMDnCYFkO5tJ6HGGqjxZDXblLzcCG+GSGE50iDMTQcMTMCOFKLobNofRRiqK0WQ167Sc2jhfhmjBCeYw3G0GjEzBjgWC2GxtH6eMRQOy2GvHaTmicI8c1EITwnGYyhCYiZicBJWgxNpvUpiKH2Wgx57SY1TxXim7OF8JxmMIamImbOBk7TYmg6rc9ADJ2kxZDXblLzOUJ8c64QnjMNxtA5iJlzgTO1GJpF6+chhjpoMeS1m9Q8W4hv5gjhOddgDM1GzMwBztVi6HxavwAx1FGLIa/dpOYLhfjmIiE85xmMoQsRMxcB52kxNJ/WL0YMnazFkNduUvMlQnxzqQHfeON8CXxxKVC9je8yWr8cPumkfdZrN6l1gRCfLDTokwXwxULNJ4to/Qr4pLP2Wa/dpNYrhfjkKoM+uRK+uErzyWJavxo+6aJ91ms3qXWJEJ9cY9AnS+CLazSfXEvr18EnXbXPeu0mtS4V4pPrDfpkKXxxveaTZbR+A3zSTfus125S63IhPrnRoE+Wwxc3aj5ZQes3wSfdtc967Sa1rhTik5sN+mQlfHGz5pNbaP1W+KSH9lmv3aTWVUJ8cptBn6yCL27TfHI7rd8Bn/TUPuu1m9R6pxCf3GXQJ3fCF3dpPrmb1u+BT3ppn/XaTWq9V4hP7jPok3vhi/s0n9xP6w/AJ721z3rtJrU+KMQnDxn0yYPwxUOaTx6m9Ufgk1O0z3rtJrWuFuKTRw36ZDV88ajmk8do/XH45FTts167Sa1PCPHJkwZ98gR88aTmk6do/Wn4pI/2Wa/dpNY1QnzyjEGfrIEvntF88iytPwef9NU+67Wb1Pq8EJ+8YNAnz8MXL2g+WUvrL8In/bTPeu0mtb4kxCcvG/TJS/DFy5pPXqH1V+GT07TPeu0mta4T4pPXhPBcL4Tn60J4viGE55tCeL4lhOcGITw3CuH5thCe7wjh+a4QnpuE8HxPCM/3hfDcLITnFiE8twrh+YEQnh8K4fmREJ7bhPDcLoTnx0J4fiKE56dCeO4QwnOnEJ6fCeG5SwjP3UJ4fi6E5x4hPPcK4fmFEJ5fCuH5lRCeXwvh+Y0Qnt8K4fmdEJ7fC+H5gxCePwrh+ZMQnj8L4fmLEJ6/CuH5mxCevwvhuU8Iz/1CeB4wcC9MP/SXhXtgygHXAV8Drge+Djwe2BbYEdgV2AvYFzgAeCYwF3gWcBxwMnA6cBbwfOB84GXARcDFwGuBy4ArgLcAbwfeDbwf+DDwMeBTwGeBa4GvAN8Avgl8C7gBuBH4NvAd4LvATcD3gO8DNwO3ALcCPwB+CPwIuA24Hfgx8BPgp8AdwJ3Az4C7gLuBnwP3APcCvwB+CfwK+DXwG+C3wO+A3wN/AP4I/An4M/AX4K/A34C/A/cB9wMPABuSHaR1dcOWumerv3P4ni2v3f/7+cL422bAg8BSZCH6fBh9na715bXrC/fxnZRy1H1FfH25iXrTu845Euei803WxjoZGNb+377p/V/0qZyUnMLfb0oKX/Cb0p2Swu4jo296T2E8oBL1pvdWSWbGNk6/uQb7PmJf+uSUDzGXX4s9+6Z3nj4T8qZ35cA12JHazq8dlP7B49q3fhDFe/bPxzgx509JzMQZL88CArOnAoayp4I2e+J1UkED2VOhgGdPSnchQ9kTN1f1ik0TXBOVQcUzyeZFLzkx6BrJoEz4kKmviD7ZFUZcFDnKbKxtDM3+bKyt8/fZWKx+/l9lY0EOCC+TK5xy2DFqWwVFGyd64c7sGHW4RRhPGkX5Jp08bzyLauNpIh7yp/BnjvMMv0M63mxU6S5sQPf8YOk+gp/SXcSA7osNvTs73nnDfyLnnDf0GI/7Oa8BHT/f4jLGt8sYM66p8QszHyeFGc81xfgqXSNFnjrWiqWYmcM4fW3iq9v8yfy6iwv51qiEEJ4lhfAsxchT1WsDnMPfYKmYUv5SY6H2k4z/9y9M+3f/aowi8S1GLpdwcwwZijf2gCvNSNRwQBlzVumU4HMsw81RypmwrJCZuxxjhib1QCon4EAqL2VmrsBHNE1qQFUQEFAVpQRUJT6i6VIDqpKAgKosJaCqCDk1VxXCs5oQntWF8EwVwrOGEJ7HCeFZUwjPWkJ41hbCs44QnnWF8KwnhGd9ITwbCOHZUAjPRkJ4NhbCs4kQnk2F8IwI4ekK4ZkmhGe6EJ4ZQnhmCuHZTAjP5kJ4Zgnh2UIIz5ZCeLYSwrO1EJ7HC+F5ghCeJwrhmS2EZxshPNsK4dlOCM/2QnieJIRnByE8OwrhebIQnp2E8OwshGcXITy7CuHZTQjP7kJ49hDCs6cQnr2E8OwthOcpQnieKoRnHyE8+wrh2U8Iz9OE8OwvhOfpQngOEMLzDCE8BwrhOUgIz8FCeJ4phOcQITyHCuGZI4TnMCE8c4XwzBPCc7gQniOE8BwphOdZQniOEsJztBCeY4TwHCuE5zhmntw/4OsYdpwCSfy6F+YLtu69pDu/Ad2LEvTArHh5jmd8BACjr91FAuKmkIG4mRDweULpLmJA90QBuosZ0D0p4LoLJTtOWQMPSbsq4Me3eohbGQO6Fws5L0xmPC8w+tpdLCBuyhuImykBnyeU7ooGdE8VoLuyAd1nC6lrpgnhOV0IzxlCeJ4jhOe5QnjOFMJzlhCe5xniGfbxjMS3/PH6KS7Ns4VoDjNqniNEcxKj5rlCNCczaj5fiOYURs0XCNGcj1HzhUI0d2TUfJEQzfqz8+LVPE+I5qqMmucL0VyNUfPFQjRXZ9R8iRDNqYyaLxWiuQaj5suEaD6OUfPlQjTXZNS8QIjmWoyaFwrRXJtR8yIhmuswar5CiOa6jJqvFKK5HqPmq4Rors+oebEQzQ0YNV8tRHNDRs1LhGhuxKj5GiGaGzNqvlaI5iaMmq8Torkpo+alQjRHGDVfL0Szy6h5mRDNaYyabxCiOZ1R83IhmjMYNd8oRHMmo+YVQjQ3Y9R8kxDNzRk1rxSiOYtR881CNLdg1HyLEM0tGTXfKkRzK0bNq4Robs2o+TYhmo9n1Hy7EM0nMGq+Q4jmExk13ylEczaj5ruEaG7DqPluIZrbMmq+R4jmdoya7xWiuT2j5vuEaD6JUfP9QjR3YNT8gJT7PRk1PyhE88mMmh8SorkTo+aHhWjuzKj5ESGauzBqXi1Ec1dGzY8K0dyNUfNjQjR3Z9T8uBDNPRg1PyFEc09GzU8K0dyLUfNTQjT3ZtT8tBDNpzBqXiNE86mMmp8RorkPo+ZnhWjuy6j5OSGa+zFqfl6I5tMYNb8gRHN/Rs1rhWg+nVHzi0I0D2DU/JIQzWcwan5ZiOaBjJpfEaJ5EKPmV4VoHsyoeZ0QzWcyan5NiOYhjJrXC9E8lFHz60I05zBqfkOI5mGMmt8UojmXUfNbQjTnMWreIETzcEbNG4VoHsGo+W0hmkcyan5HiOazGDW/K0TzKEbNm4RoHs2o+T0hmscwan5fiOaxjJo3C9E8jlHzFiGaxzNq3ipE8wRGzR8I0TyRUfOHQjRPYtT8kRDNkxk1bxOieQqj5u1CNE9l1PyxEM1nM2r+RIjmaYyaPxWieTqj5h1CNM9g1LxTiOZzGDV/JkTzuYyadwnRPJNR824hmmcxav5ciObzGDXvEaI5v8Onea8QzQUYNX8hRHNBRs1fCtFciFHzV0I0F2bU/LUQzUUYNX8jRHNRRs3fCtFcjFHzd0I0F2fU/L0QzSUYNf8gRHNJRs0/CtFcilHzT0I0l2bU/LMQzWUYNf8iRHNZRs2/Mmoui35C0KzeCanekUi7cNQ79FQ9qOojVS+o/Fnlkyq/UvmGOv+q85Gan9V8pY5fFc/Kv2XxGbWUIytPVoGsIlklsspkVciqklUjq06WSlaD7DiyGfhb9f5Q9T5N9X5J9b5F9f5B9T4+9X469b429f4y9T4v9X4r9b4n9f4j9T4g9X4c9b4Y9f4U9T4R9X4N9b4J9f4F9T4C9Xx+9bx69fx29Txz9Xxv9bxr9fxn9Txk9Xxg9bxc9fxY9TxV9XxR9bxN9fxJ9TxG9XxC9bw+9fw69Tw39Xwz9bwv9fwr9Two9Xwk9bwg9fwc9TwZ9XwV9bwR9fwN9TwK9XwG9bwC9ft99Xt29ftu9Xtn9ftf9XtY9ftQ9XtJ9ftB9Xs69fsy9Xsr9fsj9Xsc9fsU9XsN9fsFdT+/ur9d3e+t7n9W9wOr+2PV/aLq/kl1P6G6v07db6buv1L3I6n7c9T9Kur+DXU/g7q+r653q+u/6nqouj6orpep60fqeoq6vqC+b1ffP6vvY9X3k+r7OvX9lfo+R32/oep9Vf+qelDVR6peUPmzyidVfqXyDXX+VecjNT+r+UodvyqeveX/AN0SUjgjZwUA", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -97,7 +97,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json index 60e25ac8515..9dc149b0d57 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json @@ -96,7 +96,7 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+1dBZQUR9ftmRUkuLsE9+kV2MUlWHB3XXaDu7tLcAghhBBC3N3dPSFAIEiCBEiAABGSEAP+V+HuR28xJMC8mvT7t/uce27VstS+d+tV9Z2Znu7cGSyrVbT19+Ej+AmRaKf2o7R+NNpR5//b37+vjnyE/IQChIKO/5f674UIhQlFCEXx737HvxcjFCeUIJR0/L1ShIyOfmmtX0brl9X65bR+ea1fQetX1PqVtH5lrV9F61fV+tW0fkDr21o/RuvHav04rR+v9atr/RpaP0HrJ2r9mlq/ltavrfXraP26Wr+e1q+v9Rto/YZav5HWv07rN9b6TbR+U63fTOs31/rXa/0WWr+l1m+l9Vtr/TZav63Wb6f122v9Dlq/o9bvpPU7a/0uWr+r1u+m9btr/R5av6fW76X1e2v9Plq/r9bvp/X7o6/2hwjrfL2oQ+0Dau2r9a7WuFrX5a3z61etWbVO1dpU61GtQbXu1FpT60utKbWO1NpR60WtEbUu1FpQ9a9qXtW5qm1Vz6qG6+Fvq/pUNanqUNWeqjdVY6quVC2p+lE1o+pE1YaqB1UDbTDX7TCnHTB3nTBHXTAX3aB5D2jbCxr2gVb9oEmqPkmaXgO0frLWT9H6N2j9gVp/kNYfrPWHaP2hWn+Y1h+u9Udo/ZFaf5TWH631x2j9sVp/nNYfr/UnaP2JWn+S1p+s9ado/alaf5rWn671Z2j9mVp/ltafrfXnaP25Wn+e1p+v9Rdo/YVaf5HWv1HrL9b6S7T+Uq2/TOsv1/ortP5Krb9K66/W+jdp/TVa/2atv1br36L112n9W7X+eq1/m9bfoPVv1/obtf4dWn+T1r/TurAfKq9U3zp/qH1ArX213tUaV+t6oHV+/ao1q9apWptqPao1qNadWmtqfak1pdaRWjtqvag1otaFWguq/lXNqzpXta3qWdWwqtuZ1vn6VDWp6lDVnqo3VWOqrlQtqfpRNaPqRNWGqgdVA8sx1ysxp6sxd2swR2sxF+ug+XpouwEaboRWm6CJ0kd50RLQQ/nPs9Z5D6q4ALgguBC4MLgIuCi4GLg4uAS4JPhacClwaXAZcFlwOXB5cAVwRXAlcGVwFXBVcDVwAGyDY8Cx4DhwvGO8uwn3BNGmOn6nBjgBnAiuCa4Frg2uA64LrgeuD24AbghuBL4O3BjcBNwU3AzcHHw9uAW4JbgVuDW4DbgtuB24PbgDuCO4k0Obewn3BdGmM36nC7gruBu4O7gHuCe4F7g3uA+4L7gfuD84CTwAnAxOAd8AHggeBB4MHgIeCh4GHg4eAR4JHgUeDR4DHgse59DmfsIDQbQZj9+ZAJ4IngSeDJ4CngqeBp4OngGeCZ4Fng2eA54LngeeD14AXgheBL4RvBi8BLwUvAy8HLwCvBK8CrwafBN4jUObBwkPWWkPH7g+ODZQPS4uuUZMsh1r9wvEJPZPiA/ExfevnmAn2PEJ8QNiEmJjkxPiEmok9k+sEUi042KT7ZT4xNiUwPnjYcdYgRAPk3E+IiTOR4XE+ZiQOB8XEucTQuJ8UkicTwmJ82khcT4jJM5nhcT5nJA4nxcS5wtC4nxRSJwvCYnzZSFxvsIYp/5aR70HoTz/WvAt4HXgW8HrwbeBN4BvB28E3wHeBL4TfBf4YfAj4EfBj4EfBz8BfhL8FPhp8DPgZ8HPgZ8HvwB+EfwS+GXwK9aF1zqvEl6z0h7cc/i6JaPW3hAS55tC4nxLSJxvC4nzHSFxviskzveExPm+kDg/EBLnhxa/p8iB8dT78ercei/4fvCD4FfBr4PfAL8Jfgv8Nvgd8Lvg98Dvgz8Af2hdOKd/RPjYuvDeblbEFq7PSxR/QvjUOv95Vur8BZvLQGiH/QnfWIESGGcz4TPCFsJWwjbC54TthB2ELwg7CbsIuwl7CF8SviLsJewj7CccIHxNOEg4RDhM+IbwLeEI4SjhGOE7wnHCCcJJiJT6WaCKxfnZ4Gdaf4vW36r1t2n9z7X+dq2/Q+t/ofV3av1dWn+31t+j9b/U+l9p/b1af5/W36/1D2j9r7X+Qa1/SOsf1vrfaP1vtf4RrX9U6x/T+t9p/eNa/4TWP4m+84gA1wcHQjvSrJlQ99LNjGOpzYopx8A/6Xe1cSanqCNgf8Y0lpqLLYz6+Vyv399D21tDHysGOdvbGPXzu1m/uP/FaX8e2lgBR872dkb9ItyqX0yaOO0dVz9WQMvZ/oJRv0gX6lc95aI47Z1XN1ZCkJztXYz6RblNv4Sgcdq7r3ysGpfI2d7DqF+0m/Srcck47S+vbKyYf8jZ/opRvwxu0a/GP8Zp7738sZL+JWd7H6N+Gd2gX41/jdPef3ljBS4jZ/sAo36Z/mv9ApcVp/31v48Vf5k52wcZ9cv8X+oXd9lx2of+cay4lCvI2T7MqN81/5V+Na4oTvubS4+VcIU5298y6pflP9AvMeWK47SPBB8rcBU520cZ9csabv0CVxWnfeziseyrzNn+jlG/bOHUb8BVx2kfTztWbAg52ycY9cseJv1iUkKK0z5p8b2X6HzPLlT9coRJv0Boh834PpvtZ9QvpxD9GN8nsiMZ9cslRD/G9znsaEb9cgvRj/F1up2RUb88QvRjfJ1pZ2bUL68Q/RhfJ9lZGPXLJ0Q/Rp9vZ2PUL78Q/Rh9qp2DUb8CQvRj9Fl2Lkb9CgrRj9En2HkY9SskRD/G85ydj1G/wkL0Y9yn7QKM+hURoh/jPmMXYtSvqBD9GNeJzVgztin9uK/f/f7qx7ro+o0IK+31qZeKORDaYX/PN1bAGe8PjnbqffX81sW1G20gJ0v7O7qO2YL8jPWPm5ikHwyM+6PFV/ym8v6Rf47+cRMIhHak0TQQ4hFhXVgowQ6evxMTYBzb1n9gLm56k9ox5k/gU46fZQL7rQubD+4x+ve8p2qrNqhzjv/nc7DPMcY5x/8J9ju+S4yTyfGz1P+fzRGLxadJwMCGGjC6YaZeYa4m8FXrwhXnpxx/w3JMgvNvh3qW/cni2wBPWWYWJLdL+dmS51J+tsy4lF8cbc+lhDjmzxCUe9xfLXe7FJX3r/xzZNSl/GqZdyncG1cIG6xJV/KfOZ7T4N8cP7sSx9PQuniudMfT0Pp3xxNsHM/xXPr4n+M57RBT9X+zLnY8XN9xCraIQj37n2aM6zfLzALk3oROW+HZ4EON83dLnsv73TLj8v5wtD2XF+KYv0NQ7nH/tNzt8lTef/LPkVGX96eVrl2eHSRccS7vL/AZx888l8czZlhc3l9WWpd3xpLl8v5ijOuMZWZxc29Cf1nh2eBDjfOsJc/lnbXMuDznG++eywtxzLMQlF0on7td3lkr7UwxjWvU5Tk1DYR4CHR5MUHCFefyfBDY76g9z+XxjBkWl6cm0Ony/D5ZLs/HuDH7fWYWN/cm5POFZ4MP+f5FPnkuL4JRW2e8kY6O5/JCHFNNUqSPf9wol7s8lXeUMJcXlb5dXmyQcMW5vGgInMFzeTJdXrTm8jIIc3nRjBtzBp+Zxc29CUULcXkZBbq8jIZcXibP5fFOUiYDLi+zy12eyjuzMJeXOX27vLgg4YpzeddA4Cyey5Pp8q7RXF4WYS7vGsaNOYvPzOLm3oSuEeLysgp0eVkNubxsnsvjnaRsBlxedpe7PJV3dmEuL3v6dnnxQcIV5/JyQOCcnsuT6fJyaC4vpzCXl4NxY87pM7O4uTehHEJcXi6BLi+XIZeX23N5vJOU24DLy+Nyl6fyziPM5eVJ3y6vepBwxbm8vBA4n+fyZLq8vJrLyyfM5eVl3Jjz+cwsbu5NKK8Ql5dfoMvLb8jlFfBcHu8kFTDg8gq63OWpvAsKc3kF07fLqxEkXHEurxAELuy5PJkur5Dm8goLc3mFGDfmwj4zi5t7EyokxOUVEejyihhyeUU9l8c7SUUNuLxiLnd5Ku9iwlxesfTt8hKChCvO5RWHwCU8lyfT5RXXXF4JYS6vOOPGXMJnZnFzb0LFhbi8kgJdXklDLu9az+XxTtK1BlxeKZe7PJV3KWEur1T6dnmJQcIV5/JKQ+AynsuT6fJKay6vjDCXV5pxYy7jM7O4uTeh0kJcXlmBLq+sIZdXznN5vJNUzoDLK+9yl6fyLi/M5ZVP3y6vX5Bwxbm8ChC4oufyZLq8CprLqyjM5VVg3Jgr+swsbu5NqIIQl1dJoMurZMjlVfZcHu8kVTbg8qq43OWpvKsIc3lV0rfL6x8kXHEuryoErua5PJkur6rm8qoJc3lVGTfmaj4zi5t7E6oqxOUFBLq8gCGXZ3suj3eSbAMuL8blLk/lHSPM5cWkb5eXFCRccS4vFgLHeS5PpsuL1VxenDCXF8u4Mcf5zCxu7k0oVojLixfo8uINubzqnsvjnaTqBlxeDZe7PJV3DWEur0b6dnkDgoQrzuUlQOBEz+XJdHkJmstLFObyEhg35kSfmcXNvQklCHF5NQW6vJqGXF4tz+XxTlItAy6vtstdnsq7tjCXVzt9u7zkIOGKc3l1IHBdz+XJdHl1NJdXV5jLq8O4Mdf1mVnc3JtQHSEur55Al1fPkMur77k85kky4PIauNzlqbwbCHN5DdK3y0sJEq44l9cQAjfyXJ5Ml9dQc3mNhLm8howbcyOfmcXNvQk1FOLyrhPo8q4z5PIaey6Pd5IaG3B5TVzu8lTeTYS5vCbp2uXZnE7sP3N5TSFwM8/lyXR5TTWX10yYy2vKuDE385lZ3NybUFMhLq+5QJfnjDkQ4uFzxHm9o+O5vBDHVJOkBOUet4XP3S5P5d3Cxz5HRl1eC1+6dnl2kHDFubyWELiVo/Y8l8czZlhcXktfWpfXyifL5bVk3Jhb+cwsbu5NqKUvPBt8qHG29slzea0Nubw2nsvjnaQ2BlxeW5e7PJV3W2Eur236dnkxQcIV5/LaQeD2nsuT6fLaaS6vvTCX145xY27vM7O4uTehdkJcXgeBLq+DIZfX0XN5vJPU0YDL6+Ryl6fy7iTM5XVK3y4vNki44lxeZwjcxXN5Ml1eZ83ldRHm8jozbsxdfGYWN/cm1FmIy+sq0OV1NeTyunkuj3eSuhlwed1d7vJU3t2Fubzu6dvlxQUJV5zL6wGBe3ouT6bL66G5vJ7CXF4Pxo25p8/M4ubehHoIcXm9BLq8XoZcXm/P5fFOUm8DLq+Py12eyruPMJfXJ327vPgg4YpzeX0hcD/P5cl0eX01l9dPmMvry7gx9/OZWdzcm1BfIS6vv0CX19+Qy0vyXB7vJCUZcHkDXO7yVN4DhLm8Aenb5VUPEq44l5cMgVM8lyfT5SVrLi9FmMtLZtyYU3xmFjf3JpQsxOXdINDl3WDI5Q30XB7vJA004PIGudzlqbwHCXN5g9K3y6sRJFxxLm8wBB7iuTyZLm+w5vKGCHN5gxk35iE+M4ubexMaLMTlDRXo8oYacnnDPJfHO0nDDLi84S53eSrv4cJc3vD07fISgoQrzuWNgMAjPZcn0+WN0FzeSGEubwTjxjzSZ2Zxc29CI4S4vFECXd4oQy5vtOfyeCdptAGXN8blLk/lPUaYyxuTvl1eYpBwxbm8sRB4nOfyZLq8sZrLGyfM5Y1l3JjH+cwsbu5NaKwQlzdeoMsbb8jlTfBcHu8kTTDg8ia63OWpvCcKc3kT07fL6xckXHEubxIEnuy5PJkub5Lm8iYLc3mTGDfmyT4zi5t7E5okxOVNEejyphhyeVM9l8c7SVMNuLxpLnd5Ku9pwlzetPTt8voHCVecy5sOgWd4Lk+my5uuubwZwlzedMaNeYbPzOLm3oSmC3F5MwW6vJmGXN4sz+XxTtIsAy5vtstdnsp7tjCXNzt9u7ykIOGKc3lzIPBcz+XJdHlzNJc3V5jLm8O4Mc/1mVnc3JvQHCEub55AlzfPkMub77k83kmab8DlLXC5y1N5LxDm8hakb5c3IEi44lzeQgi8yHN5Ml3eQs3lLRLm8hYybsyLfGYWN/cmtFCIy7tRoMu70ZDLW+y5PN5JWmzA5S1xuctTeS8R5vKWpG+XlxwkXHEubykEXua5PJkub6nm8pYJc3lLGTfmZT4zi5t7E1oqxOUtF+jylhtyeSs8l8c7SSsMuLyVLnd5Ku+VwlzeyvTt8lKChCvO5a2CwKs9lyfT5a3SXN5qYS5vFePGvNpnZnFzb0KrDLk8fZ4v3lau7ChlpYkzpNFKM+pXOzpM+gVCy7qMdVGcVz1aWUb96oRTv8DVZ13OChrnVY1WnlG/uuHWL3B1WVewLhnnFY9WkVG/ev+FfoErz7qS9Y9xXtFolRn1q/9f6Re4sqyrWP8a52WPVpVRvwb/pX6By8+6mnVZcV7eaIz6Nfyv9QtcXta2ddlx/utoMYz6NXKDfoF/zzrWuqI4/3G0OEb9rnOLfoF/zjreuuI4LzladUb9GrtJv8Cls65hXVWcQUdLYNSvidv0CwTPOtG66jgvGq0mo35N3ahf4OKsa1khxZlmtNqM+jVzq36BtFnXsUKO83+j1WXUr7mb9QtcyLqexRLn36PVZ9TverfrFzifdQOLLU67IaN+LSToRzkzvs9mO99zClW/lkL0Y3yfyK7HqF8rIfoxvs9hN2DUr7UQ/Rhfp9uNGPVrI0Q/xteZdmNG/doK0Y/xdZLdlFG/dkL0Y/T5dnNG/doL0Y/Rp9otGPXrIEQ/Rp9lt2LUr6MQ/Rh9gt2GUb9OQvRjPM/Z7Rj16yxEP8Z92u7AqF8XIfox7jN2J0b9ugrRj3Gd2F0Y9esWJv1CjfMmvuvEbMaascOlX6jXrzWy+K5fu45xXicKuX6tscV3/VoTRv0mCbl+ranFd/1aM0b9Jgu5fq25xXf92vWM+k0Rcv1aC4vv+rWWjPpNFXL9WivrX+O87NFaM+o3Tcj1a22sy4rzskZry6jfdCHXr7WzLjvOfx2tPaN+M4Rcv9bBuqI4/3G0joz6zRRy/Von64rjvORonRn1myXk+rUu1lXFGXS0roz6zRZy/Vo366rjvGi07oz6zRFy/VoPK6Q404zWk1G/uUKuX+tlhRzn/0brzajfPCHXr/WxWOL8e7S+jPrNF3L9Wj+LLc6/HzTBpd8CIe8/M77PZk9ifP95oRD9GN8nsqcw6rdIiH6M73PY0xj1u1GIfoyv0+0ZjPotFqIf4+tMexajfkuE6Mf4Osmew6jfUiH6Mfp8ex6jfsuE6MfoU+0FjPotF6Ifo8+yFzHqt0KIfow+wV7MqN9KIfoxnufspYz6rRKiH+M+bS9n1G+1EP0Y9xl7JaN+NwnRj3Gd2KsZ9Vsj5Pq1NYzXrzHWjM2pn7o3XBRBXat3lngNOHX8JEJGwgBwMjgFfAN4IHgQeDB4CHgoeBh4OHgEeCR4FHg0eAx4LHgceDx4AngieBJ4MngKeCp4Gng6eAZ4JngWeDZ4DngueB54PngBeCF4EfhG8GLwEvBS8DLwcvAK8ErwKvBq8E3gNeCbwWvBt4DXgW8FrwffBt4Avh28EXwHeBP4TnAJ6/xxEv0T4OPg78DHwEfBR8Dfgr8BHwYfAh8Efw0+AN4P3gfeC/4K/CV4D3g3eBd4J/gL8A7wdvDn4G3greAt4M/Am1P11u6EyX0z2puZb/CbenDviWvT+TW9oep3Szo5p0Q7tFuLc8ot4Lus85ydsI5+dqu2tvzMmvsZ1+k65ptGh+PO8cUs3rlNPdZ7d47nnaT1Bu4cf5vL7xyv8r7NwJ3jL/eO7IHQDtbFZTLOQkLizGfxb1aKZ6K9gTq3EzYS7iBsItxJuItwN+Eewr2E+wj3Ex4gPEh4iPAw4RHCo4THCI8TniA8SXiK8DThGcKzhOcIzxNeILxIeInwMuEVwquE1wivE94gvEl4i/A24R3Cu4T3CO8TPiB8SPiI8DHhE8KnhM2EzwhbCFsJ2wifE7YTdhC+IOwk7CLsJuwhfEn4irCXsI+wn3CA8DXhIOEQ4TDhG8K3hCOEo4RjhO8IxwknCCcJ3xN+IPxI+IlwivAz4RfCr4TThN8IvxP+IPxJ+ItwRpkAwjk1KXS28BH8hAhCJCGKEE3IQMhIyETITLiGkIWQlZCNkJ2Qg5CTkIuQm5CHkJeQj5CfUIBQkFCIUJhQxHF2yg5Wd+nXT16ZrIvv+J/JSntyU0e0o12fqWYNnCwD6gV+RkcelpZv6lMJoln/bkJA/a0oK+2hn5TrB9FTxZob7aR+Q4e2HT1ofL+xyU3GDU8aO2jEcOeyTh1+JjgiSHr6zyMdUmRAO8rxs9T/l8HBPj3++uBQz6m3+cyYIu44i/pDHys55fwRLuPrjDkQ4uGMt5ijsjzjG+KYapKUoNzjFve72/iqvIv72efIqDkr7pdn0Df6zGjLPG8xBsdO88ikEuiUdPzwSh6ZdM66eK58VtpHJp2z/v2RScHG8R6ZdOnjf49MUhN4xrrwyKSS/ov/KPdHic5FFOrZvwTjxlzSH56NM9Q4rxXonq415J5Kee6Jd5JKGXBPpV3unlTepYW5p9IC3dMdnntK457KoFPWc08y3VMZzT2VDYN7uoPRPZVh3JjLCnFP5QS6p3KG3FN5zz3xTlJ5A+6pgsvdk8q7gjD3VEGge9rkuac07qkiOpU89yTTPVXU3FOlMLinTYzuqSLjxlxJiHuqLNA9VTbknqp47ol3kqoYcE9VXe6eVN5VhbmnqgLd0z2ee0rjnqqhE/Dck0z3VE1zT4EwuKd7GN1TNcaNOSDEPdkC3ZNtyD3FeO6Jd5JiDLinWJe7J5V3rDD3FCvQPd3ruac07ikOnXjPPcl0T3Gae4oPg3u6l9E9xTFuzPFC3FN1ge6puiH3VMNzT7yTVMOAe0pwuXtSeScIc08JAt3TfZ57SuOeEtGp6bknme4pUXNPNcPgnu5jdE+JjBtzTSHuqZZA91TLkHuq7bkn3kmqbcA91XG5e1J51xHmnuoIdE9FDG2wzPMWNvdUF516nnuS6Z7qau6pXhjcUxHGs39dxo25nqHF7df047yzQqhj1fe7+4T+912I/PwO9Gnm2+pxx6fu5mMi72eiw1PjgdAOm3F+7GcMz3UgtOP8HawMzPXzLq/x2w3V+AtCapxxfuwXXF7j+QzV+Msur/H7DdX4K0JqnHF+7FdcXuN/+0f/BS3dHGtAUKzxgmKtGcZYWW4fbGBvet3l6/ROQ3vyG0L2ZMb5sd9w+VzfZWiu3w7TXLvoda7NmbOaD/WmWeonHuq1gLp1urrvkeKy4ErgzIQG1G6IuXTe1fNO/N+7wHeDA/i/8eCa4JyERtS+LshYefA7ecH5wPnBBcAFwVkIjandxDHWSIzVCL9zP+J5APwg+CHww+BHwI+CHwM/Dn4C/CT4KfDT4GfAz4KfAz8PfgH8Ivgl8MvgV8Cvgl8Dvw5+A/wm+C3w2+B3wO+C3wO/D/4A/CH4I/DH4E/An4I3gz8DbwFvBW8Dfw7eDt4B/gK8E7wLvBu8B/wl+CvwXvA+8H7wAfDX4IPgQ+DD4G/A34KPgI+Cj4G/Ax8HnwCfBH8P/gH8I/gn8Cnwz+BfwL+CT4N/A/8O/gP8J/gv8BnwWfA5sIU69oH94AhwJDgKHA3OAM4IzpS6lsHXpK4hcFZwNnB2cI7UdQvOBc4NbgwuBC4MrkhoSu1mjrWZ+l72BuTWAL/bNHVsQnNqX+8P/omoZfGfo4pbvPtq6tHC4UO9T5ZDHLM4BOUet6Wf72RvKu+WBl7QhOsTW87FZTLOwkLizG/xb1aKZ6LdimqtNaENoS2hHaE9oQOhI6EToTOhC6EroRuhO6EHoSehF6E3oQ+hL6EfoT8hiTCAkExIIdxAGEgYRBhMGEIYShhGGE4YQRhJGEUYTRhDGEsYRxhPmECYSJhEmEyYQphKmEaYTphBmEmYRZhNmEOYS5hHmE9YQFhIWES4kbCYsISwlLCMsJywgrCSsIqwmnATYQ3hZsJawi2EdYRbCesJtxE2EG4nbCTcQdhEuJNwF+Fuwj2Eewn3Ee4nPEB4kPAQ4WHCI4RHCY8RHic8QXiS8BThacIzhGcJzxGeJ7xAeJHwEuFlwiuEVwmvEV4nvEF4k/AW4W3CO4R3Ce8R3id8QPiQ8BHhY/+FuvUeY+A9xsBywWMMnOfnQGiH0ccYfOLnu6giXMb3Ez//uUQdnzoqyzO+IY6pJkkJyj3uZj9f8ZvKe7OffY6MmrPNjAsqXAa9jd+MtszzFrZLKj9DZ4vjh94llTxjhuWSSjWBzksqt/jNX1LZhvHs/xnjxrzFH56NM9Q4twp0T1sNuadtnnvinaRtBtzT5y53Tyrvz4W5p88Fuqe2nntK4562o7PDc08y3dN2zT3tCIN7ast49t/OuDHvEOKevhDonr4w5J52eu6Jd5J2GnBPu1zunlTeu4S5p10C3VM7zz2lcU+70dnjuSeZ7mm35p72hME9tWM8++9m3Jj3CHFPXwp0T18ack9fee6Jd5K+MuCe9rrcPam89wpzT3sFuqdOnntK4572obPfc08y3dM+zT3tD4N76sR49t/HuDHvF+KeDgh0TwcMuaevPffEO0lfG3BPB13unlTeB4W5p4MC3VNnzz2lcU+H0DnsuSeZ7umQ5p4Oh8E9dWY8+x9i3JgPC3FP3wh0T98Yck/feu6Jd5K+NeCejrjcPam8jwhzT0cEuqcunntK456OonPMc08y3dNRzT0dC4N76sJ49j/KuDEfE+KevhPonr4z5J6Oe+6Jd5KOG3BPJ1zunlTeJ4S5pxMC3dPHnntK455OovO9555kuqeTmnv6Pgzu6WPGs/9Jxo35e0OL26/px3lnhVDH+sHv7hO6ugvRD35+B/quy29/re7mYyLv94TcapVxfuz3DM91ILTj7ztYmZjrD11e460N1fhHQmqccX7sj1xe4/kN1finLq/xroZqfLOQGmecH3uzy2v8e8y1xTuukVj3C4r1sKBYj4UxVo7HGJjYm7a6fJ22N7QnbxOyJzPOj73N5XPdwdBc7xDyGAPO11GcOav5cD7GQL0W+PtW9eAd4D1g9RiDH6n9E+bSeVfP9vidDuCO4P3gw+BjYPUYg1PU/jnIWG/jd94Bvwt+D/w++AOweozBL9T+1THWSIx1Cr/TFdwN3B3cA9wT3AvcG9wH3BfcD9wfnAQeAE4Gp4BvAA8EDwIPBg8BDwUPAw8HjwCPBI8CjwaPAY8FjwOPB08ATwRPAk8GTwFPBU8DTwfPAM8EzwLPBs8BzwXPA88HLwAvBC8C3wheDF4CXgpeBl4OXgFeCV4FXg2+CbwGfDN4LfgW8DrwreD14NvAG8C3gzeC7wBvAt8Jvgt8N/ge8L3g+8D3gx8APwh+CPww+BHwo+DHwI+DnwA/CX4K/DT4GfCz4OfAz4NfAL8Ifgn8MvgV8Kvg18Cvg98Avwl+C/wL+EPwR2D1GIPT1P7NsTZT38tuhd/5EXwarB5j8Du1//BbaQ7u88ef/qseK6CNZYfrE3BnzIEQD2e8fzm09j4BD3FMNUl/+fnHPePnK35TeZ/xs8+R0U/AzzAuqHB9Al7fb0bbEOfNNjj2RX/LuTmdReec44feJ+A8Y4blE3A1ga9aFz4BP+cocF08rr9dn/Hsf5ZxYz7nD8/GGfIJJEKee3LGHAjxcMbrc+z6nnsKdcyI84Jyj+uPYCx+Q3n7I9jnyEis6u08E7GGy0GFssmmpD2SgoRrxEGZmEOmsQJpNjtMYKRjIq/EjTUMkrPuxhpa/+7Ggo3z/8qNubkgUp1cRMSFiVF9VRQNrLQHt7PjvJ4ukvGkERXBtumkpOoZ5dDTRD2c8/M7x53uul7kIjeq8o6I4M97l8uvk1F5RxrIe7ehz+lC3Tf0EznnvuGs8ZDvBelS/bTDZqxvm7Fm7D1CPieOYDzXRPO90jXyIk+ttegIM3sY51ybeOu2uYFzaoYIMzXOHWdGIXFmEhJnZsY41WNKFVLfwVI1peZLaaH+TqR18RNXnbkEQjvsS2kUCO0w8nEJd4y/+83UG3vBXcNYcIYLythkXRPh/hizcMco5UyYVcjOnY3RoUldSNkELKTsEUJ25hx8gcZILagcAgoqp5SCysUXaKzUgsoloKByc8YYro/iS/CNleaj+DzeR/G8k5THwEfxeV3+UbzKO6/gj7dLWFZYPHAgtMMuIiTOAhb/ZqU4C9r5qCjyEwoQChIKEQoTihCKEooRihNKEEo6Cig7WH2srW92mayLPyLPZKXdDNUh5aNv5R4yOvKwtHxTP8aP5v27Sepv6c5F38TrB9FTxVoQ7eTho8Ylj0tuO67/0EFJTcYNTxo7aMTwRv2GDnUWQ+ofSS2KiCBJ6j+PdAiSAe0ox89S/18GB1/y+oFQd+K8EWZOpdxxXstw9gn3nQ+vNXTlYinPLvFOUikDdqm0y+2Syru0oSsXUw+TmgZCPMJl6wqYeueAN86w3fmwDEQve5VXGnrf+7j0EZbvfagJdN75sGzExX+U+yqVAoxn/zKMG3NZIZ9blBPonsoZck/lPffEO0nlDbinCi53TyrvCsLcUwWB7qmg557SuKeKEL2S555kuqeKmnuqFAb3VJDx7F+RcWOuJMQ9VRboniobck9VPPfEO0lVDLinqi53TyrvqsLcU1WB7qmQ557SuKdqED3guSeZ7qma5p4CYXBPhRjP/tUYN+aAEPdkC3RPtiH3FOO5J95JijHgnmJd7p5U3rHC3FOsQPdUzHNPadxTHESP99yTTPcUp7mn+DC4p2KMZ/84xo05Xoh7qi7QPVU35J5qeO6Jd5JqGHBPCS53TyrvBGHuKUGgeyruuac07ikRotf03JNM95SouaeaYXBPxRnP/omMG3NNIe6plkD3VMuQe6rtuSfeSaptwD3Vcbl7UnnXEeae6gh0TyU895TGPdWF6PU89yTTPdXV3FO9MLinEoxn/7qMG3M9Q4vbr+nH+d3AUMeqH+HuE3oJNVYEvwPd7/L7x6pvMZvI+4CQZ3oyzo99wPBcB0I7zn9z38BcH3J5jec3VOOHhdQ44/zYh11e4wUM1fgRl9d4SUM1flRIjTPOj33U5TUej7m2eMc1EmtNQbHWC2OsHM+gN7Hej7u89gsb2udOCNnnGOfHPuF2v2porn8Q8mwBztcmnDmr+XA+g175a/UM6LLgSuAAWD2DvgG1G2IunXd8KozfKQIuCo4H1wTXA6tn0Dei9nXau7DcNdJYyCdcTYTE2TSCv/5SS6AxaqMJuClYvTHbjNrNDdfK9ULmoIWQOFsarJXrURstwC0dtdKK2q0N10obIXPQVkic7QzWShvURltwO0ettKd2B8O10lHIHHQSEmdng7XSEbXRCdzZUStdqN3VcK10EzIH3YXE2cNgrXRDbXQH93DUSk9q9zJcK72FzEEfIXH2NVgrvVEbfcB9HbXSj9r9DddKkpA5GCAkzmSDtZKE2hgATnbUirp88QbDtTJQyBwMEhLnYIO1MhC1MQg82FErQ6g91HCtDBMyB8OFxDnCYK0MQ20MB49w1MpIao8yXCujhczBGCFxjjVYK6NRG2PAYx21Mo7a4w3XygQhczBRSJyTDNbKBNTGRPAkR61MpvYUw7UyVcgcTBMS53SDtTIVtTENPN1RKzOoPdNwrcwSMgezhcQ5x2CtzEJtzAbPcdTKXGrPM1wr84XMwQIhcS40WCvzURsLwAsdtbKI2jcarpXFQuZgiZA4lxqslcWojSXgpY5aWUbt5YZrZYWQOVgpJM5VBmtlBWpjJXiVo1ZWU/smw7WyRsgc3GxgDlKvw1oDzW8Gq6e7raX2LYa1XydE+1sNar8Omt/q0H49tW8zrP0GIdrfblD7DdD8dof2G6l9h2HtNwnR/k6D2m+C5nc6tL+L2ncb1v4eIdrfa1D7e6D5vQ7t76P2/Ya1f0CI9g8a1P4BaP6gQ/uHqP2wYe0fEaL9owa1fwSaP+rQ/jFqP25Y+yeEaP+kQe2fgOZPOrR/itpPG9b+GSHaP2tQ+2eg+bMO7Z+j9vOGtX9BiPYvGtT+BWj+okP7l6j9smHtXxGi/asGtX8Fmr/q0P41ar9uWPs3hGj/pkHt34Dmbzq0f4vabxvW/h0h2r9rUPt3oPm7Du3fo/b7hrX/QIj2HxrU/gNo/qFD+4+o/bFh7T8Rov2nBrX/BJp/6tB+M7U/M6z9FiHabzWo/RZovtWh/TZqf25Y++1CtN8hJM4vhMS5U0icu4TEuVtInHuExPmlkDi/EhLnXiFx7hMS534hcR4QEufXQuI8KCTOQ0LiPCwkzm+ExPmtkDiPCInzqJA4jwmJ8zshcR4XEucJIXGeFBLn90Li/EFInD8KifMnIXGeEhLnz0Li/EVInL8KifO0kDh/ExLn70Li/ENInH8KifMvIXGeERLnWSFxnhMSp7opr4Q4fULi9AuJM0JInJFC4owSEme0kDgzCIkzo5A4MzHGmXrNSxeM1wjXupQEbwfvAH8B3gluBm4Fbg/uAu4J7gdOAQ8BjwSPA08GzwDPBS8CLwOvBq8FrwdvBN8Fvg/8EPgx8FPg58AvgV8DvwV+D/wReDN4G3gXeDd4D/hL8FfgveB94P3gA+CvwQfBh8CHwd+AvwUfAR8FHwN/Bz4OPgE+Cf4e/AP4R/BP4FPgn8G/gH8Fnwb/Bv4d/Af4T/Bf4DPgs+BzYOVVFPvAfnAEOBIcBY4GZwBnBGcCVyJkpvY1kefXm/P72PnwNxuAM+P/5CJkoXbWyOBPJrasi9duILTDLmnxrt3UI1vkhbb3hOcQxywJQbnHzR7JaPYN5Z09kn2OwvbkZM7FZTLOokLiLGjxb1aKs6Cdg2otJyEXITchDyEvIR8hP6EAoSChEKGwoy6zg9UNNfTNLpN18ZOcM1lpN0N1SHlCc5R1/sLj1DwsLd/Up01H8/7dJPW3oqy0h76J1w+ip4q1INrJw0eNSx6X3HZc/6GDkpqMG540dtCI4Y36DR3qLIbUP5JaFBFBktR/HukQJAPaUY6fpf6/DA726VnUB4e6E2ePNHMq5Y6zCMPZJ/WR2OGyS0Ui+XcgdRT17BLvJBU1YJeKudwuqbyLGbBLluMwqWkgxCNcti6XofdlmOctxuDYtnNzKo6aK+GovVRr4LcubGTRjvlInSf1X85ZF8+Vz9H243ci/uF3fJcYx2lRUv9/qkVh1sSI3TK6+fogrprAM/hDql8i8uI/GsH8t3Mxnv2LM27MJYS86VpSoHsqacg9Xeu5J95JutaAeyrl9jebKL5SwtxTKYHuKbfnntK4p9KouTKee5Lpnkpr7qlMGNxTbsazf2nGjbmMEPdUVqB7KmvIPZXz3BPvJJUz4J7Ku9w9qbzLC3NP5QW6pzyee0rjniqg5ip67kmme6qguaeKYXBPeRjP/hUYN+aKQtxTJYHuqZIh91TZc0+8k1TZgHuq4nL3pPKuIsw9VRHongp47imNe6qKmqvmuSeZ7qmq5p6qhcE9FWA8+1dl3JirCXFPAYHuKWDIPdmee+KdJNuAe4pxuXtSeccIc08xAt1TQc89pXFPsai5OM89yXRPsZp7iguDeyrIePaPZdyY44S4p3iB7inekHuq7rkn3kmqbsA91XC5e1J51xDmnmoIdE+FPPeUxj0loOYSPfck0z0laO4pMQzuqRDj2T+BcWNONLS4/Zp+nN8NDHWsmpHuPqGXpDFqRvI70J+ieeeaOz71LWYTeZ+KDk+NB0I7bMb5sU8ZnutAaMff39w3Mde/urzGcxqq8dNCapxxfuzTLq/xgoZq/A+X13hhQzX+p5AaZ5wf+0+X13g1zLXFO66RWOMExZoYxlhDvr2nZWa9n3V57ec1tM+dE7LPMc6Pfc7lc53P0Fz7M8h4/c352oQzZzUf6o2o1K1S+Wt1S8IS4DLgiuDMhFrUro25dN7xKS9+Jx84P7gaOA6cCM5JqEPtupFWmoO7RuoJ+YSrvpA4G0Ty11/q+4X1UBv1wQ3A6o3ZhtRuZLhWrhMyB42FxNnEYK1ch9poDG7iqJWm1G5muFaaC5mD64XE2cJgrTRHbVwPbuGolZbUbmW4VloLmYM2QuJsa7BWWqM22oDbOmqlHbXbG66VDkLmoKOQODsZrJUOqI2O4E6OWulM7S6Ga6WrkDnoJiTO7gZrpStqoxu4u6NWelC7p+Fa6SVkDnoLibOPwVrphdroDe7jqJW+1O5nuFb6C5mDJCFxDjBYK/1RG0ngAY5aSaZ2iuFauUHIHAwUEucgg7VyA2pjIHiQo1YGU3uI4VoZKmQOhgmJc7jBWhmK2hgGHu6olRHUHmm4VkYJmYPRQuIcY7BWRqE2RoPHOGplLLXHGa6V8ULmYIKQOCcarJXxqI0J4ImOWplE7cmGa2WKkDmYKiTOaQZrZQpqYyp4mqNWplN7huFamSlkDmYJiXO2wVqZidqYBZ7tqJU51J5ruFbmCZmD+ULiXGCwVuahNuaDFzhqZSG1FxmulRuFzMFiIXEuMVgrN6I2FoOXOGplKbWXGa6V5ULmYIWBOUi9Dms5NF8BVk93W0ntVYa1Xy1E+5sMar8amt/k0H4NtW82rP1aIdrfYlD7tdD8Fof266h9q2Ht1wvR/jaD2q+H5rc5tN9A7dsNa79RiPZ3GNR+IzS/w6H9JmrfaVj7u4Rof7dB7e+C5nc7tL+H2vca1v4+Idrfb1D7+6D5/Q7tH6D2g4a1f0iI9g8b1P4haP6wQ/tHqP2oYe0fE6L94wa1fwyaP+7Q/glqP2lY+6eEaP+0Qe2fguZPO7R/htrPGtb+OSHaP29Q++eg+fMO7V+g9ouGtX9JiPYvG9T+JWj+skP7V6j9qmHtXxOi/esGtX8Nmr/u0P4Nar9pWPu3hGj/tkHt34Lmbzu0f4fa7xrW/j0h2r9vUPv3oPn7Du0/oPaHhrX/SIj2HxvU/iNo/rFD+0+o/alh7TcL0f4zIXFuERLnViFxbhMS5+dC4twuJM4dQuL8QkicO4XEuUtInLuFxLlHSJxfConzKyFx7hUS5z4hce4XEucBIXF+LSTOg0LiPCQkzsNC4vxGSJzfConziJA4jwqJ85iQOL8TEudxIXGeEBLnSSFxfi8kzh+ExPmjkDh/EhLnKSFx/iwkzl+ExPmrkDhPC4nzNyFx/i4kzj+ExPmnkDj/EhLnGSFxnhUS5zkhcVpRMuL0CYnTLyTOCMY4U6956YLx6uBal8LgzeDPwFvAW8ENwU3BLcHtwJ3BPcB9wcngweAR4LHgSeDp4DngheCl4JXgNeB14A3gTeB7wA+AHwE/AX4G/AL4FfAb4HfAH4A/AW8Dfw7eDt4B/gK8E7wLvBu8B/wl+CvwXvA+8H7wAfDX4IPgQ+DD4G/A34KPgI+Cj4G/Ax8HnwCfBH8P/gH8I/gn8Cnwz+BfwL+CT4N/A/8O/gP8J/gv8BnwWfA5sNrrFPvAfnAEuBIhktpRUefXm/P72DkwRi1wJP5PLvV71M4QZaU5uNdrxqirHiugjWWH60nUGZn3mNQjk0PrSLDf8e/ek6ivYEw1SZmi+MfNHMVoUgzlnTmKfY6MPok6M+OCCteTqOtHmNE2xHmzDY590d9ybk7XoOayOGrPexI1z5hheRK1msBX8YdUP4tjUericf1t5yIK9ex/DePGnEXIq52sAt1TVkPuKZvnnngnKZsB95Td5e5J5Z3dkHvijlU9AtBErOFyUKFssilpj6Qg4RpxUCbmkGmsgHOzy4G6yHmVbqxhkJx1N9bQ+nc3Fmyc/1duzM0FkerkckRdmBjVV0XRwEp7cDs7xjzsnIwnjVx8m05Kqp65HHqaqIcsUfzOMTKD2ZNbqG5U5Z3DQN5R7sr7ovhU3jkN5B1t6Nm+oe4b+omcc99w1nio+mVwqX7aYTPWt81YM3YGIc+WzsF4rsnN90rXyIs8tdZyR5nZwzjn2sRbt1ki+fPOI+Rdo7xC4swnJM78jHGq12vOZ8irmlLzpbRQfyfSSvtCydJyCYR22JfSKBDaYeTjEu4Yow3VG3vBFWAM1HBBGZusAlHuj7Egd4xSzoSFhOzchRkdmtSFVFjAQioiZWcuyhdojNSCKiqgoIpJKajifIHGSi2o4gIKqoSUgiop5NR8rZA4SwmJs7SQOMsIibOskDjLCYmzvJA4KwiJs6KQOCsJibOykDirCImzqpA4qwmJMyAkTltInDFC4owVEmeckDjjhcRZXUicNYTEmSAkzkQhcdYUEmctIXHWFhJnHSFx1hUSZz0hcdYXEmcDIXE2FBJnIyFxXickzsZC4mwiJM6mQuJsJiTO5kLivF5InC2ExNlSSJythMTZWkicbYTE2VZInO2ExNleSJwdhMTZUUicnYTE2VlInF2ExNlVSJzdhMTZXUicPYTE2VNInL2ExNlbSJx9hMTZV0ic/YTE2V9InElC4hwgJM5kIXGmCInzBiFxDhQS5yAhcQ4WEucQIXEOFRLnMCFxDhcS5wghcY4UEucoIXGOFhLnGCFxjmWOk/sLfC39lpU1gj/vLBncnfcPlHcWA3lnDdMNs0KNcxzjLQAY59rOKqBushuom/Eu3ydU3jkN5D1BQN65DeQ90eV5Z4+0rEIGbpKWw+XrW93EraCBvHMKOS9MYjwvMM61nVNA3RQxUDeTXb5PqLyLGch7ioC8SxjIe6qQ1zXThMQ5XUicM4TEOVNInLOExDlbSJxzhMQ511Ccfi3OQGjH34+f4sp5npCc/Yw5zxeScwRjzguE5BzJmPNCITlHMea8SEjO0Yw53ygk548Yc14sJGfnvfNCzXmJkJyvZcx5qZCcSzHmvExIzqUZc14uJOcyjDmvEJJzWcacVwrJuRxjzquE5FyeMefVQnKuwJjzTUJyrsiY8xohOVdizPlmITlXZsx5rZCcqzDmfIuQnKsy5rxOSM7VGHO+VUjOAcac1wvJ2WbM+TYhOccw5rxBSM6xjDnfLiTnOMacNwrJOZ4x5zuE5FydMedNQnKuwZjznUJyTmDM+S4hOScy5ny3kJxrMuZ8j5CcazHmfK+QnGsz5nyfkJzrMOZ8v5Cc6zLm/ICQnOsx5vygkJzrM+b8kJCcGzDm/LCQnBsy5vyIkJwbMeb8qJCcr2PM+TEhOTdmzPlxITk3Ycz5CSE5N2XM+UkhOTdjzPkpITk3Z8z5aSE5X8+Y8zNCcm7BmPOzQnJuyZjzc0JybsWY8/NCcm7NmPMLQnJuw5jzi0JybsuY80tCcm7HmPPLQnJuz5jzK0Jy7sCY86tCcu7ImPNrQnLuxJjz60Jy7syY8xtCcu7CmPObQnLuypjzW0Jy7saY89tCcu7OmPM7QnLuwZjzu0Jy7smY83tCcu7FmPP7QnLuzZjzB0Jy7sOY84dCcu7LmPNHQnLux5jzx0Jy7s+Y8ydCck5izPlTITkPYMx5s5Cckxlz/kxIzimMOW8RkvMNjDlvFZLzQMactwnJeRBjzp8LyXkwY87bheQ8hDHnHUJyHsqY8xdCch7GmPNOITkPZ8x5l5CcRzDmvFtIziMZc94jJOdRjDl/KSTn0Yw5fyUk5zGMOe8VkvNYxpz3Ccl5HGPO+4XkPJ4x5wNCcp7AmPPXQnKeyJjzQSE5T2LM+ZCQnCcz5nxYSM5TGHP+RkjOUxlz/lZIztMYcz4iJOfpjDkfFZLzDMacjwnJeSZjzt8JyXkWY87HheQ8mzHnE0JynsOY80khOc9lzPl7ITlnsPhy/kFIzhkZc/5RSM6ZGHP+SUjOmRlzPiUk52sYc/5ZSM5ZGHP+RUjOWRlz/lVIztkYcz4tJOfsjDn/JiTnHIw5/y4k55yMOf8hJOdcjDn/KSTn3Iw5/yUk5zyMOZ8RknNexpzPMuacF+P4kLN6JqR6RiL9CUs9Q0+9HlSvj9TrBeWflZ9U/kr5DXX+VecjtT+r/UqtX1XPan7VuMswdj5CfkIBQkFCIUJhQhFCUUIxQnFCCUJJwrWEUoTShDKEsoRyhPKECoSKhEqEyoQqhKqEakoLgk2IURoT4gjxhOqEGoQEQiKhJqEWoTahDqEuoR7mpwGhIaER4TpCY0ITQlNCM0JzwvWEFoSWhFaE1oQ2hLaEdoT2hA6EjoROhM6ELoSuhG6E7oQehJ6EXoTehD6EvoR+hP6EJMIAQjIhhXADYSBhEGEwYQhhKGEYYThhBGEkYRRhNGEMYSxhHGE8YQJhImESYTJhCmEqYRphOmEGYSZhFmE2YQ5hLmEeYT5hAWEhYRHhRsJiwhLCUuv8PC8nrCCsJKwirCbcRFhDuJmwlnALYR3hVsJ6wm2EDYTbCRsJdxA2Ee4k3IU41aGeIaueqaqeMaqeuameQameyaieUaie2aeeYaee6aaecaae+aWegaWeCaWekaSeGaSeoaOeKaOesaKeOaKewaGeSaGe0aCeWaDu4a/uaa/u8a7uea7uAa7uia3uEa3umazuIazuqavuMavuuaruQaruyanuUanu2ajuYaju6afucafu+abugabuCabukaXuGaXuoaTuKaTusaPuOaPuwaLuSaLu0aHuWaHu4aDuaaC+46++866+A66+E62+I6y+M6u+Q6q+U6m+Y6i+c6e+g6a+k6W+o6S+s6O+w6K+06G+46Cu+VfXwKtrwtU10uqaYXUNrbqmVF1jqa45VNfgqWvS1DVa6poldQ2PuqZFXeOhrnlQ1wCoz8TVZ8TqM1P1GaL6TE19xqQ+c1GfQaj35NV71Oo9W/UepnpPT73Hpd7zUe+BqPcE1Gtk9ZpRvYZSrymUx1aeU3kw5UnUOVqds9Qerva01OP/AJgOWB80IQUA", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts index 0caa4840668..2986f9127d8 100644 --- a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts @@ -52,7 +52,7 @@ describe('e2e_nested_contract', () => { parentContract.methods .entryPoint(childContract.address, childContract.methods.valueInternal.selector.toField()) .simulate(), - ).rejects.toThrowError(/Assertion failed: Sender must be this contract '.*'/); + ).rejects.toThrowError('Assertion failed: Sender must be this contract'); }, 100_000); it('performs public nested calls', async () => { @@ -75,7 +75,7 @@ describe('e2e_nested_contract', () => { parentContract.methods .enqueueCallToChild(childContract.address, childContract.methods.pubIncValueInternal.selector.toField(), 42n) .simulate(), - ).rejects.toThrowError(/Assertion failed: Sender must be this contract '.*'/); + ).rejects.toThrowError('Assertion failed: Sender must be this contract'); }, 100_000); it('enqueues multiple public calls', async () => { diff --git a/yarn-project/noir-contracts/Dockerfile.build b/yarn-project/noir-contracts/Dockerfile.build index 79b9a0f8f8d..b946f891009 100644 --- a/yarn-project/noir-contracts/Dockerfile.build +++ b/yarn-project/noir-contracts/Dockerfile.build @@ -19,4 +19,5 @@ RUN ./scripts/install_noirup.sh $(pwd) ENV PATH="/usr/src/yarn-project/noir-contracts/.nargo/bin:${PATH}" RUN ./scripts/install_noir.sh +RUN ./scripts/install_noir_backend.sh RUN ./scripts/compile_ci.sh diff --git a/yarn-project/noir-contracts/bootstrap.sh b/yarn-project/noir-contracts/bootstrap.sh index 1077490d138..85414de80c6 100755 --- a/yarn-project/noir-contracts/bootstrap.sh +++ b/yarn-project/noir-contracts/bootstrap.sh @@ -9,6 +9,7 @@ fi # Update noir ./scripts/install_noir.sh +./scripts/install_noir_backend.sh # Use yarn script to compile and create types yarn diff --git a/yarn-project/noir-contracts/scripts/install_noir_backend.sh b/yarn-project/noir-contracts/scripts/install_noir_backend.sh new file mode 100755 index 00000000000..6cfe1d062ee --- /dev/null +++ b/yarn-project/noir-contracts/scripts/install_noir_backend.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Script to install the current barretenberg backend + +set -eu + +BACKEND_NAME="acvm-backend-barretenberg" + +# If the backend is not installed, then install it +if [ -z $(nargo backend ls | grep $BACKEND_NAME) ]; then + echo "Installing $BACKEND_NAME" + nargo backend install $BACKEND_NAME https://github.com/AztecProtocol/barretenberg/releases/download/barretenberg-v0.5.1/barretenberg-x86_64-linux-gnu.tar.gz +fi From 7361302b0b06bc218d287da56cabd7f567cd6aa3 Mon Sep 17 00:00:00 2001 From: josh crites Date: Mon, 11 Sep 2023 09:39:33 -0400 Subject: [PATCH 070/104] fix: Add homepage url to aztec.js package.json (#2196) Add https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/aztec.js as the homepage url for aztec.js. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [x] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [x] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --- yarn-project/aztec.js/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn-project/aztec.js/package.json b/yarn-project/aztec.js/package.json index 956b48c4183..82c44fe8aae 100644 --- a/yarn-project/aztec.js/package.json +++ b/yarn-project/aztec.js/package.json @@ -1,5 +1,6 @@ { "name": "@aztec/aztec.js", + "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/aztec.js", "version": "0.1.0", "type": "module", "exports": { From 55d1674cca9e512c0bc9f6fc09df3cb5a1899772 Mon Sep 17 00:00:00 2001 From: Aztec Bot <49558828+AztecBot@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:55:48 -0400 Subject: [PATCH 071/104] chore(master): Release 0.6.7 (#2174) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.6.7 ## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.6...aztec-packages-v0.6.7) (2023-09-11) ### Bug Fixes * Use Github Bot token for dispatch workflow ([#2171](https://github.com/AztecProtocol/aztec-packages/issues/2171)) ([e6af616](https://github.com/AztecProtocol/aztec-packages/commit/e6af6164095a706109a6f61ef7e1196de67716dc))
barretenberg.js: 0.6.7 ## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.6...barretenberg.js-v0.6.7) (2023-09-11) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.6.7 ## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.6...barretenberg-v0.6.7) (2023-09-11) ### Miscellaneous * **barretenberg:** Synchronize aztec-packages versions
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 14 ++++++++++++++ VERSION | 2 +- circuits/cpp/barretenberg/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/VERSION | 2 +- circuits/cpp/barretenberg/barretenberg-wasm.nix | 2 +- circuits/cpp/barretenberg/barretenberg.nix | 2 +- circuits/cpp/barretenberg/cpp/CMakeLists.txt | 2 +- circuits/cpp/barretenberg/ts/CHANGELOG.md | 7 +++++++ circuits/cpp/barretenberg/ts/package.json | 2 +- 10 files changed, 37 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 51102ba9694..bb18cd9a1d3 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.6.6", - "circuits/cpp/barretenberg": "0.6.6", - "circuits/cpp/barretenberg/ts": "0.6.6" + ".": "0.6.7", + "circuits/cpp/barretenberg": "0.6.7", + "circuits/cpp/barretenberg/ts": "0.6.7" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a1c4a5b52c..4192d1e02d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.6...aztec-packages-v0.6.7) (2023-09-11) + + +### Features + +* Testing commands in CLI docs ([#2119](https://github.com/AztecProtocol/aztec-packages/issues/2119)) ([73328db](https://github.com/AztecProtocol/aztec-packages/commit/73328dbe4e509235329e32ff88f823d849a2b673)) + + +### Bug Fixes + +* Add homepage url to aztec.js package.json ([#2196](https://github.com/AztecProtocol/aztec-packages/issues/2196)) ([7361302](https://github.com/AztecProtocol/aztec-packages/commit/7361302b0b06bc218d287da56cabd7f567cd6aa3)) +* **ci:** Add install backend step in noir rebuild ([#2182](https://github.com/AztecProtocol/aztec-packages/issues/2182)) ([27b8bed](https://github.com/AztecProtocol/aztec-packages/commit/27b8bed05fea4f44f36894739613b07cdb8089ac)) +* Use Github Bot token for dispatch workflow ([#2171](https://github.com/AztecProtocol/aztec-packages/issues/2171)) ([e6af616](https://github.com/AztecProtocol/aztec-packages/commit/e6af6164095a706109a6f61ef7e1196de67716dc)) + ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.5...aztec-packages-v0.6.6) (2023-09-11) diff --git a/VERSION b/VERSION index fe152d6af84..9502cd8069c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.6.6 x-release-please-version +v0.6.7 x-release-please-version diff --git a/circuits/cpp/barretenberg/CHANGELOG.md b/circuits/cpp/barretenberg/CHANGELOG.md index 412af9b65a9..c982314138c 100644 --- a/circuits/cpp/barretenberg/CHANGELOG.md +++ b/circuits/cpp/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.6...barretenberg-v0.6.7) (2023-09-11) + + +### Miscellaneous + +* **barretenberg:** Synchronize aztec-packages versions + ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.5...barretenberg-v0.6.6) (2023-09-11) diff --git a/circuits/cpp/barretenberg/VERSION b/circuits/cpp/barretenberg/VERSION index fe152d6af84..9502cd8069c 100644 --- a/circuits/cpp/barretenberg/VERSION +++ b/circuits/cpp/barretenberg/VERSION @@ -1 +1 @@ -v0.6.6 x-release-please-version +v0.6.7 x-release-please-version diff --git a/circuits/cpp/barretenberg/barretenberg-wasm.nix b/circuits/cpp/barretenberg/barretenberg-wasm.nix index 7ebdaec86e9..b77203afb96 100644 --- a/circuits/cpp/barretenberg/barretenberg-wasm.nix +++ b/circuits/cpp/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.6.6"; # x-release-please-version + version = "0.6.7"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/barretenberg.nix b/circuits/cpp/barretenberg/barretenberg.nix index f82fa08b206..2f44f94812d 100644 --- a/circuits/cpp/barretenberg/barretenberg.nix +++ b/circuits/cpp/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.6.6"; # x-release-please-version + version = "0.6.7"; # x-release-please-version src = ./cpp; diff --git a/circuits/cpp/barretenberg/cpp/CMakeLists.txt b/circuits/cpp/barretenberg/cpp/CMakeLists.txt index f1825eea176..7d32cfff096 100644 --- a/circuits/cpp/barretenberg/cpp/CMakeLists.txt +++ b/circuits/cpp/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.6.6 # x-release-please-version + VERSION 0.6.7 # x-release-please-version LANGUAGES CXX C ) diff --git a/circuits/cpp/barretenberg/ts/CHANGELOG.md b/circuits/cpp/barretenberg/ts/CHANGELOG.md index b224fc4d353..1dcbdc136f6 100644 --- a/circuits/cpp/barretenberg/ts/CHANGELOG.md +++ b/circuits/cpp/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.7](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.6...barretenberg.js-v0.6.7) (2023-09-11) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.6.6](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.5...barretenberg.js-v0.6.6) (2023-09-11) diff --git a/circuits/cpp/barretenberg/ts/package.json b/circuits/cpp/barretenberg/ts/package.json index 3b10a1613c8..31c190ac4f2 100644 --- a/circuits/cpp/barretenberg/ts/package.json +++ b/circuits/cpp/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.6.6", + "version": "0.6.7", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/circuits/cpp/barretenberg/ts", "license": "MIT", "type": "module", From 48e5bc54063595a01f60acf1d556a0b4a2c16dff Mon Sep 17 00:00:00 2001 From: AztecBot Date: Mon, 11 Sep 2023 13:56:41 +0000 Subject: [PATCH 072/104] git subrepo push --branch=master circuits/cpp/barretenberg subrepo: subdir: "circuits/cpp/barretenberg" merged: "1763e4db6" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "master" commit: "1763e4db6" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- circuits/cpp/barretenberg/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/barretenberg/.gitrepo b/circuits/cpp/barretenberg/.gitrepo index 46ee2fd938e..635cbc89589 100644 --- a/circuits/cpp/barretenberg/.gitrepo +++ b/circuits/cpp/barretenberg/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/barretenberg branch = master - commit = 4a9f5cc359b5416861c495a5245e089fcf17b3c4 - parent = 4318b62128b59e867d488a35613b81e5f4e9172c + commit = 1763e4db69817d19da5f82828c55ca71cbf19074 + parent = 55d1674cca9e512c0bc9f6fc09df3cb5a1899772 method = merge cmdver = 0.4.6 From cca55f225f7277cfb44b44e4d1f50d5527afdb8b Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:13:13 +0200 Subject: [PATCH 073/104] feat(ci): Run nargo test in ci on all packages (#2197) fixes: https://github.com/AztecProtocol/aztec-packages/issues/1982 Runs nargo test on all contracts and libraries in ci --- yarn-project/noir-contracts/Dockerfile.build | 1 + .../scripts/get_all_libraries.sh | 3 + .../noir-contracts/scripts/nargo_test.sh | 78 +++++++++++++++++++ .../noir-contracts/scripts/nargo_test_ci.sh | 7 ++ 4 files changed, 89 insertions(+) create mode 100755 yarn-project/noir-contracts/scripts/get_all_libraries.sh create mode 100755 yarn-project/noir-contracts/scripts/nargo_test.sh create mode 100755 yarn-project/noir-contracts/scripts/nargo_test_ci.sh diff --git a/yarn-project/noir-contracts/Dockerfile.build b/yarn-project/noir-contracts/Dockerfile.build index b946f891009..d82539127fa 100644 --- a/yarn-project/noir-contracts/Dockerfile.build +++ b/yarn-project/noir-contracts/Dockerfile.build @@ -21,3 +21,4 @@ ENV PATH="/usr/src/yarn-project/noir-contracts/.nargo/bin:${PATH}" RUN ./scripts/install_noir.sh RUN ./scripts/install_noir_backend.sh RUN ./scripts/compile_ci.sh +RUN ./scripts/nargo_test_ci.sh diff --git a/yarn-project/noir-contracts/scripts/get_all_libraries.sh b/yarn-project/noir-contracts/scripts/get_all_libraries.sh new file mode 100755 index 00000000000..e1aa684e3fa --- /dev/null +++ b/yarn-project/noir-contracts/scripts/get_all_libraries.sh @@ -0,0 +1,3 @@ +#!/bin/bash +# Utility to get the names of all noir libaries located in ../noir-libs +echo $(ls -d ../noir-libs/*/Nargo.toml | sed -r "s/..\\/noir-libs\\/(.+)\\/Nargo.toml/\\1/") \ No newline at end of file diff --git a/yarn-project/noir-contracts/scripts/nargo_test.sh b/yarn-project/noir-contracts/scripts/nargo_test.sh new file mode 100755 index 00000000000..5c90fef4d20 --- /dev/null +++ b/yarn-project/noir-contracts/scripts/nargo_test.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Tests noir contracts, if multiple are provided, then they are testing in parallel, bubbling any testing errors +# +# Usage: +# If testing a single contract: +# ./scripts/test.sh CONTRACT +# If testing multiple contracts: +# ./scripts/test.sh CONTRACT ... +# If testing a library: +# ./scripts/test.sh LIB +# If testing multiple libraries: +# ./scripts/test.sh LIB ... + +ROOT=$(pwd) + +# Get the project type from the first argument +PROJECT_TYPE=$1 +shift + +# Error flag file +error_file="/tmp/error.$$" +# Array of child PIDs +pids=() + +# Handler for SIGCHLD, cleanup if child exit with error +handle_sigchld() { + for pid in "${pids[@]}"; do + # If process is no longer running + if ! kill -0 "$pid" 2>/dev/null; then + # Wait for the process and get exit status + wait "$pid" + status=$? + + # If exit status is error + if [ $status -ne 0 ]; then + # Create error file + touch "$error_file" + fi + fi + done +} + +# Set SIGCHLD handler +trap handle_sigchld SIGCHLD # Trap any ERR signal and call the custom error handler + +test() { + PROJECT_NAME=$1 + + if [ "$PROJECT_TYPE" == "CONTRACT" ]; then + CONTRACT_FOLDER="${PROJECT_NAME}_contract" + echo "Testing contract $PROJECT_NAME..." + cd src/contracts/$CONTRACT_FOLDER + nargo test + else + echo "Testing library $PROJECT_NAME..." + cd ../noir-libs/$PROJECT_NAME + nargo test + fi +} + +echo "Using $(nargo --version)" + +# Build contracts +for PROJECT_NAME in "$@"; do + test $PROJECT_NAME & + pids+=($!) +done + +# Wait for all background processes to finish +wait + +# If error file exists, exit with error +if [ -f "$error_file" ]; then + rm "$error_file" + echo "Error occurred in one or more child processes. Exiting..." + exit 1 +fi diff --git a/yarn-project/noir-contracts/scripts/nargo_test_ci.sh b/yarn-project/noir-contracts/scripts/nargo_test_ci.sh new file mode 100755 index 00000000000..103e92c18b8 --- /dev/null +++ b/yarn-project/noir-contracts/scripts/nargo_test_ci.sh @@ -0,0 +1,7 @@ + +#!/bin/bash + +# Runs tests scripts for all contracts, then for all libraries. + +./scripts/nargo_test.sh CONTRACT $(./scripts/get_all_contracts.sh) +./scripts/nargo_test.sh LIB $(./scripts/get_all_libraries.sh) \ No newline at end of file From 573dbc20a2b5ebae0e967e320da75febd5361eaf Mon Sep 17 00:00:00 2001 From: Santiago Palladino Date: Mon, 11 Sep 2023 11:14:12 -0300 Subject: [PATCH 074/104] docs: Dapp tutorial (#2109) Tutorial on building a dapp. I went for the simplest possible options in order to focus on aztec.js usage and avoid the need for other prior knowledge: I used javascript instead of typescript, and set up a console app instead of a web one. Does not include anything on account creation since that is not a dapp concern but a wallet's responsibility. Pending: - [x] Add links to the next section on each page of the tutorial - [x] Add a small page on testing (with a link to the longer testing guide) - [x] Run the code on the CI Fixes #2047 Fixes #2048 Fixes #2049 Fixes #2050 Fixes #2051 --- .circleci/config.yml | 13 ++ .../dapps/tutorials/contract_deployment.md | 110 +++++++++++++- .../dapps/tutorials/contract_interaction.md | 138 +++++++++++++++++- .../dapps/tutorials/creating_accounts.md | 3 - docs/docs/dev_docs/dapps/tutorials/main.md | 27 +++- .../dev_docs/dapps/tutorials/project_setup.md | 31 ++++ .../dev_docs/dapps/tutorials/rpc_server.md | 46 +++++- docs/docs/dev_docs/dapps/tutorials/testing.md | 59 ++++++++ docs/sidebars.js | 3 +- yarn-project/acir-simulator/package.json | 4 +- yarn-project/archiver/package.json | 4 +- yarn-project/aztec-node/package.json | 4 +- yarn-project/aztec-rpc/package.json | 4 +- yarn-project/aztec-sandbox/package.json | 4 +- yarn-project/aztec.js/package.json | 4 +- .../aztec.js/src/contract/contract.ts | 23 +++ yarn-project/aztec.js/src/sandbox/index.ts | 18 ++- yarn-project/aztec.js/src/utils/account.ts | 19 ++- yarn-project/circuits.js/package.json | 4 +- yarn-project/cli/package.json | 4 +- yarn-project/end-to-end/.gitignore | 1 + yarn-project/end-to-end/package.json | 4 +- .../src/guides/dapp_testing.test.ts | 17 +-- .../src/sample-dapp/ci/index.test.mjs | 13 ++ .../end-to-end/src/sample-dapp/connect.mjs | 16 ++ .../end-to-end/src/sample-dapp/contracts.mjs | 19 +++ .../end-to-end/src/sample-dapp/deploy.mjs | 38 +++++ .../end-to-end/src/sample-dapp/index.mjs | 103 +++++++++++++ .../end-to-end/src/sample-dapp/index.test.mjs | 25 ++++ yarn-project/ethereum/package.json | 4 +- yarn-project/foundation/package.json | 4 +- yarn-project/key-store/package.json | 4 +- yarn-project/merkle-tree/package.json | 4 +- yarn-project/noir-compiler/package.json | 4 +- yarn-project/noir-contracts/package.json | 4 +- .../private_token_contract/src/main.nr | 2 + .../public_token_contract/src/main.nr | 4 +- yarn-project/p2p-bootstrap/package.json | 4 +- yarn-project/p2p/package.json | 4 +- yarn-project/package.common.json | 4 +- yarn-project/prover-client/package.json | 4 +- yarn-project/rollup-provider/package.json | 4 +- yarn-project/sequencer-client/package.json | 4 +- yarn-project/types/package.json | 4 +- yarn-project/world-state/package.json | 4 +- 45 files changed, 739 insertions(+), 81 deletions(-) delete mode 100644 docs/docs/dev_docs/dapps/tutorials/creating_accounts.md create mode 100644 docs/docs/dev_docs/dapps/tutorials/project_setup.md create mode 100644 docs/docs/dev_docs/dapps/tutorials/testing.md create mode 100644 yarn-project/end-to-end/.gitignore create mode 100644 yarn-project/end-to-end/src/sample-dapp/ci/index.test.mjs create mode 100644 yarn-project/end-to-end/src/sample-dapp/connect.mjs create mode 100644 yarn-project/end-to-end/src/sample-dapp/contracts.mjs create mode 100644 yarn-project/end-to-end/src/sample-dapp/deploy.mjs create mode 100644 yarn-project/end-to-end/src/sample-dapp/index.mjs create mode 100644 yarn-project/end-to-end/src/sample-dapp/index.test.mjs diff --git a/.circleci/config.yml b/.circleci/config.yml index bd7238dad61..e4afb837e09 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1002,6 +1002,17 @@ jobs: name: "Test" command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local guides/dapp_testing.test.ts ./scripts/docker-compose-e2e-sandbox.yml working_directory: yarn-project/end-to-end + + guides-sample-dapp: + machine: + image: ubuntu-2004:202010-01 + steps: + - *checkout + - *setup_env + - run: + name: "Test" + command: ./scripts/cond_run_script end-to-end $JOB_NAME ./scripts/run_tests_local sample-dapp ./scripts/docker-compose-e2e-sandbox.yml + working_directory: yarn-project/end-to-end e2e-canary-test: machine: @@ -1443,6 +1454,7 @@ workflows: - cli-docs-sandbox: *e2e_test - guides-writing-an-account-contract: *e2e_test - guides-dapp-testing: *e2e_test + - guides-sample-dapp: *e2e_test - e2e-end: requires: @@ -1476,6 +1488,7 @@ workflows: - cli-docs-sandbox - guides-writing-an-account-contract - guides-dapp-testing + - guides-sample-dapp <<: *defaults - deploy-dockerhub: diff --git a/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md b/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md index a2cc9d4f044..9bbbbdc3669 100644 --- a/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md +++ b/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md @@ -1,3 +1,107 @@ ---- -title: Contract Deployment ---- +# Contract Deployment + +To add contracts to your application, we'll start by creating a new `nargo` project. We'll then compile the contracts, and write a simple script to deploy them to our Sandbox. + +:::info +Follow the instructions [here](../../getting_started/noir_contracts.md) to install `nargo` if you haven't done so already. +::: + +## Initialise nargo project + +Create a new `contracts` folder, and from there, initialise a new project called `private_token`: + +```sh +mkdir contracts && cd contracts +nargo new --contract private_token +``` + +Then, open the `contracts/private_token/Nargo.toml` configuration file, and add the `aztec.nr` and `value_note` libraries as dependencies: + +```toml +[dependencies] +aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/noir-aztec" } +value_note = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/value-note" } +``` + +Last, copy-paste the code from the `PrivateToken` contract into `contracts/private_token/main.nr`: + +#include_code all yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr rust + +## Compile your contract + +We'll now use the [Aztec CLI](../../cli/main.md) to [compile](../../contracts/compiling.md) our project. If you haven't installed the CLI already, you can install it locally to your project running: + +```sh +yarn add -D @aztec/cli +``` + +Now run the following from your project root: + +```sh +yarn aztec-cli compile contracts/private_token +``` + +:::info +If you are using Typescript, consider including the `--typescript` option to [generate type-safe wrappers](../../contracts/compiling.md#typescript-interfaces) for your contracts. +::: + +This should have created an artifact `contracts/private_token/target/private_token-Main.json` with the interface and bytecode for your contract. + +## Adding a second contract + +For the purposes of this tutorial, we'll set up a second contract: a public token contract. Follow the same steps as above for initialising a new Nargo project, include the dependencies, and copy-paste the following code into `contracts/public_token/main.nr`: + +#include_code all yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr rust + +Compile the contract with the CLI: + +```sh +yarn aztec-cli compile contracts/public_token +``` + +With both contracts ready, we'll now proceed to deployment. + +## Deploy your contracts + +Let's now write a script for deploying your contracts to the Sandbox. We'll create an RPC client, and then use the `ContractDeployer` class to deploy our contracts, and store the deployment address to a local JSON file. + +Create a new file `src/deploy.mjs`, importing the contract artifacts we have generated plus the dependencies we'll need, and with a call to a `main` function that we'll populate in a second: + +```js +// src/deploy.mjs +import { writeFileSync } from 'fs'; +import { createAztecRpcClient, ContractDeployer } from '@aztec/aztec.js'; +import PrivateTokenArtifact from '../contracts/private_token/target/PrivateToken.json' assert { type: 'json' }; +import PublicTokenArtifact from '../contracts/public_token/target/PublicToken.json' assert { type: 'json' }; + +async function main() { } + +main().catch(err => { + console.error(`Error in deployment script: ${err}`); + process.exit(1); +}); +``` + +Now we can deploy the contracts by adding the following code to the `src/deploy.mjs` file. Here, we are using the `ContractDeployer` class with the compiled artifact to send a new deployment transaction. The `wait` method will block execution until the transaction is successfully mined, and return a receipt with the deployed contract address. + +#include_code dapp-deploy yarn-project/end-to-end/src/sample-dapp/deploy.mjs javascript + +Note that the private token constructor expects an `owner` address to mint an initial set of tokens to. We are using the first account from the Sandbox for this. + +:::info +If you are using the generated typescript classes, you can drop the generic `ContractDeployer` in favor of using the `deploy` method of the generated class, which will automatically load the artifact for you and type-check the constructor arguments: + +```typescript +await PrivateToken.deploy(client, 100n, owner.address).send().wait(); +``` +::: + +Run the snippet above as `node src/deploy.mjs`, and you should see the following output, along with a new `addresses.json` file in your project root: + +```text +Private token deployed to 0x2950b0f290422ff86b8ee8b91af4417e1464ddfd9dda26de8af52dac9ea4f869 +Public token deployed to 0x2b54f68fd1e18f7dcfa71e3be3c91bb06ecbe727a28d609e964c225a4b5549c8 +``` +## Next steps + +Now that we have our contracts set up, it's time to actually [start writing our application that will be interacting with them](./contract_interaction.md). \ No newline at end of file diff --git a/docs/docs/dev_docs/dapps/tutorials/contract_interaction.md b/docs/docs/dev_docs/dapps/tutorials/contract_interaction.md index ba0febbcfb8..108bbd69ae0 100644 --- a/docs/docs/dev_docs/dapps/tutorials/contract_interaction.md +++ b/docs/docs/dev_docs/dapps/tutorials/contract_interaction.md @@ -1,3 +1,135 @@ ---- -title: Contract Interactions ---- +# Contract interactions + +In this section, we'll write the logic in our app that will interact with the contract we have previously deployed. We'll be using the accounts already seeded in the Sandbox. + +## Showing user balance + +Let's start by showing our user balance for the private token across their accounts. To do this, we can leverage the `getBalance` [unconstrained](../../contracts/functions.md#unconstrained-functions) view function of the private token contract: + +#include_code getBalance yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr rust + +:::info +Note that this function will only return a valid response for accounts registered in the RPC Server, since it requires access to the [user's private state](../../wallets/main.md#private-state). In other words, you cannot query the balance of another user for a private token contract. +::: + +To do this, let's first initialise a new `Contract` instance using `aztec.js` that represents our deployed token contracts. Create a new `src/contracts.mjs` file with the imports for our artifacts and other dependencies: + +```js +// src/contracts.mjs +import { Contract } from '@aztec/aztec.js'; +import { readFileSync } from 'fs'; +import PrivateTokenArtifact from '../contracts/private_token/target/PrivateToken.json' assert { type: 'json' }; +import PublicTokenArtifact from '../contracts/public_token/target/PublicToken.json' assert { type: 'json' }; +``` + +And then add the following code for initialising the `Contract` instances: + +#include_code get-tokens yarn-project/end-to-end/src/sample-dapp/contracts.mjs javascript + +:::info +You can use the typescript autogenerated interface instead of the generic `Contract` class to get type-safe methods. +::: + +We can now get the private token instance in our main code in `src/index.mjs`, and query the private balance for each of the user accounts. To query a function, without sending a transaction, use the `view` function of the method: + +#include_code showPrivateBalances yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +Run this as `node src/index.mjs` and you should now see the following output: + +``` +Balance of 0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d: 100 +Balance of 0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972: 0 +Balance of 0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b: 0 +``` + +## Transferring private tokens + +Now that we can see the balance for each user, let's transfer tokens from one account to another. To do this, we will first need access to a `Wallet` object. This wraps access to an RPC Server and also provides an interface to craft and sign transactions on behalf of one of the user accounts. + +We can initialise a wallet using one of the `getAccount` methods from `aztec.js``, along with the corresponding signing and encryption keys: + +```js +import { getSchnorrAccount } from '@aztec/aztec.js'; +const wallet = await getSchnorrAccount(client, ENCRYPTION_PRIVATE_KEY, SIGNING_PRIVATE_KEY).getWallet(); +``` + +For ease of use, `aztec.js` also ships with a helper `getSandboxAccountsWallets` method that returns a wallet for each of the pre-initialised accounts in the Sandbox, so you can send transactions as any of them. We'll use one of these wallets to initialise the `Contract` instance that represents our private token contract, so every transaction sent through it will be sent through that wallet. + +#include_code transferPrivateFunds yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +Let's go step-by-step on this snippet. We first get wallets for two of the Sandbox accounts, and name them `owner` and `recipient`. Then, we initialise the private token `Contract` instance using the `owner` wallet, meaning that any transactions sent through it will have the `owner` as sender. + +Next, we send a transfer transaction, moving 1 unit of balance to the `recipient` account address. This has no immediate effect, since the transaction first needs to be simulated locally and then submitted and mined. Only once this has finished we can query the balances again and see the effect of our transaction. We are using a `showPrivateBalances` helper function here which has the code we wrote in the section above. + +Run this new snippet and you should see the following: + +```text +Sent transfer transaction 16025a7c4f6c44611d7ac884a5c27037d85d9756a4924df6d97fb25f6e83a0c8 + +Balance of 0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d: 100 +Balance of 0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972: 0 +Balance of 0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b: 0 + +Awaiting transaction to be mined +Transaction has been mind on block 4 + +Balance of 0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d: 99 +Balance of 0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972: 1 +Balance of 0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b: 0 +``` + +:::info +At the time of this writing, there are no events emitted when new private notes are received, so the only way to detect of a change in a user's private balance is via polling on every new block processed. This will change in a future release. +::: + +## Working with public state + +While they are [fundamentally differently](../../../concepts/foundation/state_model.md), the API for working with private and public functions and state from `aztec.js` is equivalent. To query the balance in public tokens for our user accounts, we can just call the `publicBalanceOf` view function in the contract: + +#include_code showPublicBalances yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +:::info +Since this is a public token contract we are working with, we can now query the balance for any address, not just those registered in our local RPC Server. We can also send funds to addresses for which we don't know their [public encryption key](../../../concepts/foundation/accounts/keys.md#encryption-keys). +::: + +Here, since the public token contract does not mint any initial funds upon deployment, the balances for all of our user's accounts will be zero. But we can send a transaction to mint tokens to change this, using very similar code to the one for sending private funds: + +#include_code mintPublicFunds yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +And get the expected results: + +```text +Sent mint transaction 041d5b4cc68bcb5c6cb45cd4c79f893d94f0df0792f66e6fddd7718c049fe925 +Balance of 0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d: 0 +Balance of 0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972: 0 +Balance of 0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b: 0 + +Awaiting transaction to be mined +Transaction has been mined on block 5 + +Balance of 0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d: 100 +Balance of 0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972: 0 +Balance of 0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b: 0 +``` + +Public functions can emit [unencrypted public logs](../../contracts/events.md#unencrypted-events), which we can query via the RPC Server interface. In particular, the public token contract emits a generic `Coins minted` whenever the `mint` method is called: + +#include_code unencrypted_log yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr rust + +We can extend our code by querying the logs emitted on the last block when the minting transaction is mined: + +#include_code showLogs yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +Running the code again would now show an extra line with: + +```text +Log: Coins minted +``` + +:::info +At the time of this writing, there is no event-based mechanism in the `aztec.js` library to subscribe to events. The only option to consume them is to poll on every new block detected. This will change in a future version. +::: + +## Next steps + +In the next and final section, we'll [set up automated tests for our application](./testing.md). \ No newline at end of file diff --git a/docs/docs/dev_docs/dapps/tutorials/creating_accounts.md b/docs/docs/dev_docs/dapps/tutorials/creating_accounts.md deleted file mode 100644 index 95e19162829..00000000000 --- a/docs/docs/dev_docs/dapps/tutorials/creating_accounts.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Creating Accounts ---- diff --git a/docs/docs/dev_docs/dapps/tutorials/main.md b/docs/docs/dev_docs/dapps/tutorials/main.md index 957a8f9c10e..1d576759992 100644 --- a/docs/docs/dev_docs/dapps/tutorials/main.md +++ b/docs/docs/dev_docs/dapps/tutorials/main.md @@ -1,10 +1,25 @@ --- -title: Dapp Development Tutorials +title: Dapp Development Tutorial --- -Links to specific tutorials +In this tutorial we'll go through the steps for building a simple application that interacts with the Aztec Sandbox. We'll be building a console application using Javascript and NodeJS, but you may reuse the same concepts here for a web-based app. All Aztec libraries are written in Typescript and fully typed, so you can use Typescript instead of Javascript to make the most out of its type checker. -- Connecting to the RPC Server -- Creating Accounts -- Deploying a contract -- Contract Interactions +This tutorial will focus on environment setup, including creating accounts and deployments, as well as interacting with your contracts. It will not cover [how to write contracts in Noir](../../contracts/main.md). + +The full code for this tutorial is [available on the `aztec-packages` repository](https://github.com/AztecProtocol/aztec-packages/blob/master/yarn-project/end-to-end/src/sample-dapp). + +## Dependencies + +- Linux or OSX environment +- [NodeJS](https://nodejs.org/) 18 or higher +- [Aztec Sandbox](../../getting_started/sandbox.md) +- [Aztec CLI](../../getting_started/cli.md) +- [Nargo](../../getting_started/noir_contracts.md) for building contracts + +## Prerequisites + +Basic understanding of NodeJS and Javascript should be enough to follow this tutorial. Along the way, we'll provide links to dig deeper into Aztec concepts as we introduce them. + +## Get started + +Let's get started with [setting up a new javascript project](./project_setup.md). diff --git a/docs/docs/dev_docs/dapps/tutorials/project_setup.md b/docs/docs/dev_docs/dapps/tutorials/project_setup.md new file mode 100644 index 00000000000..51560dd45a5 --- /dev/null +++ b/docs/docs/dev_docs/dapps/tutorials/project_setup.md @@ -0,0 +1,31 @@ +# Setting up your project + +Let's start by setting up a regular Javascript NodeJS project. Feel free to skip this part if you're already familiar with project setup and head directly to connecting to the Sandbox. + +## Create a new project + +We'll use [`yarn`](https://yarnpkg.com/) for managing our project and dependencies, though you can also use `npm` or your Javascript package manager of choice. + +1. Ensure node version is 18 or more by running. + +```sh +node -v +``` + +2. Create a new folder and initialize a new project. + +```sh +mkdir sample-dapp +cd sample-dapp +yarn init -yp +``` + +3. Add the `aztec.js` library as a dependency: + +```sh +yarn add @aztec/aztec.js +``` + +## Next steps + +With your project already set up, let's [connect to the Sandbox RPC Server and grab an account to interact with it](./rpc_server.md). diff --git a/docs/docs/dev_docs/dapps/tutorials/rpc_server.md b/docs/docs/dev_docs/dapps/tutorials/rpc_server.md index 095f49b49ad..0412ddf5fde 100644 --- a/docs/docs/dev_docs/dapps/tutorials/rpc_server.md +++ b/docs/docs/dev_docs/dapps/tutorials/rpc_server.md @@ -1,3 +1,43 @@ ---- -title: Connecting to the RPC Server ---- +# Connecting to the RPC Server + +As an app developer, the [Aztec RPC Server interface](../api/aztec_rpc.md) provides you with access to the user's accounts and their private state, as well as a connection to the network for accessing public global state. + +During the Sandbox phase, this role is fulfilled by the [Aztec Sandbox](../../sandbox/main.md), which runs a local RPC Server and an Aztec Node, both connected to a local Ethereum development node like Anvil. The Sandbox also includes a set of pre-initialised accounts that you can use from your app. + +In this section, we'll connect to the Sandbox from our project. + +## Create RPC client + +We'll use the `createAztecRpcClient` function from `aztec.js` to connect to the Sandbox, which by default runs on `localhost:8080`. To test the connection works, we'll request and print the node's chain id. + +Let's create our first file `src/index.mjs` with the following contents: + +#include_code all yarn-project/end-to-end/src/sample-dapp/connect.mjs javascript + +Run this example as `node src/index.mjs` and you should see the following output: +``` +Connected to chain 31337 +``` + +:::info +Should the above fail due to a connection error, make sure the Sandbox is running locally and on port 8080. +::: + +## Load user accounts + +With our connection to the RPC server, let's try loading the accounts that are pre-initialised in the Sandbox: + +#include_code showAccounts yarn-project/end-to-end/src/sample-dapp/index.mjs javascript + +Run again the above, and we should see: + +``` +User accounts: +0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d +0x226f8087792beff8d5009eb94e65d2a4a505b70baf4a9f28d33c8d620b0ba972 +0x0e1f60e8566e2c6d32378bdcadb7c63696e853281be798c107266b8c3a88ea9b +``` + +## Next steps + +With a working connection to the RPC Server, let's now setup our application by [compiling and deploying our contracts](./contract_deployment.md). \ No newline at end of file diff --git a/docs/docs/dev_docs/dapps/tutorials/testing.md b/docs/docs/dev_docs/dapps/tutorials/testing.md new file mode 100644 index 00000000000..91eb3c74318 --- /dev/null +++ b/docs/docs/dev_docs/dapps/tutorials/testing.md @@ -0,0 +1,59 @@ +# Testing + +To wrap up this tutorial, we'll set up a simple automated test for our dapp contracts. We will be using [jest](https://jestjs.io/), but any nodejs test runner works fine. + +Here we'll only test the happy path for a `transfer` on our private token contract, but in a real application you should be testing both happy and unhappy paths, as well as both your contracts and application logic. Refer to the full [testing guide](../testing.md) for more info on testing and assertions. + +## Dependencies + +Start by installing our test runner, in this case jest: + +```sh +yarn add -D jest +``` + +We'll also be running our Sandbox within the test suite, to avoid polluting a global instance, so we'll need to install the Sandbox itself as a dependency as well: + +```sh +yarn add -D @aztec/aztec-sandbox +``` + +## Test setup + +Create a new file `src/index.test.mjs` with the imports we'll be using and an empty test suite to begin with: + +```ts +import { createSandbox } from '@aztec/aztec-sandbox'; +import { Contract, createAccount } from '@aztec/aztec.js'; +import PrivateTokenArtifact from '../contracts/private_token/target/PrivateToken.json' assert { type: 'json' }; + +describe('private token', () => { + +}); +``` + +Let's set up our test suite. We'll start [a new Sandbox instance within the test](../testing.md#running-sandbox-in-the-nodejs-process), create two fresh accounts to test with, and deploy an instance of our contract. The `aztec-sandbox` and `aztec.js` provide the helper functions we need to do this: + +#include_code setup yarn-project/end-to-end/src/sample-dapp/index.test.mjs javascript + +Note that, since we are starting a new Sandbox instance, we need to `stop` it in the test suite teardown. Also, even though the Sandbox runs within our tests, we still need a running Ethereum development node. Make sure you are running [Anvil](https://book.getfoundry.sh/anvil/), [Hardhat Network](https://hardhat.org/hardhat-network/docs/overview), or [Ganache](https://trufflesuite.com/ganache/) along with your tests. + +## Writing our test + +Now that we have a working test environment, we can write our first test for exercising the `transfer` function on the private token contract. We will use the same `aztec.js` methods we used when building our dapp: + +#include_code test yarn-project/end-to-end/src/sample-dapp/index.test.mjs javascript + +In this example, we assert that the `recipient`'s balance is increased by the amount transferred. We could also test that the `owner`'s funds are decremented by the same amount, or that a transaction that attempts to send more funds than those available would fail. Check out the [testing guide](../testing.md) for more ideas. + +## Running our tests + +With a local Ethereum development node running in port 8545, we can run our `jest` tests using `yarn`. The quirky syntax is due to [jest limitations in ESM support](https://jestjs.io/docs/ecmascript-modules), as well as not picking up `mjs` file by default: + +```sh +yarn node --experimental-vm-modules $(yarn bin jest) --testRegex '.*\.test\.mjs$' +``` + +## Next steps + +Now that you have finished the tutorial, you can dig deeper on the [APIs for dapp development](../api/main.md), learn more about [writing contracts with Noir](../../contracts/main.md), check out the [Sandbox's architecture](../../sandbox/main.md), or read about the [fundamental concepts behind Aztec Network](../../../concepts/foundation/main.md). \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index 518d6afe2cc..b45e933b025 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -185,10 +185,11 @@ const sidebars = { id: "dev_docs/dapps/tutorials/main", }, items: [ + "dev_docs/dapps/tutorials/project_setup", "dev_docs/dapps/tutorials/rpc_server", - "dev_docs/dapps/tutorials/creating_accounts", "dev_docs/dapps/tutorials/contract_deployment", "dev_docs/dapps/tutorials/contract_interaction", + "dev_docs/dapps/tutorials/testing", ], }, ], diff --git a/yarn-project/acir-simulator/package.json b/yarn-project/acir-simulator/package.json index 1dd64c67eed..8b0b06821c9 100644 --- a/yarn-project/acir-simulator/package.json +++ b/yarn-project/acir-simulator/package.json @@ -26,9 +26,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/archiver/package.json b/yarn-project/archiver/package.json index e3168c13f1c..4dbc4a5465e 100644 --- a/yarn-project/archiver/package.json +++ b/yarn-project/archiver/package.json @@ -30,9 +30,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/aztec-node/package.json b/yarn-project/aztec-node/package.json index c9ebdf72c20..ec5beb82863 100644 --- a/yarn-project/aztec-node/package.json +++ b/yarn-project/aztec-node/package.json @@ -27,9 +27,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/aztec-rpc/package.json b/yarn-project/aztec-rpc/package.json index 3f3eefc77de..7ac8adacfc0 100644 --- a/yarn-project/aztec-rpc/package.json +++ b/yarn-project/aztec-rpc/package.json @@ -27,9 +27,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/aztec-sandbox/package.json b/yarn-project/aztec-sandbox/package.json index f565e533ef1..041da41d296 100644 --- a/yarn-project/aztec-sandbox/package.json +++ b/yarn-project/aztec-sandbox/package.json @@ -64,9 +64,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "engines": { diff --git a/yarn-project/aztec.js/package.json b/yarn-project/aztec.js/package.json index 82c44fe8aae..0a67c34d5b3 100644 --- a/yarn-project/aztec.js/package.json +++ b/yarn-project/aztec.js/package.json @@ -33,9 +33,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/aztec.js/src/contract/contract.ts b/yarn-project/aztec.js/src/contract/contract.ts index 5f0c0aff12c..0c58f7d4e5d 100644 --- a/yarn-project/aztec.js/src/contract/contract.ts +++ b/yarn-project/aztec.js/src/contract/contract.ts @@ -1,7 +1,9 @@ import { ContractAbi } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { PublicKey } from '@aztec/types'; import { Wallet } from '../aztec_rpc_client/wallet.js'; +import { DeployMethod, Point } from '../index.js'; import { ContractBase } from './contract_base.js'; /** @@ -26,4 +28,25 @@ export class Contract extends ContractBase { } return new Contract(extendedContractData.getCompleteAddress(), abi, wallet); } + + /** + * Creates a tx to deploy a new instance of a contract. + * @param wallet - The wallet for executing the deployment. + * @param abi - ABI of the contract to deploy. + * @param args - Arguments for the constructor. + */ + public static deploy(wallet: Wallet, abi: ContractAbi, args: any[]) { + return new DeployMethod(Point.ZERO, wallet, abi, args); + } + + /** + * Creates a tx to deploy a new instance of a contract using the specified public key to derive the address. + * @param publicKey - Public key for deriving the address. + * @param wallet - The wallet for executing the deployment. + * @param abi - ABI of the contract to deploy. + * @param args - Arguments for the constructor. + */ + public static deployWithPublicKey(publicKey: PublicKey, wallet: Wallet, abi: ContractAbi, args: any[]) { + return new DeployMethod(publicKey, wallet, abi, args); + } } diff --git a/yarn-project/aztec.js/src/sandbox/index.ts b/yarn-project/aztec.js/src/sandbox/index.ts index 814218c3a12..3d023d0b485 100644 --- a/yarn-project/aztec.js/src/sandbox/index.ts +++ b/yarn-project/aztec.js/src/sandbox/index.ts @@ -5,7 +5,14 @@ import { sleep } from '@aztec/foundation/sleep'; import zip from 'lodash.zip'; import SchnorrAccountContractAbi from '../abis/schnorr_account_contract.json' assert { type: 'json' }; -import { AccountWallet, AztecRPC, EntrypointWallet, getAccountWallets, getSchnorrAccount } from '../index.js'; +import { + AccountWallet, + AztecRPC, + EntrypointWallet, + createAztecRpcClient, + getAccountWallets, + getSchnorrAccount, +} from '../index.js'; export const INITIAL_SANDBOX_ENCRYPTION_KEYS = [ GrumpkinScalar.fromString('2153536ff6628eee01cf4024889ff977a18d9fa61d0e414422f7681cf085c281'), @@ -19,6 +26,8 @@ export const INITIAL_SANDBOX_SALTS = [Fr.ZERO, Fr.ZERO, Fr.ZERO]; export const INITIAL_SANDBOX_ACCOUNT_CONTRACT_ABI = SchnorrAccountContractAbi; +export const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + /** * Gets a single wallet that manages all the Aztec accounts that are initially stored in the sandbox. * @param aztecRpc - An instance of the Aztec RPC interface. @@ -84,12 +93,13 @@ export async function deployInitialSandboxAccounts(aztecRpc: AztecRPC) { /** * Function to wait until the sandbox becomes ready for use. - * @param rpcServer - The rpc client connected to the sandbox. + * @param rpc - The rpc client connected to the sandbox. */ -export async function waitForSandbox(rpcServer: AztecRPC) { +export async function waitForSandbox(rpc?: AztecRPC) { + rpc = rpc ?? createAztecRpcClient(SANDBOX_URL); while (true) { try { - await rpcServer.getNodeInfo(); + await rpc.getNodeInfo(); break; } catch (err) { await sleep(1000); diff --git a/yarn-project/aztec.js/src/utils/account.ts b/yarn-project/aztec.js/src/utils/account.ts index baa0b5110f1..9f070ec8ede 100644 --- a/yarn-project/aztec.js/src/utils/account.ts +++ b/yarn-project/aztec.js/src/utils/account.ts @@ -5,8 +5,23 @@ import { createDebugLogger } from '@aztec/foundation/log'; import { AztecRPC, TxStatus } from '@aztec/types'; import { SingleKeyAccountEntrypoint } from '../account/entrypoint/single_key_account_entrypoint.js'; -import { EntrypointWallet, Wallet } from '../aztec_rpc_client/wallet.js'; -import { ContractDeployer, EntrypointCollection, StoredKeyAccountEntrypoint, generatePublicKey } from '../index.js'; +import { AccountWallet, EntrypointWallet, Wallet } from '../aztec_rpc_client/wallet.js'; +import { + ContractDeployer, + EntrypointCollection, + StoredKeyAccountEntrypoint, + generatePublicKey, + getSchnorrAccount, +} from '../index.js'; + +/** + * Deploys and registers a new account using random private keys and returns the associated wallet. Useful for testing. + * @param rpc - RPC client. + * @returns - A wallet for a fresh account. + */ +export function createAccount(rpc: AztecRPC): Promise { + return getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); +} /** * Creates an Aztec Account. diff --git a/yarn-project/circuits.js/package.json b/yarn-project/circuits.js/package.json index 2a3dee75f1b..b2fbac5e846 100644 --- a/yarn-project/circuits.js/package.json +++ b/yarn-project/circuits.js/package.json @@ -35,9 +35,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/cli/package.json b/yarn-project/cli/package.json index 845b9296eed..e2541e50de8 100644 --- a/yarn-project/cli/package.json +++ b/yarn-project/cli/package.json @@ -30,9 +30,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/end-to-end/.gitignore b/yarn-project/end-to-end/.gitignore new file mode 100644 index 00000000000..c59c6f13655 --- /dev/null +++ b/yarn-project/end-to-end/.gitignore @@ -0,0 +1 @@ +addresses.json \ No newline at end of file diff --git a/yarn-project/end-to-end/package.json b/yarn-project/end-to-end/package.json index ffcac42a743..1e7e6a34e01 100644 --- a/yarn-project/end-to-end/package.json +++ b/yarn-project/end-to-end/package.json @@ -18,9 +18,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(ts|mjs)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 19fdbd27cfc..f8adaec436b 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -4,11 +4,10 @@ import { AztecRPC, CheatCodes, Fr, - GrumpkinScalar, L2BlockL2Logs, + createAccount, createAztecRpcClient, getSandboxAccountsWallets, - getSchnorrAccount, waitForSandbox, } from '@aztec/aztec.js'; import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; @@ -27,8 +26,8 @@ describe('guides/dapp/testing', () => { // docs:start:in-proc-sandbox ({ rpcServer: rpc, stop } = await createSandbox()); // docs:end:in-proc-sandbox - owner = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); - recipient = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); + owner = await createAccount(rpc); + recipient = await createAccount(rpc); token = await PrivateTokenContract.deploy(owner, 100n, owner.getAddress()).send().deployed(); }, 60_000); @@ -62,8 +61,8 @@ describe('guides/dapp/testing', () => { beforeEach(async () => { rpc = createAztecRpcClient(SANDBOX_URL); - owner = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); - recipient = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); + owner = await createAccount(rpc); + recipient = await createAccount(rpc); token = await PrivateTokenContract.deploy(owner, 100n, owner.getAddress()).send().deployed(); }, 30_000); @@ -108,7 +107,7 @@ describe('guides/dapp/testing', () => { beforeAll(async () => { rpc = createAztecRpcClient(SANDBOX_URL); - owner = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); + owner = await createAccount(rpc); testContract = await TestContract.deploy(owner).send().deployed(); cheats = await CheatCodes.create(ETHEREUM_HOST, rpc); }, 30_000); @@ -135,8 +134,8 @@ describe('guides/dapp/testing', () => { beforeAll(async () => { rpc = createAztecRpcClient(SANDBOX_URL); - owner = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); - recipient = await getSchnorrAccount(rpc, GrumpkinScalar.random(), GrumpkinScalar.random()).waitDeploy(); + owner = await createAccount(rpc); + recipient = await createAccount(rpc); token = await PrivateTokenContract.deploy(owner, 100n, owner.getAddress()).send().deployed(); nativeToken = await NativeTokenContract.deploy(owner, 100n, owner.getAddress()).send().deployed(); diff --git a/yarn-project/end-to-end/src/sample-dapp/ci/index.test.mjs b/yarn-project/end-to-end/src/sample-dapp/ci/index.test.mjs new file mode 100644 index 00000000000..4c3312a6d1d --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/ci/index.test.mjs @@ -0,0 +1,13 @@ +import { waitForSandbox } from '@aztec/aztec.js'; + +import { deploy } from '../deploy.mjs'; +import { main } from '../index.mjs'; + +// Tests on our CI that all scripts included in the guide work fine +describe('sample-dapp', () => { + it('deploys and runs without errors', async () => { + await waitForSandbox(); + await deploy(); + await main(); + }, 60_000); +}); diff --git a/yarn-project/end-to-end/src/sample-dapp/connect.mjs b/yarn-project/end-to-end/src/sample-dapp/connect.mjs new file mode 100644 index 00000000000..d66fbc3ba02 --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/connect.mjs @@ -0,0 +1,16 @@ +// docs:start:all +import { createAztecRpcClient } from '@aztec/aztec.js'; + +const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + +async function main() { + const client = createAztecRpcClient(SANDBOX_URL); + const { chainId } = await client.getNodeInfo(); + console.log(`Connected to chain ${chainId}`); +} + +main().catch(err => { + console.error(`Error in app: ${err}`); + process.exit(1); +}); +// docs:end:all diff --git a/yarn-project/end-to-end/src/sample-dapp/contracts.mjs b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs new file mode 100644 index 00000000000..d72e4f4bd5f --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs @@ -0,0 +1,19 @@ +import { Contract } from '@aztec/aztec.js'; +import { + PrivateTokenContractAbi as PrivateTokenArtifact, + PublicTokenContractAbi as PublicTokenArtifact, +} from '@aztec/noir-contracts/artifacts'; + +import { readFileSync } from 'fs'; + +// docs:start:get-tokens +export async function getPrivateToken(client) { + const addresses = JSON.parse(readFileSync('addresses.json')); + return Contract.at(addresses.privateToken, PrivateTokenArtifact, client); +} + +export async function getPublicToken(client) { + const addresses = JSON.parse(readFileSync('addresses.json')); + return Contract.at(addresses.publicToken, PublicTokenArtifact, client); +} +// docs:end:get-tokens diff --git a/yarn-project/end-to-end/src/sample-dapp/deploy.mjs b/yarn-project/end-to-end/src/sample-dapp/deploy.mjs new file mode 100644 index 00000000000..bcad06487a5 --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/deploy.mjs @@ -0,0 +1,38 @@ +import { ContractDeployer, createAztecRpcClient } from '@aztec/aztec.js'; +import { + PrivateTokenContractAbi as PrivateTokenArtifact, + PublicTokenContractAbi as PublicTokenArtifact, +} from '@aztec/noir-contracts/artifacts'; + +import { writeFileSync } from 'fs'; +import { fileURLToPath } from 'url'; + +// docs:start:dapp-deploy +const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + +async function main() { + const client = createAztecRpcClient(SANDBOX_URL); + const [owner] = await client.getAccounts(); + + const privateTokenDeployer = new ContractDeployer(PrivateTokenArtifact, client); + const { contractAddress: privateTokenAddress } = await privateTokenDeployer.deploy(100n, owner.address).send().wait(); + console.log(`Private token deployed at ${privateTokenAddress.toString()}`); + + const publicTokenDeployer = new ContractDeployer(PublicTokenArtifact, client); + const { contractAddress: publicTokenAddress } = await publicTokenDeployer.deploy().send().wait(); + console.log(`Public token deployed at ${publicTokenAddress.toString()}`); + + const addresses = { privateToken: privateTokenAddress.toString(), publicToken: publicTokenAddress.toString() }; + writeFileSync('addresses.json', JSON.stringify(addresses, null, 2)); +} +// docs:end:dapp-deploy + +// Execute main only if run directly +if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) { + main().catch(err => { + console.error(`Error in deployment script: ${err}`); + process.exit(1); + }); +} + +export { main as deploy }; diff --git a/yarn-project/end-to-end/src/sample-dapp/index.mjs b/yarn-project/end-to-end/src/sample-dapp/index.mjs new file mode 100644 index 00000000000..99bb702ffb3 --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/index.mjs @@ -0,0 +1,103 @@ +import { L2BlockL2Logs, createAztecRpcClient, getSandboxAccountsWallets } from '@aztec/aztec.js'; +import { fileURLToPath } from '@aztec/foundation/url'; + +import { getPrivateToken, getPublicToken } from './contracts.mjs'; + +const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + +async function showAccounts(client) { + // docs:start:showAccounts + const accounts = await client.getAccounts(); + console.log(`User accounts:\n${accounts.map(a => a.address).join('\n')}`); + // docs:end:showAccounts +} + +async function showPrivateBalances(client) { + // docs:start:showPrivateBalances + const accounts = await client.getAccounts(); + const privateToken = await getPrivateToken(client); + + for (const account of accounts) { + // highlight-next-line:showPrivateBalances + const balance = await privateToken.methods.getBalance(account.address).view(); + console.log(`Balance of ${account.address}: ${balance}`); + } + // docs:end:showPrivateBalances +} + +async function transferPrivateFunds(client) { + // docs:start:transferPrivateFunds + const [owner, recipient] = await getSandboxAccountsWallets(client); + const privateToken = await getPrivateToken(owner); + + const tx = privateToken.methods.transfer(1n, recipient.getAddress()).send(); + console.log(`Sent transfer transaction ${await tx.getTxHash()}`); + await showPrivateBalances(client); + + console.log(`Awaiting transaction to be mined`); + const receipt = await tx.wait(); + console.log(`Transaction has been mined on block ${receipt.blockNumber}`); + await showPrivateBalances(client); + // docs:end:transferPrivateFunds +} + +async function showPublicBalances(client) { + // docs:start:showPublicBalances + const accounts = await client.getAccounts(); + const publicToken = await getPublicToken(client); + + for (const account of accounts) { + // highlight-next-line:showPublicBalances + const balance = await publicToken.methods.publicBalanceOf(account.address).view(); + console.log(`Balance of ${account.address}: ${balance}`); + } + // docs:end:showPublicBalances +} + +async function mintPublicFunds(client) { + // docs:start:mintPublicFunds + const [owner] = await getSandboxAccountsWallets(client); + const publicToken = await getPublicToken(owner); + + const tx = publicToken.methods.mint(100n, owner.getAddress()).send(); + console.log(`Sent mint transaction ${await tx.getTxHash()}`); + await showPublicBalances(client); + + console.log(`Awaiting transaction to be mined`); + const receipt = await tx.wait(); + console.log(`Transaction has been mined on block ${receipt.blockNumber}`); + await showPublicBalances(client); + // docs:end:mintPublicFunds + + // docs:start:showLogs + const blockNumber = await client.getBlockNumber(); + const logs = await client.getUnencryptedLogs(blockNumber, 1); + const textLogs = L2BlockL2Logs.unrollLogs(logs).map(log => log.toString('ascii')); + for (const log of textLogs) console.log(`Log emitted: ${log}`); + // docs:end:showLogs +} + +async function main() { + const client = createAztecRpcClient(SANDBOX_URL); + const { chainId } = await client.getNodeInfo(); + console.log(`Connected to chain ${chainId}`); + + await showAccounts(client); + + await transferPrivateFunds(client); + + await mintPublicFunds(client); +} + +// Execute main only if run directly +if (process.argv[1].replace(/\/index\.m?js$/, '') === fileURLToPath(import.meta.url).replace(/\/index\.m?js$/, '')) { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + main() + .then(() => process.exit(0)) + .catch(err => { + console.error(`Error in app: ${err}`); + process.exit(1); + }); +} + +export { main }; diff --git a/yarn-project/end-to-end/src/sample-dapp/index.test.mjs b/yarn-project/end-to-end/src/sample-dapp/index.test.mjs new file mode 100644 index 00000000000..db96a196bf8 --- /dev/null +++ b/yarn-project/end-to-end/src/sample-dapp/index.test.mjs @@ -0,0 +1,25 @@ +import { createSandbox } from '@aztec/aztec-sandbox'; +import { Contract, createAccount } from '@aztec/aztec.js'; +import { PrivateTokenContractAbi as PrivateTokenArtifact } from '@aztec/noir-contracts/artifacts'; + +describe('private token', () => { + // docs:start:setup + let rpc, stop, owner, recipient, token; + beforeAll(async () => { + ({ rpcServer: rpc, stop } = await createSandbox()); + owner = await createAccount(rpc); + recipient = await createAccount(rpc); + token = await Contract.deploy(owner, PrivateTokenArtifact, [100n, owner.getAddress()]).send().deployed(); + }, 30_000); + + afterAll(() => stop()); + // docs:end:setup + + // docs:start:test + it('increases recipient funds on transfer', async () => { + expect(await token.methods.getBalance(recipient.getAddress()).view()).toEqual(0n); + await token.methods.transfer(20n, recipient.getAddress()).send().wait(); + expect(await token.methods.getBalance(recipient.getAddress()).view()).toEqual(20n); + }); + // docs:end:test +}); diff --git a/yarn-project/ethereum/package.json b/yarn-project/ethereum/package.json index 3cf2bd85841..82a2402ad32 100644 --- a/yarn-project/ethereum/package.json +++ b/yarn-project/ethereum/package.json @@ -51,9 +51,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "engines": { diff --git a/yarn-project/foundation/package.json b/yarn-project/foundation/package.json index d1fdfc2f79f..7441da40186 100644 --- a/yarn-project/foundation/package.json +++ b/yarn-project/foundation/package.json @@ -50,9 +50,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/key-store/package.json b/yarn-project/key-store/package.json index f5f191e81fd..e9b76370219 100644 --- a/yarn-project/key-store/package.json +++ b/yarn-project/key-store/package.json @@ -26,9 +26,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/merkle-tree/package.json b/yarn-project/merkle-tree/package.json index 2cfa7a4a4bb..163d6fc8dba 100644 --- a/yarn-project/merkle-tree/package.json +++ b/yarn-project/merkle-tree/package.json @@ -27,9 +27,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src", "testTimeout": 15000 }, diff --git a/yarn-project/noir-compiler/package.json b/yarn-project/noir-compiler/package.json index c5d9365430f..067b9a5c6d9 100644 --- a/yarn-project/noir-compiler/package.json +++ b/yarn-project/noir-compiler/package.json @@ -32,9 +32,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/noir-contracts/package.json b/yarn-project/noir-contracts/package.json index fb562f7e291..35b3dc64ebf 100644 --- a/yarn-project/noir-contracts/package.json +++ b/yarn-project/noir-contracts/package.json @@ -27,9 +27,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr index 8395bbd1ea0..e03c3fa613c 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr @@ -1,3 +1,4 @@ +// docs:start:all contract PrivateToken { use dep::std::option::Option; use dep::value_note::{ @@ -109,3 +110,4 @@ contract PrivateToken { } // docs:end:compute_note_hash_and_nullifier } +// docs:end:all \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr index f32f3ec07bf..2dafe1baff9 100644 --- a/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/public_token_contract/src/main.nr @@ -1,3 +1,4 @@ +// docs:start:all contract PublicToken { use dep::std::option::Option; @@ -48,8 +49,8 @@ contract PublicToken { let storage = Storage::init(Context::public(&mut context)); let recipient_balance = storage.balances.at(recipient); let new_amount = recipient_balance.read() + amount; - // docs:start:unencrypted_log // TODO: Remove return value. + // docs:start:unencrypted_log let _hash = emit_unencrypted_log("Coins minted"); // docs:end:unencrypted_log recipient_balance.write(new_amount); @@ -96,3 +97,4 @@ contract PublicToken { storage.balances.at(owner).read() } } +// docs:end:all \ No newline at end of file diff --git a/yarn-project/p2p-bootstrap/package.json b/yarn-project/p2p-bootstrap/package.json index 41a42011321..89fc049dba2 100644 --- a/yarn-project/p2p-bootstrap/package.json +++ b/yarn-project/p2p-bootstrap/package.json @@ -50,9 +50,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "engines": { diff --git a/yarn-project/p2p/package.json b/yarn-project/p2p/package.json index 98b7276d297..f3213003702 100644 --- a/yarn-project/p2p/package.json +++ b/yarn-project/p2p/package.json @@ -28,9 +28,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/package.common.json b/yarn-project/package.common.json index feaf0fd5764..d6231d92f89 100644 --- a/yarn-project/package.common.json +++ b/yarn-project/package.common.json @@ -25,9 +25,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" } } diff --git a/yarn-project/prover-client/package.json b/yarn-project/prover-client/package.json index 19f2aec28b8..fb946ce8d2b 100644 --- a/yarn-project/prover-client/package.json +++ b/yarn-project/prover-client/package.json @@ -26,9 +26,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/rollup-provider/package.json b/yarn-project/rollup-provider/package.json index 604418c7338..84d68c96dc8 100644 --- a/yarn-project/rollup-provider/package.json +++ b/yarn-project/rollup-provider/package.json @@ -28,9 +28,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/sequencer-client/package.json b/yarn-project/sequencer-client/package.json index f01cad17e1b..ab89bd8f455 100644 --- a/yarn-project/sequencer-client/package.json +++ b/yarn-project/sequencer-client/package.json @@ -28,9 +28,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/types/package.json b/yarn-project/types/package.json index dd636f1278d..6aaac90d5e8 100644 --- a/yarn-project/types/package.json +++ b/yarn-project/types/package.json @@ -26,9 +26,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { diff --git a/yarn-project/world-state/package.json b/yarn-project/world-state/package.json index 46c1b9df210..36ae514d0ea 100644 --- a/yarn-project/world-state/package.json +++ b/yarn-project/world-state/package.json @@ -26,9 +26,9 @@ "jest": { "preset": "ts-jest/presets/default-esm", "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.js$": "$1" + "^(\\.{1,2}/.*)\\.m?js$": "$1" }, - "testRegex": "./src/.*\\.test\\.ts$", + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", "rootDir": "./src" }, "dependencies": { From 6fee803c3ebe511f7c4f37da32052f62ba85846e Mon Sep 17 00:00:00 2001 From: AztecBot Date: Mon, 11 Sep 2023 14:14:44 +0000 Subject: [PATCH 075/104] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "bef2a920b" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "bef2a920b" git-subrepo: version: "0.4.6" origin: "???" commit: "???" --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index 586639dbe05..d4f7496a1af 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = 76da28406fa55dc0f34dbed9014d68391e6ef18e - parent = 73328dbe4e509235329e32ff88f823d849a2b673 + commit = bef2a920b20e552e5039bdae7ed93eb28822cfda + parent = 573dbc20a2b5ebae0e967e320da75febd5361eaf method = merge cmdver = 0.4.6 From e1e14d2c7fb44d56b9a10a645676d3551830bb10 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:28:44 +0200 Subject: [PATCH 076/104] chore(aztec-noir)!: rename noir-aztec to aztec-noir (#2071) Addresses a little nit of mine. In all branding and docs we are referring to the aztec noir library as `Aztec.nr`. It was previously named `noir-aztec` which is inconsistent This pr: - renames the folder from `noir-aztec` to `aztec-noir` - Updates the path anywhere it was mentioned --------- Co-authored-by: Cheethas <47148561+cheethas@users.noreply.github.com> --- .../relations_bench/barycentric.bench.cpp | 6 ++---- .../honk/composer/standard_composer.test.cpp | 4 ++-- .../honk/composer/ultra_composer.test.cpp | 4 ++-- .../src/barretenberg/honk/flavor/goblin_ultra.hpp | 8 ++++---- .../cpp/src/barretenberg/honk/flavor/standard.hpp | 4 ++-- .../honk/flavor/standard_grumpkin.hpp | 8 ++++---- .../cpp/src/barretenberg/honk/flavor/ultra.hpp | 10 +++++----- .../barretenberg/honk/flavor/ultra_grumpkin.hpp | 10 +++++----- .../barretenberg/honk/flavor/ultra_recursive.hpp | 10 +++++----- .../honk/proof_system/grand_product_library.hpp | 2 +- .../honk/proof_system/prover_library.test.cpp | 2 +- .../honk/proof_system/ultra_prover.hpp | 2 +- .../honk/sumcheck/relation_correctness.test.cpp | 3 +-- .../src/barretenberg/honk/sumcheck/sumcheck.hpp | 15 +++++++++------ .../barretenberg/honk/sumcheck/sumcheck.test.cpp | 2 +- .../barretenberg/honk/sumcheck/sumcheck_round.hpp | 15 ++++++++------- .../honk/sumcheck/sumcheck_round.test.cpp | 4 ++-- .../honk/transcript/transcript.test.cpp | 2 +- .../barretenberg/polynomials/barycentric.test.cpp | 2 +- .../cpp/src/barretenberg/polynomials/pow.test.cpp | 6 +++--- .../barretenberg/proof_system/flavor/flavor.hpp | 2 +- .../proof_system/relations/auxiliary_relation.hpp | 2 +- .../relations/permutation_relation.hpp | 2 +- docs/docs/dev_docs/contracts/state_variables.md | 8 ++++---- .../dev_docs/getting_started/noir_contracts.md | 2 +- .../wallets/writing_an_account_contract.md | 4 ++-- .../acir-simulator/src/public/executor.ts | 6 ++---- .../src/account/entrypoint/entrypoint_payload.ts | 2 +- yarn-project/aztec.js/src/utils/cheat_codes.ts | 2 +- .../circuits.js/src/cbind/constants.in.ts | 2 +- yarn-project/noir-contracts/README.md | 2 +- .../src/contracts/card_game_contract/Nargo.toml | 2 +- .../src/contracts/child_contract/Nargo.toml | 2 +- .../contracts/docs_example_contract/Nargo.toml | 2 +- .../easy_private_token_contract/Nargo.toml | 2 +- .../contracts/ecdsa_account_contract/Nargo.toml | 2 +- .../src/contracts/escrow_contract/Nargo.toml | 2 +- .../src/contracts/import_test_contract/Nargo.toml | 2 +- .../src/contracts/lending_contract/Nargo.toml | 2 +- .../contracts/multi_transfer_contract/Nargo.toml | 2 +- .../contracts/native_token_contract/Nargo.toml | 2 +- .../non_native_token_contract/Nargo.toml | 2 +- .../src/contracts/parent_contract/Nargo.toml | 2 +- .../pending_commitments_contract/Nargo.toml | 2 +- .../contracts/pokeable_token_contract/Nargo.toml | 2 +- .../src/contracts/price_feed_contract/Nargo.toml | 2 +- .../private_token_airdrop_contract/Nargo.toml | 2 +- .../contracts/private_token_contract/Nargo.toml | 2 +- .../contracts/public_token_contract/Nargo.toml | 2 +- .../contracts/schnorr_account_contract/Nargo.toml | 2 +- .../Nargo.toml | 2 +- .../schnorr_hardcoded_account_contract/Nargo.toml | 2 +- .../Nargo.toml | 2 +- .../src/contracts/test_contract/Nargo.toml | 2 +- .../src/contracts/uniswap_contract/Nargo.toml | 2 +- .../{noir-aztec => aztec-noir}/Nargo.toml | 0 .../{noir-aztec => aztec-noir}/src/abi.nr | 0 .../{noir-aztec => aztec-noir}/src/auth.nr | 0 .../src/constants_gen.nr | 0 .../{noir-aztec => aztec-noir}/src/context.nr | 0 .../{noir-aztec => aztec-noir}/src/entrypoint.nr | 0 .../{noir-aztec => aztec-noir}/src/lib.nr | 0 .../{noir-aztec => aztec-noir}/src/log.nr | 0 .../{noir-aztec => aztec-noir}/src/messaging.nr | 0 .../src/messaging/get_commitment_getter_data.nr | 0 .../src/messaging/l1_to_l2_message.nr | 0 .../src/messaging/l1_to_l2_message_getter_data.nr | 0 .../{noir-aztec => aztec-noir}/src/note.nr | 0 .../src/note/lifecycle.nr | 0 .../src/note/note_getter.nr | 0 .../src/note/note_getter_options.nr | 0 .../src/note/note_hash.nr | 0 .../src/note/note_header.nr | 0 .../src/note/note_interface.nr | 0 .../src/note/note_viewer_options.nr | 0 .../{noir-aztec => aztec-noir}/src/note/utils.nr | 0 .../{noir-aztec => aztec-noir}/src/oracle.nr | 4 ++++ .../src/oracle/arguments.nr | 0 .../src/oracle/call_private_function.nr | 0 .../src/oracle/compute_selector.nr | 0 .../src/oracle/context.nr | 0 .../src/oracle/create_commitment.nr | 0 .../src/oracle/debug_log.nr | 0 .../src/oracle/enqueue_public_function_call.nr | 0 .../src/oracle/get_commitment.nr | 0 .../src/oracle/get_l1_to_l2_message.nr | 0 .../src/oracle/get_public_key.nr | 0 .../src/oracle/get_secret_key.nr | 0 .../{noir-aztec => aztec-noir}/src/oracle/logs.nr | 0 .../src/oracle/notes.nr | 0 .../src/oracle/public_call.nr | 0 .../{noir-aztec => aztec-noir}/src/oracle/rand.nr | 0 .../src/oracle/storage.nr | 0 .../src/private_call_stack_item.nr | 0 .../src/public_call_stack_item.nr | 0 .../{noir-aztec => aztec-noir}/src/state_vars.nr | 0 .../src/state_vars/immutable_singleton.nr | 0 .../src/state_vars/map.nr | 0 .../src/state_vars/public_state.nr | 0 .../src/state_vars/set.nr | 0 .../src/state_vars/singleton.nr | 0 .../{noir-aztec => aztec-noir}/src/types.nr | 0 .../src/types/grumpkin_scalar.nr | 0 .../{noir-aztec => aztec-noir}/src/types/point.nr | 0 .../src/types/type_serialisation.nr | 0 .../type_serialisation/bool_serialisation.nr | 0 .../type_serialisation/field_serialisation.nr | 0 .../types/type_serialisation/u32_serialisation.nr | 0 .../{noir-aztec => aztec-noir}/src/types/vec.nr | 0 .../{noir-aztec => aztec-noir}/src/utils.nr | 0 .../noir-libs/easy-private-state/Nargo.toml | 2 +- yarn-project/noir-libs/value-note/Nargo.toml | 2 +- 112 files changed, 106 insertions(+), 103 deletions(-) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/Nargo.toml (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/abi.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/auth.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/constants_gen.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/context.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/entrypoint.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/lib.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/log.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/messaging.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/messaging/get_commitment_getter_data.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/messaging/l1_to_l2_message.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/messaging/l1_to_l2_message_getter_data.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/lifecycle.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_getter.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_getter_options.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_hash.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_header.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_interface.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/note_viewer_options.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/note/utils.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle.nr (78%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/arguments.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/call_private_function.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/compute_selector.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/context.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/create_commitment.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/debug_log.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/enqueue_public_function_call.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/get_commitment.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/get_l1_to_l2_message.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/get_public_key.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/get_secret_key.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/logs.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/notes.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/public_call.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/rand.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/oracle/storage.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/private_call_stack_item.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/public_call_stack_item.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars/immutable_singleton.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars/map.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars/public_state.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars/set.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/state_vars/singleton.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/grumpkin_scalar.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/point.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/type_serialisation.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/type_serialisation/bool_serialisation.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/type_serialisation/field_serialisation.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/type_serialisation/u32_serialisation.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/types/vec.nr (100%) rename yarn-project/noir-libs/{noir-aztec => aztec-noir}/src/utils.nr (100%) diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/benchmark/relations_bench/barycentric.bench.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/benchmark/relations_bench/barycentric.bench.cpp index f6d4580fadf..69425fcd971 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/benchmark/relations_bench/barycentric.bench.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/benchmark/relations_bench/barycentric.bench.cpp @@ -9,9 +9,8 @@ auto& engine = numeric::random::get_debug_engine(); } using FF = barretenberg::fr; -using barretenberg::Univariate; using barretenberg::BarycentricData; - +using barretenberg::Univariate; namespace proof_system::benchmark { @@ -19,8 +18,7 @@ void extend_2_to_6(State& state) noexcept { auto univariate = Univariate::get_random(); BarycentricData barycentric_2_to_6; - for (auto _ : state) - { + for (auto _ : state) { DoNotOptimize(barycentric_2_to_6.extend(univariate)); } } diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/standard_composer.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/standard_composer.test.cpp index 56568cbbf11..bccb233a4f9 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/standard_composer.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/standard_composer.test.cpp @@ -5,13 +5,13 @@ #include "barretenberg/honk/composer/standard_composer.hpp" #include "barretenberg/honk/proof_system/prover.hpp" -#include "barretenberg/proof_system/relations/permutation_relation.hpp" -#include "barretenberg/proof_system/relations/relation_parameters.hpp" #include "barretenberg/honk/sumcheck/sumcheck_round.hpp" #include "barretenberg/honk/utils/grand_product_delta.hpp" #include "barretenberg/numeric/uint256/uint256.hpp" #include "barretenberg/polynomials/polynomial.hpp" #include "barretenberg/proof_system/circuit_builder/standard_circuit_builder.hpp" +#include "barretenberg/proof_system/relations/permutation_relation.hpp" +#include "barretenberg/proof_system/relations/relation_parameters.hpp" using namespace proof_system::honk; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.test.cpp index 777242c05f2..ec3196186ef 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/composer/ultra_composer.test.cpp @@ -8,13 +8,13 @@ #include "barretenberg/honk/composer/ultra_composer.hpp" #include "barretenberg/honk/proof_system/prover.hpp" #include "barretenberg/honk/proof_system/ultra_prover.hpp" -#include "barretenberg/proof_system/relations/permutation_relation.hpp" -#include "barretenberg/proof_system/relations/relation_parameters.hpp" #include "barretenberg/honk/sumcheck/sumcheck_round.hpp" #include "barretenberg/honk/utils/grand_product_delta.hpp" #include "barretenberg/numeric/uint256/uint256.hpp" #include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" #include "barretenberg/proof_system/plookup_tables/types.hpp" +#include "barretenberg/proof_system/relations/permutation_relation.hpp" +#include "barretenberg/proof_system/relations/relation_parameters.hpp" using namespace proof_system::honk; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/goblin_ultra.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/goblin_ultra.hpp index 894fe54304d..37049f21866 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/goblin_ultra.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/goblin_ultra.hpp @@ -1,5 +1,9 @@ #pragma once #include "barretenberg/honk/pcs/kzg/kzg.hpp" +#include "barretenberg/honk/transcript/transcript.hpp" +#include "barretenberg/polynomials/univariate.hpp" +#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" +#include "barretenberg/proof_system/flavor/flavor.hpp" #include "barretenberg/proof_system/relations/auxiliary_relation.hpp" #include "barretenberg/proof_system/relations/ecc_op_queue_relation.hpp" #include "barretenberg/proof_system/relations/elliptic_relation.hpp" @@ -7,10 +11,6 @@ #include "barretenberg/proof_system/relations/lookup_relation.hpp" #include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/proof_system/relations/ultra_arithmetic_relation.hpp" -#include "barretenberg/honk/transcript/transcript.hpp" -#include "barretenberg/polynomials/univariate.hpp" -#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" -#include "barretenberg/proof_system/flavor/flavor.hpp" namespace proof_system::honk::flavor { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp index c0a4a53776e..55006bdfaa9 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard.hpp @@ -1,8 +1,6 @@ #pragma once #include "barretenberg/ecc/curves/bn254/g1.hpp" #include "barretenberg/honk/pcs/kzg/kzg.hpp" -#include "barretenberg/proof_system/relations/arithmetic_relation.hpp" -#include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/honk/transcript/transcript.hpp" #include "barretenberg/polynomials/barycentric.hpp" #include "barretenberg/polynomials/evaluation_domain.hpp" @@ -10,6 +8,8 @@ #include "barretenberg/polynomials/univariate.hpp" #include "barretenberg/proof_system/circuit_builder/standard_circuit_builder.hpp" #include "barretenberg/proof_system/flavor/flavor.hpp" +#include "barretenberg/proof_system/relations/arithmetic_relation.hpp" +#include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/srs/factories/crs_factory.hpp" namespace proof_system::honk::flavor { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp index 957c52aceb4..dbb013241b0 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/standard_grumpkin.hpp @@ -4,13 +4,13 @@ #include "barretenberg/polynomials/barycentric.hpp" #include "barretenberg/polynomials/univariate.hpp" -#include "barretenberg/proof_system/relations/arithmetic_relation.hpp" -#include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/honk/transcript/transcript.hpp" #include "barretenberg/polynomials/evaluation_domain.hpp" #include "barretenberg/polynomials/polynomial.hpp" #include "barretenberg/proof_system/circuit_builder/standard_circuit_builder.hpp" #include "barretenberg/proof_system/flavor/flavor.hpp" +#include "barretenberg/proof_system/relations/arithmetic_relation.hpp" +#include "barretenberg/proof_system/relations/permutation_relation.hpp" #include #include #include @@ -226,8 +226,8 @@ class StandardGrumpkin { * @todo TODO(#390): Simplify this by moving MAX_RELATION_LENGTH? */ template - using ExtendedEdges = - AllEntities, barretenberg::Univariate>; + using ExtendedEdges = AllEntities, + barretenberg::Univariate>; /** * @brief A container for the polynomials evaluations produced during sumcheck, which are purported to be the diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp index 1323ed98874..df21ba0ce55 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra.hpp @@ -4,17 +4,17 @@ #include "barretenberg/polynomials/barycentric.hpp" #include "barretenberg/polynomials/univariate.hpp" +#include "barretenberg/honk/transcript/transcript.hpp" +#include "barretenberg/polynomials/evaluation_domain.hpp" +#include "barretenberg/polynomials/polynomial.hpp" +#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" +#include "barretenberg/proof_system/flavor/flavor.hpp" #include "barretenberg/proof_system/relations/auxiliary_relation.hpp" #include "barretenberg/proof_system/relations/elliptic_relation.hpp" #include "barretenberg/proof_system/relations/gen_perm_sort_relation.hpp" #include "barretenberg/proof_system/relations/lookup_relation.hpp" #include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/proof_system/relations/ultra_arithmetic_relation.hpp" -#include "barretenberg/honk/transcript/transcript.hpp" -#include "barretenberg/polynomials/evaluation_domain.hpp" -#include "barretenberg/polynomials/polynomial.hpp" -#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" -#include "barretenberg/proof_system/flavor/flavor.hpp" namespace proof_system::honk::flavor { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp index 260b2f44b76..609421f74c6 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_grumpkin.hpp @@ -5,17 +5,17 @@ #include "barretenberg/polynomials/barycentric.hpp" #include "barretenberg/polynomials/univariate.hpp" +#include "barretenberg/honk/transcript/transcript.hpp" +#include "barretenberg/polynomials/evaluation_domain.hpp" +#include "barretenberg/polynomials/polynomial.hpp" +#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" +#include "barretenberg/proof_system/flavor/flavor.hpp" #include "barretenberg/proof_system/relations/auxiliary_relation.hpp" #include "barretenberg/proof_system/relations/elliptic_relation.hpp" #include "barretenberg/proof_system/relations/gen_perm_sort_relation.hpp" #include "barretenberg/proof_system/relations/lookup_relation.hpp" #include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/proof_system/relations/ultra_arithmetic_relation.hpp" -#include "barretenberg/honk/transcript/transcript.hpp" -#include "barretenberg/polynomials/evaluation_domain.hpp" -#include "barretenberg/polynomials/polynomial.hpp" -#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" -#include "barretenberg/proof_system/flavor/flavor.hpp" #include #include #include diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_recursive.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_recursive.hpp index e050d7b6597..9d98f4a1c25 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_recursive.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/flavor/ultra_recursive.hpp @@ -5,17 +5,17 @@ #include "barretenberg/polynomials/barycentric.hpp" #include "barretenberg/polynomials/univariate.hpp" +#include "barretenberg/honk/transcript/transcript.hpp" +#include "barretenberg/polynomials/evaluation_domain.hpp" +#include "barretenberg/polynomials/polynomial.hpp" +#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" +#include "barretenberg/proof_system/flavor/flavor.hpp" #include "barretenberg/proof_system/relations/auxiliary_relation.hpp" #include "barretenberg/proof_system/relations/elliptic_relation.hpp" #include "barretenberg/proof_system/relations/gen_perm_sort_relation.hpp" #include "barretenberg/proof_system/relations/lookup_relation.hpp" #include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/proof_system/relations/ultra_arithmetic_relation.hpp" -#include "barretenberg/honk/transcript/transcript.hpp" -#include "barretenberg/polynomials/evaluation_domain.hpp" -#include "barretenberg/polynomials/polynomial.hpp" -#include "barretenberg/proof_system/circuit_builder/ultra_circuit_builder.hpp" -#include "barretenberg/proof_system/flavor/flavor.hpp" #include "barretenberg/srs/factories/crs_factory.hpp" #include #include diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/grand_product_library.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/grand_product_library.hpp index 53405a3aede..acb530965c6 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/grand_product_library.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/grand_product_library.hpp @@ -1,8 +1,8 @@ #pragma once +#include "barretenberg/common/constexpr_utils.hpp" #include "barretenberg/honk/sumcheck/sumcheck.hpp" #include "barretenberg/plonk/proof_system/proving_key/proving_key.hpp" #include "barretenberg/polynomials/polynomial.hpp" -#include "barretenberg/common/constexpr_utils.hpp" #include namespace proof_system::honk::grand_product_library { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/prover_library.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/prover_library.test.cpp index af679985ff3..c43a5e69926 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/prover_library.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/prover_library.test.cpp @@ -1,11 +1,11 @@ -#include "prover_library.hpp" #include "barretenberg/ecc/curves/bn254/bn254.hpp" #include "barretenberg/honk/flavor/standard.hpp" #include "barretenberg/honk/flavor/ultra.hpp" #include "barretenberg/honk/proof_system/grand_product_library.hpp" #include "barretenberg/polynomials/polynomial.hpp" #include "prover.hpp" +#include "prover_library.hpp" #include "barretenberg/srs/factories/file_crs_factory.hpp" #include diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp index 5f4a5460a3f..9aeea1327fc 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/proof_system/ultra_prover.hpp @@ -5,10 +5,10 @@ #include "barretenberg/honk/pcs/gemini/gemini.hpp" #include "barretenberg/honk/pcs/shplonk/shplonk.hpp" #include "barretenberg/honk/proof_system/work_queue.hpp" -#include "barretenberg/proof_system/relations/relation_parameters.hpp" #include "barretenberg/honk/sumcheck/sumcheck_output.hpp" #include "barretenberg/honk/transcript/transcript.hpp" #include "barretenberg/plonk/proof_system/types/proof.hpp" +#include "barretenberg/proof_system/relations/relation_parameters.hpp" namespace proof_system::honk { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/relation_correctness.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/relation_correctness.test.cpp index 884bc3e31c4..ea98cc35c46 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/relation_correctness.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/relation_correctness.test.cpp @@ -271,8 +271,7 @@ TEST_F(RelationCorrectnessTests, StandardRelationCorrectness) grand_product_library::compute_grand_products(prover.key, prover_polynomials, params); // Construct the round for applying sumcheck relations and results for storing computed results - auto relations = - std::tuple(proof_system::ArithmeticRelation(), proof_system::PermutationRelation()); + auto relations = std::tuple(proof_system::ArithmeticRelation(), proof_system::PermutationRelation()); // Check that each relation is satisfied across each row of the prover polynomials check_relation(std::get<0>(relations), circuit_size, prover_polynomials, params); diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.hpp index e3f0ae21409..e3702752e40 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.hpp @@ -2,11 +2,11 @@ #include "barretenberg/common/serialize.hpp" #include "barretenberg/common/throw_or_abort.hpp" #include "barretenberg/honk/proof_system/prover.hpp" -#include "barretenberg/proof_system/relations/relation_parameters.hpp" #include "barretenberg/honk/sumcheck/sumcheck_output.hpp" #include "barretenberg/honk/transcript/transcript.hpp" #include "barretenberg/honk/utils/grand_product_delta.hpp" #include "barretenberg/polynomials/univariate.hpp" +#include "barretenberg/proof_system/relations/relation_parameters.hpp" #include "sumcheck_round.hpp" namespace proof_system::honk::sumcheck { @@ -70,8 +70,9 @@ template class SumcheckProver { * * @details */ - SumcheckOutput prove(auto full_polynomials, - const proof_system::RelationParameters& relation_parameters) // pass by value, not by reference + SumcheckOutput prove( + auto full_polynomials, + const proof_system::RelationParameters& relation_parameters) // pass by value, not by reference { auto [alpha, zeta] = transcript.get_challenges("Sumcheck:alpha", "Sumcheck:zeta"); @@ -172,7 +173,8 @@ template class SumcheckVerifier { * @param relation_parameters * @param transcript */ - std::optional> verify(const proof_system::RelationParameters& relation_parameters, auto& transcript) + std::optional> verify(const proof_system::RelationParameters& relation_parameters, + auto& transcript) { bool verified(true); @@ -192,8 +194,9 @@ template class SumcheckVerifier { for (size_t round_idx = 0; round_idx < multivariate_d; round_idx++) { // Obtain the round univariate from the transcript std::string round_univariate_label = "Sumcheck:univariate_" + std::to_string(round_idx); - auto round_univariate = transcript.template receive_from_prover< - barretenberg::Univariate>(round_univariate_label); + auto round_univariate = + transcript.template receive_from_prover>( + round_univariate_label); bool checked = round.check_sum(round_univariate); verified = verified && checked; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.test.cpp index fba343da147..1d1b77e2115 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck.test.cpp @@ -1,4 +1,3 @@ -#include "sumcheck.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" #include "barretenberg/honk/composer/standard_composer.hpp" #include "barretenberg/honk/composer/ultra_composer.hpp" @@ -11,6 +10,7 @@ #include "barretenberg/proof_system/relations/lookup_relation.hpp" #include "barretenberg/proof_system/relations/permutation_relation.hpp" #include "barretenberg/proof_system/relations/ultra_arithmetic_relation.hpp" +#include "sumcheck.hpp" #include using namespace proof_system::honk; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.hpp index 1b72039573a..42dad089601 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.hpp @@ -121,10 +121,11 @@ template class SumcheckProverRound { * values. Most likely this will end up being S_l(0), ... , S_l(t-1) where t is around 12. At the end, reset all * univariate accumulators to be zero. */ - barretenberg::Univariate compute_univariate(auto& polynomials, - const proof_system::RelationParameters& relation_parameters, - const barretenberg::PowUnivariate& pow_univariate, - const FF alpha) + barretenberg::Univariate compute_univariate( + auto& polynomials, + const proof_system::RelationParameters& relation_parameters, + const barretenberg::PowUnivariate& pow_univariate, + const FF alpha) { // Precompute the vector of required powers of zeta // TODO(luke): Parallelize this @@ -440,12 +441,12 @@ template class SumcheckVerifierRound { * @param round_challenge u_l * @return FF sigma_{l+1} = S^l(u_l) */ - FF compute_next_target_sum(barretenberg::Univariate& univariate, FF& round_challenge) + FF compute_next_target_sum(barretenberg::Univariate& univariate, + FF& round_challenge) { // IMPROVEMENT(Cody): Use barycentric static method, maybe implement evaluation as member // function on Univariate. - auto barycentric = - barretenberg::BarycentricData(); + auto barycentric = barretenberg::BarycentricData(); // Evaluate T^{l}(u_{l}) target_total_sum = barycentric.evaluate(univariate, round_challenge); diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.test.cpp index e6089f875d1..33cc485cb2f 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/sumcheck/sumcheck_round.test.cpp @@ -20,9 +20,9 @@ using namespace proof_system::honk; using namespace proof_system::honk::sumcheck; using namespace proof_system; -using barretenberg::Univariate; -using barretenberg::PowUnivariate; using barretenberg::BarycentricData; +using barretenberg::PowUnivariate; +using barretenberg::Univariate; using Flavor = flavor::Standard; using FF = typename Flavor::FF; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/transcript/transcript.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/transcript/transcript.test.cpp index 89b26fa53fd..8865e473fda 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/transcript/transcript.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/honk/transcript/transcript.test.cpp @@ -2,8 +2,8 @@ #include "barretenberg/honk/composer/standard_composer.hpp" #include "barretenberg/honk/composer/ultra_composer.hpp" #include "barretenberg/honk/flavor/standard.hpp" -#include "barretenberg/polynomials/univariate.hpp" #include "barretenberg/numeric/bitop/get_msb.hpp" +#include "barretenberg/polynomials/univariate.hpp" #include "barretenberg/proof_system/flavor/flavor.hpp" #include "transcript.hpp" #include diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/barycentric.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/barycentric.test.cpp index 2dcda2c229d..a166fc5beac 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/barycentric.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/barycentric.test.cpp @@ -1,5 +1,5 @@ -#include "barycentric.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" +#include "barycentric.hpp" #include namespace barretenberg::test_barycentric { diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/pow.test.cpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/pow.test.cpp index 9c5a725d159..58355c453c6 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/pow.test.cpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/polynomials/pow.test.cpp @@ -1,5 +1,5 @@ -#include "pow.hpp" #include "barretenberg/ecc/curves/bn254/fr.hpp" +#include "pow.hpp" #include namespace barretenberg::test_pow { @@ -18,14 +18,14 @@ TEST(SumcheckPow, FullPowConsistency) u_i = FF::random_element(); pow_univariate.partially_evaluate(u_i); } - + FF zeta_power = zeta; FF expected_eval = 1; for (auto& u_i : variables) { expected_eval *= FF(1) - u_i + u_i * zeta_power; zeta_power *= zeta_power; } - + EXPECT_EQ(pow_univariate.partial_evaluation_constant, expected_eval); } } // namespace barretenberg::test_pow diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/flavor/flavor.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/flavor/flavor.hpp index af934fe7069..7f6baf00b4c 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/flavor/flavor.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/flavor/flavor.hpp @@ -65,8 +65,8 @@ #pragma once #include "barretenberg/polynomials/barycentric.hpp" -#include "barretenberg/polynomials/univariate.hpp" #include "barretenberg/polynomials/evaluation_domain.hpp" +#include "barretenberg/polynomials/univariate.hpp" #include "barretenberg/proof_system/types/circuit_type.hpp" #include #include diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/auxiliary_relation.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/auxiliary_relation.hpp index 91997903d8c..05078bf638f 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/auxiliary_relation.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/auxiliary_relation.hpp @@ -8,7 +8,7 @@ namespace proof_system { template class AuxiliaryRelationImpl { public: using FF = FF_; - + // 1 + polynomial degree of this relation static constexpr size_t RELATION_LENGTH = 6; diff --git a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/permutation_relation.hpp b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/permutation_relation.hpp index 972f98e6ed4..a267e673552 100644 --- a/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/permutation_relation.hpp +++ b/circuits/cpp/barretenberg/cpp/src/barretenberg/proof_system/relations/permutation_relation.hpp @@ -14,7 +14,7 @@ template class PermutationRelationImpl { static constexpr size_t LEN_1 = 5; // grand product construction sub-relation static constexpr size_t LEN_2 = 3; // left-shiftable polynomial sub-relation - static constexpr std::tuple SUBRELATION_LENGTHS = {LEN_1, LEN_2}; + static constexpr std::tuple SUBRELATION_LENGTHS = { LEN_1, LEN_2 }; template