diff --git a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs index 9a10f4e1b5c..d8bc70f2ffc 100644 --- a/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/ssa_gen/mod.rs @@ -1083,8 +1083,10 @@ impl FunctionContext<'_> { } fn codegen_assign(&mut self, assign: &ast::Assign) -> Result { - let lhs = self.extract_current_value(&assign.lvalue)?; + // Evaluate the rhs first - when we load the expression in the lvalue we want that + // to reflect any mutations from evaluating the rhs. let rhs = self.codegen_expression(&assign.expression)?; + let lhs = self.extract_current_value(&assign.lvalue)?; self.assign_new_value(lhs, rhs); Ok(Self::unit_value()) diff --git a/test_programs/compile_failure/assign_mutation_in_lvalue/Nargo.toml b/test_programs/compile_failure/assign_mutation_in_lvalue/Nargo.toml new file mode 100644 index 00000000000..8aab1fd7e63 --- /dev/null +++ b/test_programs/compile_failure/assign_mutation_in_lvalue/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "assign_mutation_in_lvalue" +type = "bin" +authors = [""] + +[dependencies] diff --git a/test_programs/compile_failure/assign_mutation_in_lvalue/src/main.nr b/test_programs/compile_failure/assign_mutation_in_lvalue/src/main.nr new file mode 100644 index 00000000000..346d3285fef --- /dev/null +++ b/test_programs/compile_failure/assign_mutation_in_lvalue/src/main.nr @@ -0,0 +1,17 @@ +fn main() { + bug(); + comptime { bug() }; +} + +fn bug() { + let mut a = ([1, 2], 3); + a.0[{ + a = ([4, 5], 6); + 1 + }] = 7; + + // acir+brillig yield ([1, 7], 3) + // comptime yields ([1, 7], 6) + // both should yield: + assert_eq(a, ([4, 7], 6)); +} diff --git a/test_programs/compile_failure/assign_mutation_in_lvalue/stderr.txt b/test_programs/compile_failure/assign_mutation_in_lvalue/stderr.txt new file mode 100644 index 00000000000..f606fb72caa --- /dev/null +++ b/test_programs/compile_failure/assign_mutation_in_lvalue/stderr.txt @@ -0,0 +1,10 @@ +error: Assertion failed + ┌─ src/main.nr:16:15 + │ +16 │ assert_eq(a, ([4, 7], 6)); + │ -------------- + │ + = Call stack: + 1. src/main.nr:3:16 + +Aborting due to 1 previous error diff --git a/test_programs/execution_success/assign_evaluation_order/Nargo.toml b/test_programs/execution_success/assign_evaluation_order/Nargo.toml new file mode 100644 index 00000000000..2795859067a --- /dev/null +++ b/test_programs/execution_success/assign_evaluation_order/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "assign_evaluation_order" +type = "bin" +authors = [""] + +[dependencies] diff --git a/test_programs/execution_success/assign_evaluation_order/src/main.nr b/test_programs/execution_success/assign_evaluation_order/src/main.nr new file mode 100644 index 00000000000..e99c5026b72 --- /dev/null +++ b/test_programs/execution_success/assign_evaluation_order/src/main.nr @@ -0,0 +1,27 @@ +fn main() { + let result1 = bug_8262((1, true, false)); + assert_eq(result1, 2); + + let result2 = bug_8337(); + assert_eq(result2, [10, 40, 10]); +} + +fn bug_8262(mut a: (i32, bool, bool)) -> i32 { + a.1 = if a.1 { + a = (2, a.2, a.1); + true + } else { !a.2 }; + a.0 +} + +fn bug_8337() -> [Field; 3] { + let mut a = [10, 20, 30]; + a[1] = { + a = { + a[2] = a[0]; + [a[0], 40, a[2]] + }; + a[1] + }; + a +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 4afd83fa3cf..61bc7a2a991 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -83,8 +83,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_0.snap index 3d4b7a07260..69674d567f6 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_0.snap @@ -83,8 +83,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 2d65da59627..88fb3610113 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/7_function/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -83,8 +83,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "H4sIAAAAAAAA/+1dS29jSRWua/s6fe04dh4sWIEEEoOQwHacToJ4RGJ6eh7dM9PzZoPkTrp3I/ETLCGxAoktbNnxD2CNhDQSCyQ2LGePEBJIs52u5J748+evyjfJrc5YSkmte1N16rzr1KnHdWfuouy9+JeV763ymbvlYjAn5XN4szKqEdcwJZ/ZmvDZqJFPz1vh0tq/mUCvdfPYWgMe8zXgsb0GPG6sAY/31oDHYg147KwBj123XvF8cw102lsDHrfWgMf+GvA4WAMet9eAx5014HF3DXjcS8DjefkavHum/ULAJ9c+efXJoU++fHLjkwc/CfjJz08uPmD7gOgDjh/QfsB4h/QG9wrdc+Fiyvlp4+Jpk0sD2mtM8EcF0a0T/9Hw4FhNjjXyv1+UONtJ8I8ODP9GGv6HhvfV2Rw/ymLtTYLjPk2AeQAwDwIwDwHmYQDmdYB5PQDzBsC8EYB5E2DeDMC8BTBvBWAeAcyjAMxjgHkcgHkbYN4OwLwDMO8EYN4FmHcDME8A5kkA5j2AeS8A8z7AvB+A+QBgPgjAfAgwHwZgPgKYjwIwHwPMxwGYTwDmE4Lple/ZHOTSn62tAW0PqK0Jba+VbTZWbbOt3lg2OUwcC45NtjbIZvox2vfS0J5mRM+5uY6xzeh3XMq4e7E5iPSMH9aP+UjPYGZzflrU1poty2FtObSZfT3MDwGOfcv4MNvkCXTxYg4d3vndevldTm2t2bIcV/U79K02wD2A99fKd7NZypwO43PdOdGu4B9p+bIxc5fF/KUJdaZX0/M9hKe2Atpas0U6nfLvFtBBXMZHTvCvln/3y2cb+lj/gaDfJvoLfIs61ksh4AsB733ox+V7t/znfagF646EMWccG2dod6SPm23tALzhywn+Ufn07R2SsUgi4/6Z8dYp8bWA5yLCs8E/cYt8dpPwORzuAF5HtDj+u/rojh3pAmVzgi7qxjltO6WvGnmeGK3NEh/bDOnmBPtz4q9HvJ/Uw6O0Z49od+rXzX5IN2ijTkA3v/gK6aaoXzcjlh9lcy4+DrivGhccQxAv+6PBPiO5O0T7pB7Zpc6NVlPwm7l5abrl/BPXhYzPuXAMSRcXJkOjdZ248Cnxdxu+33Naj+rp3HKO7ovZZSBkL0jGzTQyjpUOXX34R6anrtCT0d5KItt4VMUOSL/jkuYNl2ulLeKH9dMg/fTT6Gfo99jN9zBebArdMB88BwwS8ajWi8aTWi8aH16eHuWtidbko7RjdDxKG+fGQzUOnas/BuAehNnC1/0K6tHPcre8l6DmDIP/TzbH+euyri/6W5xNkb+Mp8enz0bDp0wrF3wU1GawvyH+bnMdg/xmNdJWa8ka8R+oHK1G/OMq81qiOXtSdV4z+i9rXtskfkLzmumuJ3gdiDb2wZ6g0xN0FK6iRlwdkgflv2kuiL5jOuwLHni8pskVLi5u4fyKezMqL2i45bzA3n3Jqe6P5dPPC99szPtcx0ZdwU9P9LuujXpCHh7721B/G2Pf6HdcyvxsPva3iR/WD+tuR/A6EG089ncEnR1BR+EqasTVoTYckya3yj0u97AFTynG66q91DbIivD47gvnKH8un2q84rlP7Cxo4JZ90+BiZ2zXjaloB8t1+25ZbrZRorE8ZD9EGyHNDsjDfoj+mlPdX8unslGHdMd1MRtx/pxqH6wQ8tZ5F4rvRqAs3lc+c4s6w3xd7cPtQDvCf57Ncf69rOu78Fjk/v8gfSc6y5XrgTbxi7R7EVk2qQ3nZN7bSrV/Z3az/ATHl8qhGgSP777wevNf5VONL8x7Y7nwQOiuG9Ed36G47XyPdVc13/vc1ae7tuAntj677vyBduD5A+Vm/049f+yW+ELzxwDkQXh89yWnun+XT2WjAemO62L+bXCr4u9/3SLNyzsgrlr8Nfh/Qvz9X1mnYhafN1jbF+XzNvdjYjFW8ZXVx9dI7cGij/vSmiXRycT73rdKZ1JruHy2KDPG69haMebHGN84z8dx3qU2XLPzupPPKtXTeOA65jkmo3+3OyB9wVf/irh2CNeGwNUTuIz/tOcD1dfDRr/jks6boyp+5Quvh1W8Hog2HuNq3b0t6ChcmzXi2qA2jFMmd8yHUsfWjGTGubIr5GgIHeH+Hp9Jf710NjVXbkC/pqhjvfYFPz3RLws8jQ7XMR20A+czKmYkHstD9kO0EdLcBHnYD9Ffc6r7dsRGau96M6K7vuBnVT7zSrZIE/ONKvmMwf8N8pnvle9qrbAR6P+Dsk/qb3VUPsNzE9IuSI91zJkqHm0RnZC9Dmqy11/AXkdkL3UeqOziy0n5HN6wZERP3dFX/mPwPyH/+aqcT9Z4F/V+LHY3AvpCHbUD8CGd/gxiU4dik/XHeJhFcBr8w+xl6KravhG2mb+lvhefES+oP86pnZvPJ20hB+rX6h5H5pMM+jVFHcenluCnEP1OatJNlW9YEs0Llb9hMfov6xsWNdZD37DwnBLLfzN6LwSdQtC5w3WH6yq4Uq8ReO850Xg8XpWXfZotym48h/IyPlcx+D9lc5y/LN/7on+VNVji89zKMdPod1zSGD6K+a1a2/J+PPZV++s8Pq56JnCH6w5XFVzqu/os8DQ6XMd0sB/HDsw7Mab9lmIa5vSxdUdO8H+AmPa7QJx0TsdJu5OrcnbOl5sCVyuCi3P8EA/II9flgq8mtRns70ugQvCWeu1jtLrAr4qT+OOmrF91P6MQOlH7KJ1IP4zNqi+Oi3Mcs+W+ic98purMZ+Eu0myRXxUH1F0Wg4/dU0XdqnMdnrPQ7nzXeNXeAX7bzm3WV8UG5UstF5ZX6YfzFF/UWO1G+uFY7UdkUL5kcLfhS6gP9qWqd5gNXt1N5XvfvsTuIqtcm+eqqrFb5c7WF3Pn2L2cmGxqPWzw6rsmvtuDtEPfGYVwbURoq3PMrQht5KsfoN1yy37BfbFNjRvEp9ZufAanxmpVO1tf3LuOnQsYzapnlQYfu+u7ys7bFXDFzut3Bfx2hDbytRugHbLzgOBX2ZnvMaOeU9n5FbJzL8BbyM5qj+G6dsZxVMXOsViS2s7IK9u5L3jqCdnUuoJjiYqhVe1sffEuVOzeaBW7sVzX0TXKuFsBV2z+3BPwuxHayNdegHbIzuyTys6FkE3dM2Q7q5ysqp3xzOgzklfdRbK/+V5fP8If33dhnw75EJ5jqbu/fMb+/zIeeXmPGxonrmn7FXB+ATh/RDjVNxwxf1P+iWs4vquCPrNL/ZRvOVFn9lGx0xEPjRW4lR+ruzb8t7orwd8vDQI8IR71WwWh+Omc9h0eC2pc4XfBKdcIh0cX54TnvJb4zT+5tKAd4YvSyVAn9rzJf9zw/HA6er4/fT49mJ6dTU6nvNfgi/l3NwH9ycH08HR6OBodT0bPJqODVfQv49hsDlfjWm5sdPMSf9PN7dSazXky+uq3zAzu8q5FGl4vfcp+3wx9Cn9fzGRpEDy/8++lfQPiIMqIsSX2u2ddaLvcj4M641H9Hlt3djVc9wjXxg1wGV8DAb9xTb4UrjbhusrvxG2Xf6QYk9PD/aPT8eT08OnB/nT//sqYoOyH+zC+mN7wN/vaQrac4L/TmMv8XdhjOYcV9M7vP0XgssDzHIeoa80W65SN0N4Gb7Q7gkdrQ1/Iic5m+TfqC3EZHznBH5Sym01wfFp/5Ys4tpmWol9lrHcFvLfP92kuQ9nrPj88p0n4sY55O0o4rsZHR/ePx0+Hk8Oz0+dnk/2XPdeeHtx/evpiwh0+G52zs4r+l2ouYV41bQAA", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index e197855421a..142b51444fe 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -64,8 +64,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZfdbuIwEIXfJddc2OO/cV+lQhVtsxUSApTCSquKd98Ze07avWC1695wvkDOCYwnzvAxvc7P17en/fHH6X16ePyYnpf94bB/ezqcXnaX/eko735MTl9Kmh78Ziq5S+nCXWoTdl18F+oSusQuPYV7CvcU7incU2pPqT2l9hTvRElVAoKqWKMqm4o5iXpnmkzlSlm1mLKpnF9EyZl6U7kOqwbTaJpMs2kxZVPJq6LBmXpTMg2mWgenkAAZUAAMqAbRAbQqWo9IgADQZC1RTIAMKAAGVIPkAJqslU0ECIAISIAMKADu65Jq1+xMvSmZBtNoauvZOkkXrPWSQusfXarWQQ30qrpIrW8aMKAatO5poC5dmRoBCZABpQNpd/mqEAARkADqqjex6e3gvdZLO88TIAAiIAEyoAAYUA20Ezu05JtcCXfh02WZZ73ql9tSbtbzbpmPl+nheD0cNtPP3eHaTno/745NL7tFPpW2mY+vohL4Y3+YlW6bT7e7byUmMxOH1Z7+2R8Cmz+EOuCPLps/+hF/SAHXT/w9fx75/dGH9fuPXD+GBH/MI36i1V++50804i8Ffh7yZ179Q/VPa/04fu/3D/mzbszNn4f6L6H988jqyzPT7LJHjfjX6skuPeIndL88/Qb8a/PwSO8WxsbHacRfA759TX7En7F4le+uvfbX3c3XrbsfOf+lgP+R4MuaQOlOwl87KK9L6Id2YHkoxjWhuLt1yEN12MrB7mW//Dmu6ohKrs+oZEMq2ZRKNqaSzalkgyrZpEo2qpLNqmTDKtm0Sjauks2rZAMr2cRKNrI2tTwdQHSZdP5omk2LKZvWrt45gAcQIAAiIAEyoAAYgGSdjqmNxR5AgACIgATIgAJgQDUgJBOSCcmEZEIyIZmQrOO0NkGbpztUA52oO3gAAQIgAhIgA5AckByQHJEckRxb8k2bcdnvng+zNpR23PX4gv6Sw8uvMz7BH6bzcnqZX6/LrL34+a9JXh5J7kIKvN1M8nUfM20KbXVR5MDLA86XoIdezwx1Q9FvMWTq+VXOcLwaKG6kNNubNv9v", + "bytecode": "H4sIAAAAAAAA/+1dSW/cyBUuqhepJcuS7dlXe1bPTvaibs3ikWcs77vlTV57tWVZ8r7n0AlyCJBDzrnknEsC5JJDLkEuQZBLMAgQIIcgl9wCJEB+Qaoslvrr168kz6iomTcQgQeSHz9Wfa9YfE0Wn0qBWlgeaftZvB1oS8VrswwQLGCwPgZLMViawTIMlmWwfgYbYLAcgw0y2BCDrWOwYQZbz2AjDDbKYBsYbCODbWKwpxjsaQZ7hsGeZbDnGOx5BnuBwV5ksJcY7GUGe4XBXmWwzQy2hcFeY7DXGewNBnuTwd5isLcZbCuDvcNg7zLYewz2PoN9wGAfMthHDBYyWMRgeQYrMFiRwUoMNsZgZQarMNg4g33MYJ8w2KcM9hmDbWOwzxlsgsG2M9gXDPYlg+1gsEkG28lguxhsN4PtYbC9DLYPMLOsi9d23x4LYJvGebuNcR3jOcZxjN8YtzFeY5zG+IxxGeMxxmGMvxh3Md5inMX4inEV4ynGUYyfGDcxXmKcxPiIcRHjIcZBjH+bYXsLbGOcw/iGcQ3jGcYxjF9bYRvjFcYpG59MW5plv7YD2g5qO6TtsLYj2o5qO6ZtSttxbSe0ndR2SttpbdPazqiFPqJUp39ZP3GxxybidbiyJXrfX1lhUho/EKDxQwEaPxKgMRSgMRKgMS9AY0GAxqIAjSUBGscEaCwL0FgRoHFcgMaPBWj8RIDGTwVo/EyAxm0CNH4uQOOEAI3bBWj8QoDGLwVo3CFA46QAjTsFaNwlQONuARr3CNC4V4DGfR414pikHe88q+2ctvPaLmi7qK2qraatrq2hramtpe2StsvaZrRd0TZrC7OD7aYwOgB/jsHOM9gFBrvIYFUGqzFYncEaDNZksBaDXWKwyww2w2BXGGw2xnDpi9cT8Tpc2RLth7IK4Vix2Cznm1Ehqob58VqlFBZLtbFKVIlKlVIjXykUmpVipTxeGy+H41Gx0IxapfFCKy7srPJ/syTh8wGPPp8T4vNBjz6fF+LzIY8+XxDi82GPPl8U4vMRjz5Xhfh81KPPNSE+H/Poc12Iz1MefW4I8fm4R5+bQnw+4dHnlhCfT3r0+ZIQn0959PmyEJ9Pe/R5RojP0x59viLE5zMefZ716LNJuLLv1Up1Eulw8T0o47GsxAaOAgEa+wRoTAnQmBagMSNAY1aAxn4BGgcEaMwJ0DgoQOOQR434YSIpvesEtOmwAI3rBWgcEaBxVIDGDQI0bhSgcZMAjU8J0Pi0AI3PCND4rACNzwnQ+LwAjS8I0PiikvUs+ZKANn1ZgMZXBGh8VYDGzQI0bhGg8TUBGl8XoPENARrfFKDxLQEa3xagcasAje8I0PiuAI3vKb/Pklajfaa8qm1O27y2a9qua7uh7aa2W9pua7uj7a62e9rua3ug7aFamIiqKxnYFEYThOcYbJ7BrjHYdQa7wWA3GewWg91msDsMdpfB7jHYfQZ7wGAPGeyRWj5xeqUfqDFxOlzZEl1V/m+WJHw+4NHnOSE+H/To87wQnw959PmaEJ8Pe/T5uhCfj3j0+YYQn4969PmmEJ+PefT5lhCfpzz6fFuIz8c9+nxHiM8nPPp8V4jPJz36fE+Iz6c8+nxfiM+nPfr8QIjP0x59fijE5zMefX7k0WfzLm1nq9wP/gdxG6Ti4yZx0yRG2plNTeKcSUwziV8mmcokK5lkIJNsYwZHTLKIScYwyQ4mmcB8rDcfw83HZvMx13wsNR8jzcc+8wHNfKAyH4DMB5bNamEmUDMAbwa4zQCyGaA1A6BmgNEM4JkBMjMAZQZ4zMyXZmZJM3OjmRnRXEiTnW1mzjMz05mZ38zMambmMjMzmJl5y8xsZWaOMjMzmZmPzMxCZuYeOzPOdrUw062ZmcTM/GFm1jAzV5iZIczMC2ZmAzNzwD7lXmwf+l+8zhHcjmdMxPvhypYoB+X6Lr8Slos54p9n/YWc6vQ7/+Xnw5zq/SMBn4nd/XE5O9qd8qkvCtaWR89B7iRwJh2cncDZ6eDsAs4uB2c3cHY7OHuAs8fB2QucvQ7OPuDsc3D2A2e/g3MAOAccnIPAOejgHALOIQfnMHAOOzhHgHPEwTkKnKMOzjHgHHNwpoAz5eAcB85xB+cEcE44OCeBc9LBOQWcUw7OaeCcdnCmgTPt4JwBzhkH5yxwzjo454BzzsE5D5zzDs4F4FxwcC4C56KDUwVO1cGpAafm4NSBUyecHGwr5ft3olhMNs7mw2HVHVsV+GLrTidTdxSQ+hTxU5H6B1WSv2kLf+CF9Vk9tH3s9rDltDt6AnIs3e71wx7LtLv9MIt5HtwGPNq3+oC3B7b3qm4NfYwPAeNDkv2rop/zk+1DUchdA3p90u3uuvEYXoM0tOc20j5J9Dlsn2Tu7yjc5NBvt83S31aLS4q0J7aRbbMB5JNjOTiWbnfXMxjvp6EeLMvqyBD+7nh/JF5n4Rx7/ihTf5bU36WbwbCNaFkpBrN88y63Pd4eUp3/QPFLe47qbXdjE/F+uMLFxgmMWzSGZwD32L+eOIYvXlOVZDzoxPAM0UPbh8a/bDLtEwakfNSTZdrHXst+5pgty36rz0BZyM+Cj8jHbXs+YtPxepQpk/bdftXrD2J4b0wR31LACxxrpXr7EZY7yuiy1zfZ35wwTPae6rxbZ4n/nvRHtny8vv7iUbSofyCZ9l/Un0um/LwtfzCR8qOeZ27sq+aat8h1GYr38X7HczNwHPmzUOZMvD0C5aJvKj7Plj8Mx+nvouXgf34aJuUFBE87zksTX3GiCc7XAeKrLf8W+Hoj3ubaeR3wWqQs22534rWp69dEn61PqaWfqy2+nuFzbTtCNOC5ObLvub+3bDuNqN7FHhuFulEjXVJkH3Wb9vwNlEt5tE5sJ6wfNfSp3mvDxbYR0BcwflC+1ZxmysC6MoT/Y/D1r6RMru9wfZtqyDr4Lg0/AQ1/c5SJsQTbLeMo86dQJr0nRhi/lronRhk+17YjqrffLz7nM+clEaPpHzwp1emfG6Bu1EgX7p6wuldyT2D9NNZwfXyYHFt8n3Lwsa8g/+eg3fYvLn7RZ8bFd3XF9+ecQ5+rrw469P0C9Nm+yo0TWK223nS7W/tEjIcrWqLHk3f8HXTQeybT7vZ7qfvDLPR+2sDwMV5a30eVu99yz9MjRPNyv6NJtmO50kkat9cwo3rvLaw/Q/i/ivfxuc6uVzLhT6tcjVqFaqtaqjYaxXp1IylfQdsNJVB/vTRWqxdL1bAZmd38cvWv3thEoRqAf/aaBGCK1J8h/D/Ha9PPfks0pxPRXCzb8jLLaKY+Wf4fQPPvVkVzqUdzsIxmi2dBa+DgoI+W//t4bfrSf+Nt+n6Pesx5f1qVtiiselv8cQVtwcXWFPC+Im2W0H0auvx13acB41Pg4GCbWf5flmgz13vxV4SHupKMr2PFsahSqVbqY/XWeLFeW+34rkN7uV4tR9F4MWoWo9Jy9XPj5PjcYxY71o5j8ci35WUI/x+Wq+2f8Tb9loL1Gd5/luAFjvXjMhgs3e7GuDF6/HZh+bbuwXavRntsCI5lSD3r4n1sLyzL6sgQ/r/j/cXnfTjHnj/K1D9A6u/SzWB0jGaI4Q8xfHN9/mXLi9fou++x+cd1kvIRo9ps30nivspXKmPj+Zr+xW/UW41iYbn76kfxtuzcs0q4WrlnCeUN1JMdf+dzz9CXxfcKwqPnYP+eBM6kg7OWe9a9TTlruWfd25SzlnvWvU0537fcM8tpAKfh4DSB03RwWsBpOTiXgHPJwbkMnMsOzgxwZhycK8C54uDMAmfWwbkKnKsOzhxw5hyceeDMOzjXgHONcFYrVzCh38X6k+SZJJNHETYCUp9Sve8HWP9q5ZlweR1cnsnXzRXMkmMZOGavr3l3rgGP9i2aD5FMDlsp4XyIKPz2+t2T5zdJ6ndL5Ud+037HjdkknFu61u+UrH6XIsfS7V4/vm6/wzbB/N052J4HDvZV9CFgfEi2/5ZDqbnRNdI+yfyulBP+G7PvR2701Xj/u5wb3Yy3MTf6BzG2lrvcERSQ+qye5eJTQs/cdVsvl+vbx+ix/AGGn1qCn2P4S+VqJ5WXiXkR2OewfW1bYH7FAIPhGK7Vu9Qz+pD67udP/DDe/7bzJ/4PEPtqE36aAAA=", + "debug_symbols": "pZfdbuIwEIXfJddc2OO/cV+lQhVtsxUSApTCSquKd98Ze07avWC1695wvkDOCYwnzvAxvc7P17en/fHH6X16ePyYnpf94bB/ezqcXnaX/eko735MTl9Kmh78Ziq5S+nCXWoTdl18F+oSusQuPYV7CvcU7incU2pPqT2l9hTvRElVAoKqWKMqm4o5iXpnmkyzqZyfVdm0diU5v6h6UzINptE0mWZTyWNVNq1dgzP1ppJXVYNpNE2m2bSYsqkWwwlEB/AALYnWJAZABCRABhQAAzRZS5kcwAMIEACarPVOCZABBcB9SVLtmp2pNyXTYBpNbSlbE+katTZSaK2jq9Oap4FeVeveWqYBA6pBa5wG6tLi1whIgAwoHUgby1eFAIiABFBXvYlN7wTvtV7adJ4AARABCZABBcCAaqBN2KEl3+RKuAGfLss861W/3JFyn553y3y8TA/H6+GwmX7uDtd20vt5d2x62S3yqXTLfHwVlcAf+8OsdNt8ut19KzGZmTis9vTP/hDY/CHUAX902fzRj/hDCrh+4u/588jvjyHh+8c84ida/eV7/kQj/lLg5yF/5tU/VL+01o/j937/mN+Htf9G+ifrXtv8eaj/Eto/j3SPPC7NLnvUiH+tvuzSI35C9eTBN+Bfm49Her8wNj5OI/4a8O1r8iP+jMWrfHfttT/vbr5u3f3I+S8F/I8EX9YESncS/tpBeV1CP7QDy0MxrgnF3a1DHqrDVg52L/vlz0lVp1NyfTwlm0/JBlSyCZVsRCWbUcmGVLIplWxMJZtTyQZVskmVbFQlm1XJhlWyabWp5ekAosuk80fTbFpM2bR29c4BPIAAARABCZABBcAAJOtgTG0S9gACBEAEJEAGFAADqgEhmZBMSCYkE5IJyYRknaQp2yjdoRroMN3BAwgQABGQABmA5IDkgOSI5Ijk2JJv2ozLfvd8mLWhtOOuxxf0lxxefp3xCf4rnZfTy/x6XWbtxc8/TPLySHIXUuDtZpKv+5hpU2iriyIHXh6QvgQ99HpmqBuKfoshU8+vcobj1UBxI6XZ3rT5fwM=", "file_map": { "50": { "source": "unconstrained fn decode_ascii(ascii: u8) -> u8 {\n if ascii < 58 {\n ascii - 48\n } else if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n }\n}\n\nunconstrained fn decode_hex(s: str) -> [u8; M] {\n let mut result: [u8; M] = [0; M];\n let as_bytes = s.as_bytes();\n for i in 0..N {\n if i % 2 != 0 {\n continue;\n }\n result[i / 2] = decode_ascii(as_bytes[i]) * 16 + decode_ascii(as_bytes[i + 1]);\n }\n result\n}\n\nunconstrained fn cipher(plaintext: [u8; 12], iv: [u8; 16], key: [u8; 16]) -> [u8; 16] {\n let result = std::aes128::aes128_encrypt(plaintext, iv, key);\n result\n}\n\nfn main(inputs: str<12>, iv: str<16>, key: str<16>, output: str<32>) {\n let result: [u8; 16] =\n std::aes128::aes128_encrypt(inputs.as_bytes(), iv.as_bytes(), key.as_bytes());\n\n // Safety: testing context\n let output_bytes: [u8; 16] = unsafe { decode_hex(output) };\n assert(result == output_bytes);\n\n // Safety: testing context\n let unconstrained_result = unsafe { cipher(inputs.as_bytes(), iv.as_bytes(), key.as_bytes()) };\n assert(unconstrained_result == output_bytes);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_0.snap index e197855421a..142b51444fe 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_0.snap @@ -64,8 +64,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZfdbuIwEIXfJddc2OO/cV+lQhVtsxUSApTCSquKd98Ze07avWC1695wvkDOCYwnzvAxvc7P17en/fHH6X16ePyYnpf94bB/ezqcXnaX/eko735MTl9Kmh78Ziq5S+nCXWoTdl18F+oSusQuPYV7CvcU7incU2pPqT2l9hTvRElVAoKqWKMqm4o5iXpnmkzlSlm1mLKpnF9EyZl6U7kOqwbTaJpMs2kxZVPJq6LBmXpTMg2mWgenkAAZUAAMqAbRAbQqWo9IgADQZC1RTIAMKAAGVIPkAJqslU0ECIAISIAMKADu65Jq1+xMvSmZBtNoauvZOkkXrPWSQusfXarWQQ30qrpIrW8aMKAatO5poC5dmRoBCZABpQNpd/mqEAARkADqqjex6e3gvdZLO88TIAAiIAEyoAAYUA20Ezu05JtcCXfh02WZZ73ql9tSbtbzbpmPl+nheD0cNtPP3eHaTno/745NL7tFPpW2mY+vohL4Y3+YlW6bT7e7byUmMxOH1Z7+2R8Cmz+EOuCPLps/+hF/SAHXT/w9fx75/dGH9fuPXD+GBH/MI36i1V++50804i8Ffh7yZ179Q/VPa/04fu/3D/mzbszNn4f6L6H988jqyzPT7LJHjfjX6skuPeIndL88/Qb8a/PwSO8WxsbHacRfA759TX7En7F4le+uvfbX3c3XrbsfOf+lgP+R4MuaQOlOwl87KK9L6Id2YHkoxjWhuLt1yEN12MrB7mW//Dmu6ohKrs+oZEMq2ZRKNqaSzalkgyrZpEo2qpLNqmTDKtm0Sjauks2rZAMr2cRKNrI2tTwdQHSZdP5omk2LKZvWrt45gAcQIAAiIAEyoAAYgGSdjqmNxR5AgACIgATIgAJgQDUgJBOSCcmEZEIyIZmQrOO0NkGbpztUA52oO3gAAQIgAhIgA5AckByQHJEckRxb8k2bcdnvng+zNpR23PX4gv6Sw8uvMz7BH6bzcnqZX6/LrL34+a9JXh5J7kIKvN1M8nUfM20KbXVR5MDLA86XoIdezwx1Q9FvMWTq+VXOcLwaKG6kNNubNv9v", + "bytecode": "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", + "debug_symbols": "pZfdbuIwEIXfJddc2OO/cV+lQhVtsxUSApTCSquKd98Ze07avWC1695wvkDOCYwnzvAxvc7P17en/fHH6X16ePyYnpf94bB/ezqcXnaX/eko735MTl9Kmh78Ziq5S+nCXWoTdl18F+oSusQuPYV7CvcU7incU2pPqT2l9hTvRElVAoKqWKMqm4o5iXpnmkyzqZyfVdm0diU5v6h6UzINptE0mWZTyWNVNq1dgzP1ppJXVYNpNE2m2bSYsqkWwwlEB/AALYnWJAZABCRABhQAAzRZS5kcwAMIEACarPVOCZABBcB9SVLtmp2pNyXTYBpNbSlbE+katTZSaK2jq9Oap4FeVeveWqYBA6pBa5wG6tLi1whIgAwoHUgby1eFAIiABFBXvYlN7wTvtV7adJ4AARABCZABBcCAaqBN2KEl3+RKuAGfLss861W/3JFyn553y3y8TA/H6+GwmX7uDtd20vt5d2x62S3yqXTLfHwVlcAf+8OsdNt8ut19KzGZmTis9vTP/hDY/CHUAX902fzRj/hDCrh+4u/588jvjyHh+8c84ida/eV7/kQj/lLg5yF/5tU/VL+01o/j937/mN+Htf9G+ifrXtv8eaj/Eto/j3SPPC7NLnvUiH+tvuzSI35C9eTBN+Bfm49Her8wNj5OI/4a8O1r8iP+jMWrfHfttT/vbr5u3f3I+S8F/I8EX9YESncS/tpBeV1CP7QDy0MxrgnF3a1DHqrDVg52L/vlz0lVp1NyfTwlm0/JBlSyCZVsRCWbUcmGVLIplWxMJZtTyQZVskmVbFQlm1XJhlWyabWp5ekAosuk80fTbFpM2bR29c4BPIAAARABCZABBcAAJOtgTG0S9gACBEAEJEAGFAADqgEhmZBMSCYkE5IJyYRknaQp2yjdoRroMN3BAwgQABGQABmA5IDkgOSI5Ijk2JJv2ozLfvd8mLWhtOOuxxf0lxxefp3xCf4rnZfTy/x6XWbtxc8/TPLySHIXUuDtZpKv+5hpU2iriyIHXh6QvgQ99HpmqBuKfoshU8+vcobj1UBxI6XZ3rT5fwM=", "file_map": { "50": { "source": "unconstrained fn decode_ascii(ascii: u8) -> u8 {\n if ascii < 58 {\n ascii - 48\n } else if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n }\n}\n\nunconstrained fn decode_hex(s: str) -> [u8; M] {\n let mut result: [u8; M] = [0; M];\n let as_bytes = s.as_bytes();\n for i in 0..N {\n if i % 2 != 0 {\n continue;\n }\n result[i / 2] = decode_ascii(as_bytes[i]) * 16 + decode_ascii(as_bytes[i + 1]);\n }\n result\n}\n\nunconstrained fn cipher(plaintext: [u8; 12], iv: [u8; 16], key: [u8; 16]) -> [u8; 16] {\n let result = std::aes128::aes128_encrypt(plaintext, iv, key);\n result\n}\n\nfn main(inputs: str<12>, iv: str<16>, key: str<16>, output: str<32>) {\n let result: [u8; 16] =\n std::aes128::aes128_encrypt(inputs.as_bytes(), iv.as_bytes(), key.as_bytes());\n\n // Safety: testing context\n let output_bytes: [u8; 16] = unsafe { decode_hex(output) };\n assert(result == output_bytes);\n\n // Safety: testing context\n let unconstrained_result = unsafe { cipher(inputs.as_bytes(), iv.as_bytes(), key.as_bytes()) };\n assert(unconstrained_result == output_bytes);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 8924b6826b4..768114e5d23 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -64,8 +64,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZfdbuIwEIXfJde5sMf/fZUKVbRNKyQEKIWVVhXvvjP2nLR7EcS6e8P5IDnHznhInM/hdXq+vD/tDm/Hj+Hh8XN4nnf7/e79aX982Z53xwP/+jkY+UhheLDjkGKT1CQ3KVWyaWKbUBPXxDdpKbml5JaSW0puKaWllJZSWoo1fCqxWj7qRPl3L+pUOT+IhnacTPtOHBNFSdWp8vlJNKhGVR6nsDqZhRGQ+csMnAcEQATIzGV23gAsgAByrTIznwFFIRiAjCVXEzwgACIgASRHLjEUhWgAFkAAB/AASZZKxAhIAEnODElypBqJXSTVkC5oEAFJQVafpBqy/g0I4ACcTFINWesKstoNLEDGkmqUAIiABMiA0oCMAdjaAGRI1al61aAaVZMqR7orR0qzWyuz8dpnhEYjdFqDAIiABMiAoiD92KAmX3kk/MeezvM0yajf/nT8Vzxt5+lwHh4Ol/1+HH5t95d60sdpe6h63s58lCs/HV5ZOfBtt5+EruOX26xbKZOaKbvFHu72O5fV71zp8HsT1e9tj98Fh/FD/pk/9ly/t26Zf8/43gX4fezxEy3+tObP6/6A8sfY4bYGo/N/pMcfcPV8K+rxE6rPt+gOf0pqz+lntQ/U41+G97nLH/Pi7+rdpfo++zW/TT9qnlv2u7rnZsA97XMz4J7+uRXw3xpofQFu+KNsPNoCdN38UsaTI4ee+ReH8pVge/wRDVTy6vzpRvn5iY8EfuZ/W8F/SLBpSaCwkmBuNXFcesh2PcJ4V+GXhGTWEpztqsOGv2xfdvPfu/m6cwttC0+x7eGrlqZ1HxfbNr4qqTpVrxpUo6rmZc3Lmlc0r2he0byieXW/xwtRt3uiUTWpZtXS1NatXgULIIADeEAAREACZACS68uF7GVl+9eAAA7gAQEQAQmQAUWBkExIJiQTkgnJhGRCsryVSBNYyoCiIC8qDSyAAA7gAQEQAUh2SHZI9kj2SPY1+SrNOO+2z/tJGko67nJ4QX/x1/PvE47gffI0H1+m18s8SS9+vVTyxyNRGSmYzTjwdB8jjYk2sihyiG9yZKN8tfVMMxLRBrt0Ob/kkRcSBq7hyKXZXKX5/wA=", + "bytecode": "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", + "debug_symbols": "rZdNbuMwDIXv4rUXEvXfqxRBkbZuESBIAjcZYFDk7kNKfG5n4SCjzibvc2w+yRQt05/D6/R8eX/aHd6OH8PD4+fwPO/2+9370/74sj3vjgf+93Mw8pPC8GDHIcUmqUluUqpk08Q2oSauiW/SXHJzyc0lN5fcXEpzKc2lNBdr+FJitXzWifL/XtSpsn8QDe08mXZMVpWvj6JO1avy9VmU51BYnQxrBAjgAB4g05ZJuQwoCt4A5EZlwj4CEiArBBlLJhsI4AAeEADiI3caEiADikI0AAsggDhLIqIHBIA4JwHxkWQkiZJsJAfwgADg0UmyIYtfQZa/gQWwM0k2ZKEbZEBRkAUmyUZxAA8IgAgQH8lGyYDSgIwB2FoBZEjVqXrVoBpVkypbuitbSrVbK/fgtdAIlUYotQYBEAEJkAFFQQqyQXW+8kh4yJ7O8zTJqN+eOn4WT9t5OpyHh8Nlvx+HX9v9pV70cdoeqp63M5/lPE+HV1Y2fNvtJ6Hr+BVt1kMpkwZTdkt4uDveuazxzpWOeG+ixnvbE++Cw/gh/yw+9ty/dwHz97EnnmiJT2vxaT0+IH0xdkRbg9G5xnviA+6et5KeeEL2eYvtiE9Jw3P6We4D9cQvw/vcFR/zEt9Ve0v2ffZr8Tb+qHhuhd9VPTcN7imfmwb31M8tg/9WQOsLcCveumXz69m8orQZbQG7Nr+U8ebIoef+i8P8S7A98REFWPLq/OnG889vfDjwO/9bBfyDg02LA4UVB3PrIYhLDdquVxh3FX5xSGbNwdmuPGz4YPuym/9u56WFp9B6eIqtia9amtY+LrY+viqpOlWvGlSjqvpl9cvqV9SvqF9Rv6J+td/jhajtnmhUTapZtTS1tdWrYAEEcAAPCIAISIAMgHP9upDOVdq/BgRwAA8IgAhIgAwoCgRngjPBmeBMcCY4E5wptSKo3ykNioIzAAsggAN4QABEAJwdnB2cPZw9nH11vkoxzrvt836SgpKKuxxeUF98eP59whl8UJ7m48v0epknqcWvr0r+eSQqIwWzGQee7mOkMdFGFkVO8SZHNsqhrVeakYg26NLl+pJHXkgEcA5HTs3mKsX/Bw==", "file_map": { "50": { "source": "unconstrained fn decode_ascii(ascii: u8) -> u8 {\n if ascii < 58 {\n ascii - 48\n } else if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n }\n}\n\nunconstrained fn decode_hex(s: str) -> [u8; M] {\n let mut result: [u8; M] = [0; M];\n let as_bytes = s.as_bytes();\n for i in 0..N {\n if i % 2 != 0 {\n continue;\n }\n result[i / 2] = decode_ascii(as_bytes[i]) * 16 + decode_ascii(as_bytes[i + 1]);\n }\n result\n}\n\nunconstrained fn cipher(plaintext: [u8; 12], iv: [u8; 16], key: [u8; 16]) -> [u8; 16] {\n let result = std::aes128::aes128_encrypt(plaintext, iv, key);\n result\n}\n\nfn main(inputs: str<12>, iv: str<16>, key: str<16>, output: str<32>) {\n let result: [u8; 16] =\n std::aes128::aes128_encrypt(inputs.as_bytes(), iv.as_bytes(), key.as_bytes());\n\n // Safety: testing context\n let output_bytes: [u8; 16] = unsafe { decode_hex(output) };\n assert(result == output_bytes);\n\n // Safety: testing context\n let unconstrained_result = unsafe { cipher(inputs.as_bytes(), iv.as_bytes(), key.as_bytes()) };\n assert(unconstrained_result == output_bytes);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 929a5dd9087..00afc0e206a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -68,8 +68,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZfdThsxEIXfJde58Hj8y6sghAIsVaQooDSpVKG8e+fEZwK9aAXmJt+X7M6J1ztred9WT8vD6cf9dv/88nN1c/u2ejhsd7vtj/vdy+PmuH3Z269vq4APKQZZG4WMpJKJzGQhK9lWNxHsgzWQQkZSyURm0vIUrGQj+2ALpJCRVDKRmWRes7wENrIP9kAKGUklE5nJQjKvM6+PvBgCKaTlZVDJRGaykJVsZB+UQArJvGg5BcxkISvZyD6ogRQykkoyT5mnzFPmKfOUeYl5iXnJzqvGbL830PI7qCT6JkAy5dJpF0GrCSS6qAuqIiS7FBc0nEKaS6eg54aIS3RRFyTjBqHxhhSX6tJckIxZR/cNEZfooi7JJbsgGZOEJhzSXJCMeUMfDhGX6KIuySW7IBnTjXYc0lz6EEVHDhGX6KKXm6VoygszWchKNrIPSiAxoA7JLsXFSmOANJdOicFFXKKLuiQXz0EDR4H4yWjdGCHJJbvYMKJCqktzwTDsrmjyQLTwkOiCc+z2KLp5CP6rQpILkjEJubl0Cjp7iLigCtOCPh5SXKpLo6BHFReIHh2SXYoLlsdwPq9XvobfHw/LgiX8w6JuS/3r5rDsj6ub/Wm3W69+bXany0k/Xzf7C4+bgx21yGX/ZLTA5+1ugZ3X79Xh36UtNBa3qNfy/Pl6zOao1zZRX5sPvuU6Ud9VWd+zzNSX4vVtZvy2grDelpCJeuts1ltrT9Sn4ONPMlNvj4b/f27fqy8z159Er+Of+f+k2etTmamP8Vpfv1ef40x99ecntan60q71U/Ofr/PX0veuf6q+YKNwqS9T/Wc7OQ+wzdyHFeDzAd2fINvtla8H2J7xPUB0JkDq+wjyd0fwr0uI6T+TYBtbn8Uo9etDyD6AMvMQSvAmEpl5COTaxPZiM1MffRESnXmIrs9w+3sJubNvm8ft4a83tTNyDtvNw27h1+fT/vHD0ePvVz/ib3qvh5fH5el0WJD0/rpnH7fa2jqFfme7CvsmthxKyvYNm7zbaPvfKDiIF5DbZBv2JPHujKH9AQ==", + "bytecode": "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", + "debug_symbols": "pZfdThsxEIXfJde58Hj8y6sghAIsVaQooDSpVKG8e+fEZwK9aAXmJt+X7M6J1ztred9WT8vD6cf9dv/88nN1c/u2ejhsd7vtj/vdy+PmuH3Z269vq4APKQZZG4WMpJKJzGQhK9lWNxHsgzWQQkZSyURm0vIUrGQj+2ALpJCRVDKRmWRes7wENrIP9kAKGUklE5nJQjKvM6+PvBgCKaTlZVDJRGaykJVsZB+UQArJvGg5BcxkISvZyD6ogRQykkoyT5mnzFPmKfOUeYl5iXnJzqvGbL830PI7qCT6JkAy5dJpFxEX9JpA1CW5oCpCikt1aS6dgp4bIi5IVoi6JJfsUlyQjHuH3hvSKei+IeISXdQFybhFaMEhxQXJmC104ZBOQR8OEZfooi5IxiSjGYcUl+rSXJBsd0LRkUPEJbro5WYpmvLCTBayko3sgxJIDKhDsktxsdIYIM2lU2JwEZfooi7JxXPQwFEgfjJaN0ZIcskuNoyokOrSXDAMuxmaPBAtPCS64BybcUU3D8F/VUhyQTImITeXTkFnDxEXVGFa0MdDikt1aRT0qOIC0aNDsktxwfIYzuf1ytfw++NhWbCEf1jUbal/3RyW/XF1sz/tduvVr83udDnp5+tmf+Fxc7CjFrnsn4wW+LzdLbDz+r06/Lu0hcbiFvVanj9fj9kc9dom6mvzwbdcJ+q7Kut7lpn6Ury+zYzfVhDW2xIyUW+dzXpr7Yn6FHz8SWbq7dHw/8/te/Vl5vqTZh9/KjP1MV7r6/fqc5ypr97/qU3Vl3atn5q/fJ2/lr53/XP1otf+m+mfgv3Bpb5M9Z/t5DzANnMfVoDPB3R/gmy3V74eYHvG9wDRmQCp7yPI3x3Bvy4hpv9Mgm1sfRaj1K8PIfsAysxDLMGbUGTmIZLrQ2AvNjP10ZtYdOYhvK4B7e8l6M6+bR63h7/e1M7IOWw3D7uFX59P+8cPR4+/X/2Iv+m9Hl4el6fTYUHS++uefdxqa+sU+p3tKuyb2HIqKds3bPJuo21po+AgXkBuk+3Tk8S7M4b2Bw==", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_0.snap index 6421d4378bc..3b7c4e02bbf 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_0.snap @@ -68,8 +68,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZfdTioxFIXfhWsu2u7++irGGNTxhIQgQTjJieHdz17TtUEvMFpu/D6YWZtOZ0/tfCxepqfjn8f19vXtfXF3/7F42q83m/Wfx83b8+qwftvqtx8Lhz8+K/xS6clAChnJRGaykHVxF8DWWRzpyUAKGclEaj0BC1nJ1lkd6clAChnJRLJe1XoJrGTrbI70ZCCFjGQiM8l6jfVarxecIz0ZSCF7veD1vAzq9wXU7yOYyEwWspKtMzjSk/o7FRQykonMZCEr2TrFkZ5kPdE6DUwk7reDFEoMJmgRD4kmyQSpACkm1UQH4PUOheRMvEkwEZNokkxQGROQikk1aZS5p2dBZcz+3NWziEk0SSbZpJigMm4amnsWdHcXVMZ9RH93EZNokkyySTFBZUw32nwW9HkXbxJMxCSapN5EaPaZhaxk60Szz/RkmCkOI2uQbFJM8Dw7SKOgc7t4k2AiJtEkmVgdNGzwEDsZrRoCJJlkEx1GEEg1aRQ0bEgQK4iW7SKUiHMyxJvgt3DJaM0uqFwhjYJG7OJNgglSmBa0XZdiUk0aBS0luEC0VJdsUkywvLnTabmwtfjxsJ8mLMWfFmddsner/bQ9LO62x81mufi72hznk953q+3Mw2qvR7XktH1RasHX9WaCnZaXtLsera4yXIOc4+nnecxmz0sdyJdqg6+pDOSbCPMt+Wv5eD2vzxfz+oAN5EVs/kTaQD66zHz0beT6s+VbrSPjTzZ/2sq35fPI/EUv5+sf+f0oyfIxj+RDOOfLbfkURvLFnp9Yh/K5nvND85/O81fjbdd/Pf9N/2ZsFOZ8TiPrh+7IrIBuyj6tAD8v0OwJ0l1b/n0B3ftdCngZKeDLZQTp1hFcu4TwzV30ukG1WdS95++HkGwAOY/cRGdN5H0YyZ+bWF9QRvLBFiEvI/8Ez89w/bqEPOin1fN6/+WN64Q6+/XqaTPx4+tx+/zp6OHfzo7YG9tu//Y8vRz3EypdXtv0z72UtozOPeiuQj95XQ59TPoJ+7X70NJS5oPYtd1H5/VceThhaP8B", + "bytecode": "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", + "debug_symbols": "pZfdTioxFIXfhWsu2u7++irGGNTRkBAkCCc5Mbz72Wu6NugFJ1pu/D6YWZtOZ0/tfC5epqfj2+N6+/r+sbi7/1w87debzfrtcfP+vDqs37f67efC4Y/PCr9UejKQQkYykZksZF3cBbB1Fkd6MpBCRjKRWk/AQlaydVZHejKQQkYykaxXtV4CK9k6myM9GUghI5nITLJeY73W6wXnSE8GUsheL3g9L4P6fQH1+wgmMpOFrGTrDI70pP5OBYWMZCIzWchKtk5xpCdZT7ROAxOJ++0ghRKDiZigRzwkmWQTpAKkmjRKcibeJJiICSoLJJlkk2JSTVAZczP39CzeJJiISTRJJqiMWzW39izVBJVx99DdXbxJMBGTaJJMUBk3HU3epZo0Cvq8CyrjTqDTu4hJNEm9idDsMwtZydaJZp/pyTBTHEbWINmkmOB5dpBGQed28SbBREyiSTKxOmjY4CF2Mlo1BEgyySY6jCCQatIoaNiQIFYQLdtFKBHnZIg3wW/hktGaXVC5QhoFjdjFmwQTpDAtaLsuxaSaNApaSnCBaKku2aSYYHlzp9NyYWvx42E/TViKvyzOumTvVvtpe1jcbY+bzXLxZ7U5zid97FbbmYfVXo9qyWn7otSCr+vNBDstL2l3PVpdZbgGOcfTz/OYzZ6XOpAv1QZfUxnINxHmW/LX8vF6Xp8v5vUBG8iL2PyJtIF8dJn56NvI9WfLt1pHxp9s/rSVb8vnkfmLkuz6Yx7Jh3DOl9vyKYzki/V/rEP5XM/5oflL5/mr8bbrH8t7OffvyPOfsT+Y8zmN5HVHZgV0U/ZlBfh5gWZPkO7a8u8L6N7vUsDLSAFfLiNIt47g2iWE/9xFrxtUm0Xde/5+CMkGkPPITXTWhN6Hkfz5IdAXlJF8sCb2MvJP8LwG1O9L0IN+Wj2v99/euE6os1+vnjYTP74et89fjh7+7uyIvbHt9u/P08txP6HS5bVN/9xLacvo3IPuKvST1+XUx6SfsF+7Dy0tZT6IXdt9dF7PlYcThvYP", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index eeda43b6ec6..bc9ebd76a91 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/aes128_encrypt/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -68,8 +68,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZhdbuM4EITvomc/kGz+NHOVQRA4iTIwYDiBx15gEfju2yV2K9kBJGjoeUl9itQlqlkibX8Or+Pz9efT4fT2/mt4+PE5PJ8Px+Ph59Px/WV/Obyf5L+fg8Mfn/Lw4HeiRZVVa9PsVL1qUCXVODwEaFLNqkWVVWvT4lS9qvgRlFSjalLNqkWVVWtTdqpeVf1Y/BI0qibVrFpUWbU2rU7VqwZV9avqV9Wvql9Vv6p+tfkF1/yCl+szVM4XqJyPosGpetWgSqpRNalmVblfhbJqbUqYLwfwBsGADKJBMsgGRSGaT0SVB0gVQ5NqVkUJAdigKiSYYLTJGwQDMogGySAbFIVsPlPq0E7EzgdAMsgGbBdjGOg5MtfAG2AYmAbErkE0gCE6ieRN90L0GrACW2+RtjABGUQDvBDoGxLXoBjgnUB/ELqpt0hdA28AHzwFgtYAPrg7oiYjJRfaP8jh5hkQDZIBiqaLiwEb4I2UByWPV8YB8M55QDYoBqyAnFIABAMyiAZ4N+X5CGFs4A2CAe4VAdmgGLBBVUAYCU8avUEwIINokAyyAZzRDSS0QVVAQokB8EE3kL6IbiB9DdigKmARjOgG8tggGiQFhC6iGwhdg2BABrgXuoGINWCDqoAFroE3CAbUgoDMTZpUs6oGhVm1NkXayu22G2w/eLqcxxHbwbcNQraNj/15PF2Gh9P1eNwN/+yP1+miXx/706SX/VnOSkPG06uoGL4djiPotvuqdsul7FiLOdBcnrbXI8itnrijvrANnlPpqK+I8lRfk1+qj8v1sn5ovSwgHfVE1j95Vzrqo8taH33tef5s9ZUX+8/L9RlL3VSfU0+97LpmIBvvtxnYblDtCYILecFgpQPeY4FqI5DPNkvPgI3priasGWzrwrrDljasOcjnnC8HT10OvnyNId09hsWnWItDcPNsBl/+PE/b2sD3doHvbUII9zZhbVVKtirScqC31eeeVTF6mle1nvtHfGho9TH31Icw1y/uKmFlDpPNYM495d6FeUkKXQbJGiBf67oMgs2AJ+oxKPO+Xu6bgBR66ufbR+6qzzzXdwV47n/kuFRP5a4ArZVvCtCqwZYArRpsCdCawV8L0G8T8ChH+5fD+X8/pdzgdD7sn4+jHr5dTy/fzl7+/bAz9lPMx/n9ZXy9nkc4ff0eI39+RPn2KmvQo3xSlyMvq5GPOPI4SZV2VBmHHte6tIuuPN4wtP8A", + "bytecode": "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", + "debug_symbols": "rZjdbuIwEIXfJddc2B7/9lWqqqI0XSEhQCmstKp4950Tz4T2IlHW7A3nC2FOnPGJDXx17/3b9dfr/vhx+uyenr+6t2F/OOx/vR5Ou+1lfzryu1+dwYsNsXuyG9YkmkVL1WhEragTJVHfPTloEI2iSTSLlqrJiFpR9iMoiXrRIBpFk2gWLVWzEbWi4pfZL0C9aBCNokk0i5aqxYhaUScqfkX8ivgV8SviV8SvVD9nqp+z/PkI5fMJyuc9qzOiVtSJkqgXDaJRlK9XoFm0VCXMlwFYBadACl4hKESFJODVx6PKArgqQ4NoFEUJAbJCEQgwwWiDVXAKpOAVgkJUSAJRfcbUoZ2InXWAoBAVsn4Yw0DPkbkKVgHDwDQgdhW8AgzRSSRvvBaiVyELZO0t0uZGIAWvgAcCfUPiKiQFPBPoD0I39hapq2AV4IO7QNAqwAdXR9R4pGRcfYMMKaAoAoJCVMDFebrI4gEsADxxBuAVgkJUwFPGwyHEtIJVcAp4Mh0gKxQBhLECrkUArxAUokJSgI8HFAGEsYJVcAqk4BXgjG4goBWSApzROuSR0A2kj9ANpK9CVEgCSJ9HN7AGVnAKpMDOHt1A6EZA6CpYBTzK6AYiViEqJIWsAB90AwtcBavgFKgGAZkbNYhGUQlKzqKlKtKWbrdNp/vB62Xoe2wH3zYI3jbO26E/Xrqn4/Vw2HS/t4fr+KHP8/Y46mU78Fm+/f74zsqGH/tDD7pt7tVmvjSbLMXZ0VQe1te7pPWUG+pT1sHnkBrqC/I61pdg5+r9fD2vH1LPC0hDPZH2j5+VhnpvotR7W1ruP2p9ybP9z/P1EUvdWB9DSz3vumrAG++3GVhvUPQOnHFxxmChA9Zizakj4O82c/eAjemhJiwZrOvCssOaNiw58Pecu4OlJgeb7mMID49h9i6W4uDMNJvOpn/P07o25Ee7kB9tgnOPNmFpVQq6KtJ8oNfVx5ZV0WOvr6uajy31zk31s7sCdp45g6AzEGNLuTVuWlJck0HQBvDPsiYDpzNgiVoM0rQvp8cmILiW+unyPjfVxzzVNwVw6r/Pfq6e4kMBWipfFaBFgzUBWjRYE6Alg/8WoPkJWKq3NH0v+rmCvfDRdrcffvyVcoPTsN++HXo5/Lged9/OXv6c9Yz+FXMeTrv+/Tr0cLr/H8Mvz55/vfIa9sLf1PnI8mpmPY7wy+2ZCm2oZBxafNaEjTfp5Yah/QU=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 02e4ebbd9b8..376eba4d04b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+2azW7bOBDHqViyLduJ3aTtbrDAPsCeLEu2nMMCAbrYF9gHWMhyDOylXRQFWqBAoR6KXnor0L5uy5Qj/T0aJf0Ytj6UQCCKHP7mg+SIkhOYpgTuGrJ7I8hcuuv820qiyJqLht5USOZ3V4nd/RH09xSdjZleTf56ni1jwT9F+9PYMX3Gh5ge+POB4/xVNXzui4EryfExtv/Y1XGdkczQ9VN96uoxG+Nj/j3Oz/xMsP8IfLPlQdX0GUXdYxfLxyyWNFeKuup1GOqzF8SO9Nn1/uzrszNiD/TZS9pLQ2AHbJ4xdyqu6VXA9Bmzn38M0z9itmrnwIDpI3t4fGjfUexGgq0zoQ99wz7UMxL0SKxQkRUpsvqKLFrvU9OOH80HzxfaeTdgMQrBD66T/OExxXwTsbY/3NX68wzG8PzaE9p47Pi+wPj4eq7Hgr+K/CXPq9qHYH+5dT33nD8Tyj/SOcrGK4V2XK+RadYTjo2gH+VzYK5c3Z4Jpqa9D/i+HPnxvd6XY8fDfSnlySMmj3X0mdr+dFdpX+LZpCe03bQvw89gSWc87m+/Qz7s8OcB+PO8gxkZObdFHcy/gfnC1ens3aua8bgmbAmhT/M8YfW8BDtac1zt+z2Bvp4gz2N/LMhPQIZiNmPy0rMMx40hPnycjz1z4ni4Z1DnBPxHeazbErG2f9xV2jOTG2JHujB2Y8Ge2LRjpxifq2PBRyrUNwXdfdY3gz60n5ceu0efbOzeA5fLYR3H4VxKz4OIyT9yV+vDv4zJczbPB3GHDZiTUCbssKE0jc+/BftM6VklnVn5s2oHzBcddhqjs9/JHuk5iGNRNhJkB0b2PRTG20Lv+Zz10F1j016DmnnkFLjGtJ9Ljzr8MUZeo7RWpPNMCNwU/LuOT6XvX77+lCevba2aOPM9i/ojJv/U3eN6RX8uv9LOXV4ku7TYFctiu83Kgs+DgdiNPegv8nRdLrIy3yzTIl19d/3ZssjLIk+Siyy5ypLl99ZfLleb8qMR86vE3i5u00/Pin7V9OO5yJaBu6f8zeWJFzH5VyT78e+1q1POiQR9Vu7dDXJBx/WaIbSF1X5bXLXle1VbnnSPqraN1DeGPjyz2TJx9xgvZJEdEZN/6+5pToYwhsbPBP1Dpn/PbqENcxdn9YQ2krfz84Z47oq+a3/nutbJ+NjGbaO1c9u3YMr5lyq25hvp+44ef7GQvl/o8Vcb6fuFIv+Cf79Q5l8Rf+iHn0nfSPT4aSF9h1C0P5HOWorrfyG98yjyL6R3TsX9VRL/xE/8a/7UD7/+/jjzw8+Jf8fP/Nb769SP/Wvin3nhp3X87/qJT/2N9p6f+KyIf9+P/Vt6Z/rFNKU+k7n6r9Cud45Is885K6L+EbPVx7kG9ZE9PD7897tzwdaZ0MfPOOeCnnNBj8QKFVmRIquvyBoosoaKLM3Yxwdq10iRNT5QlqaPE0WW5jweH6hdJ4qsqSJLM+fMFFl3FFmniqxDzYVniqxD3UOaa0Izf91VZGnu7UNdqz/PhT8uR/88F34Z654iS3NNaOYJzbPJoa6v+x5Z0v8dHgmsgPmF8tL7tn1GUU76//F/D58YVhBEcMmwqMOAlPHoh3LO5XzTweW2pALHxw+Ni/V6dbHYzLN8W+62WXrbD40fAOfF/BJKNAAA", - "debug_symbols": "pdbdTupQEIbhe+kxB51Zf7O8FWMMajUkBAjCTnYM977X6vRF94GJwRO/D3GeInRaPoaX6en89rjZve7fh7v7j+HpuNluN2+P2/3z+rTZ79pvP4ax/5A83MlqkOJhHnUOHT3EQz2CR/RIHq6oK+qKuhJcCa4EV4IrwZXgSmiKtige5lHniKOHeKhHmCO1X4YWyR+5klxJriRXsivZlexKbkpsET2SR/ZoSmphHnWO0pTcQjzUI3hEj+SRPYqHedQ5zBVzxVwxV8wVa4q1yB7FwzzqHHX0EI+m1Bb9/Rxb5iXLkrZk9ZRxpAilfz79FBgDJVK6qr1kSqEYpS5FZCmpg6GXQImURMmUQjFKXUr/6LwIBTkjZ+SMnJEzckbOyAW5IBfkglyQC3JBLsgFuSAbsiEbsiEbsiEbsiEbsiFX5IpckStyRa7IFbkiV+S6yDqOFKEoJVAiJVEypVCMgizIgizIgizIgizIgizIgqzIiqzIiqzIiqzIiqzIihyQA3JADsgBOSAH5IAckANyRI7IETkiR+SIHJEjckSOyAk5IbODyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jzDsZ+LxopXY6Xy2rgLvh4Ok5Tvwl+uS22m+VhfZx2p+Fud95uV8Of9fY8/9H7Yb2b87Q+tmfbxXLavbRs4OtmO/V2WX1Oj9+PJltmU70Opx9Pi5RlXMRumC91GbfxlqMH5eih3DIfhfkYb5nXej3+Lf99u/swn9N38+X7eau8/qrhOq/64+Nf3/52wb/h9atw4rXL3y3zI2dPu2r+cv6Wz/+371+JHL98OX/7/EN7tH7eHP/7knvp0nGzftpOy8PX8+75y7Onvwee4Uvy4bh/nl7Ox6lLn9+U24/7fvZJGh/6N53+sF1YRGp/2C4u92phpZYeLv3F/AM=", + "debug_symbols": "pdbdTupQEIbhe+kxB51Zf7O8FWMMajUkBAjCTnYM977X6vRF94GJwRO/r+A8EMq0fAwv09P57XGze92/D3f3H8PTcbPdbt4et/vn9Wmz37VHP4ax/5E83MlqkOJhHnUOHT3EQz2CR/RIHq6oK+qKuhJcCa4EV4IrwZXgSmiKtige5lHniKOHeKhHmCO1B0OL5EeuJFeSK8mV7Ep2JbuSmxJbRI/kkT2Kh3nUOUpTUgvxUI/gET2SR/YoHuZR5zBXzBVzxVwxV6wppUX2KB7mUeeoo4d4NMVatLnaInsUD/Ooc8g4LilL9hMz9hIokdJPT/9ajJlSKEapSxFZSuqg9hIokZIomVIoRqlL6efMi1CQM3JGzsgZOSNn5IxckAtyQS7IBbkgF+SCXJALsiEbsiEbsiEbsiEbsiEbckWuyBW5IlfkilyRK3JFrous40gRilICJVISJVMKxSjIgizIgizIgizIgizIgizIiqzIiqzIiqzIiqzIiqzIATkgB+SAHJADckAOyAE5IEfkiByRI3JEjsgROSJH5IickBMyO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDOu9g6DehkdLlcLmsBm5/j6fjNPW735f7YbtLHtbHaXca7nbn7XY1/Flvz/M/vR/WuzlP62N7tl0Rp91Lywa+brZTb5fV5/T4/WiyZTbV63D68bRIWcZF7Ib5UpdxG2959aC8eii3zGu9zt/y7tvdg/mcvpvP389blWW+arjOq/749a8fX7tg3/D+VfjitMvXLfMjZ79d9X45f8v5++3nVyKvX758//r8QztaP2+O//06vXTpuFk/bafl8PW8e/7y7OnvgWf4dXs47p+nl/Nx6tLnT9z2575/+ySND/2XSj+UuBKp/bBdHO7VwkotPVz6m/kH", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_0.snap index 3d7eaeaebcb..e9ba684dcf9 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_0.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1azW7TQBBe13YaO0kTKBTaigfgZsdOnN564EWcpJW4IIR4AD8TEpw4IfECHDlyQOIIEheQELjsOF8m4/A3CzmwUrTr3dlvfnZ2PNm1Z1bFs3XAno1Ac27r5M9KqoiViIJuK0RzxzYi+7wH476ishHjq4k/S/JJJOinKH8WWUyX9iFMB/jJvsW5V63wuS4GaqLjc+rxgW2jnxFN145T+8C2IzbHxfo7XJ/kUJCfePWsrh+Zrj7YR0mOxk8CfewxYYf62M3+6ehj54S9r489IV/vArbH1hljm6LPTT3Gz5j1+GAY/5jJqh2jPMaP5OH2oX1BtosFWUfCGOqGY8gnFvhIWIEiVqiI1VHEIn8fmk370XrweKEdFz1mowD04DxJH25TjDch67tr61qfzzCHx1df6OO24/sC7cN971zFPsU8MrIP6eCPxzyu6uJP5zy2KuOfSTFUEf+C8GM3+M27p+cEPysJv+9G/iafGLjx/8Y/D9zgN/4zdII/XhD+yI39G/xrbvCbvPi6G/yC8A/drG+zv264kX9G+Ded4GeN/Y/c2Cch/Ftu7DMl/Ntu5F9SjnhsVoXn1yfQr5e7ZPnP5tfEP2ayusqvT5g83D48vz4VZB0JYzzHORX4nAp8JKxQEaujiLWviBUpYsWKWJq27+2oXH1FrMGOYmnqeKCIpbmOwx2Va6SIdU0RSzPmXFfEOlTEuqGItaux8KYi1q7uIU2f0IxfR4pYmnt7V331f17472L0/7zw17BuKWJp+oRmnNDMTXbVv247wHJ9hy6d5SviT6SzfKOHn7q7J50lju9CU+kcX9E2CZ2lSN9E1OvxBPrrH91thWblrzg3hHGkfwaYT227jrVDRle3+R1ez41tmzs8+j+Kd3jIk2TbY/TYRp2p77mtpTs8/I7BF/q23eEFP4HlAc0eoyf5Oi30QYs+L0CfLy2YoZHvQcMWzJeA6Vkh6KzBr1bz0SfqEsCY5rcHNZ8A5NhY42pd7wGM+QI9t/2BQI9nK2SzEaPH+DUU5vXBPnyeiz1D/81wzyDPAeiP9NiuS8j6Xtla2jODLbYjXmi7viCPZLtjZruhY9uNBNsNt9gO8yJqo+2o77XRs92xIM/v+vxIoJfO9ftmFScePrr/4LFhBQMdTxhQsLBFgIzNj1twcS6WsGWMnrMtOAPgJb04feCB9B9sXev6hmHyFyMPulGLDBj4kSZokeGtrWvHOvHWMaWEAOVqSwjeAabnyXIaoxNUSR4p2cC5SBsKtPyPE40Fwnz0L4713tbSRw6aAQcPQo3ZfPl/aNHHGNlHyVekpDEA3Ceg35V9Kn39itn3gHola7WyM34IZRj/kNF/ss88uSZ9zn9TzsuiTC+z8rKclMtlvij5Ohiz/hGtNv+yyGaLcb4o5pOszKZ/nX8+KYtFWaTpWZ5e5Onkb/NfTKbzxTchkou0fhz/iD+9fDvVahyTz7rs22eK35ye8EJG37UA9b6Ibbt5Twn8arrjLXReS32FIfQF1XpfVG3S+9UmPfGOq00ZaawHYyHj07fPaC/EIjlCRn9kAWhNujCH5o8E/l3Gf01uoQ9jF8fyhT6ir9dnaCc18R14a38YccWT4WMfl418x8W+Gs9m07PxPMmL5eJymWc/2ldfATd8RiZqNAAA", - "debug_symbols": "pZbNbuJAEITfxWcOrp7/vMoqikjiREgIkAMrrSLefWdcNSQ5EEXkwtfG9MfYLrf9PjxPj6fXh83uZf823P15Hx7nzXa7eX3Y7p/Wx81+V799H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5h24A6A5Ai3JsU4e3M1puF3oxiFFMYhY5G9DimxohmujE6suNQYxi9ZXGLJaF1nK8EKKJTvRiEKOYxCzKB/kgn3JsyrEpx6Ycm3JsyrEpx6Yc2zKYx1agF9aLNliXad1GsrUi9SL3oqhYRvNSoBfWi+ZxrfC9CL1oZt+K1Ivci6KiJZlFE/rzeTX0R9DDcZ6m9gT69EyqT6rDep52x+Fud9puV8Pf9fa0/OjtsN4tPK7nurce4rR7rqzCl812atV59dE9Xm8NWb2hXJrDj7vrTFF7nSq39Aff+2O41u+u9+cC9Rdzl36zL/3+l/3frD8VtefxlqN31o/epVv6fV99nYG39Fu5/P/Vq/fN2Uu+X/306fh/fvZwOX11pt2wfkMPfp0Bt/SPff11dvyy/+v1u69b66fN/OUN89xM82b9uJ20+XLaPX3ae/x36Hv6G+ph3j9Nz6d5aqaP19T68cfiuLKM+/Zm0DZ9WFkY2ybaZra619+f22L+Aw==", + "debug_symbols": "pZbdTioxFIXfZa65mLX776ucGIM6GhICZISTnBje/bSzVlEvMAZv+HYd95cWVtt5H56nx9Prw2b3sn8b7v68D4/zZrvdvD5s90/r42a/q399H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5hzYAtAPQohzbqcPtjJbbhV4MYhSTmEWeDWjxTY0QTXSiF4MYxerLjVksC63leCFEE53oxSBGMYlZlA/yQT7l2JRjU45NOTbl2JRjU45NObaW49II0cR2qo6taOfxcmanXuReFBXLubwU6IX1onmsFb4XoRfN7FqRepF7UVS0GLNoQnc+r4Z+/zwc52lq18+nC6leU4f1PO2Ow93utN2uhr/r7Wn5p7fDerfwuJ7r07qyafdcWYUvm+3UqvPqo3u83hqyekO5NIcfd9cDRe31SLmlP/jeH8O1fne9Pxeov5i79Jt96fe/7P9m/qmoPY+3rN5ZX71Lt/RbufRf/fa/WX3y/ddLn+b/89Xjsvx6IN0wf0MPbt3At/SPff514/+y/+v3f19H66fN/OX18NxM82b9uJ00fDntnj49Pf479Cf99fIw75+m59M8NdPHO2b9+GNxXFnGfbvW29CHlYWxDdGG2epTf39uk/kP", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 3d7eaeaebcb..e9ba684dcf9 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1azW7TQBBe13YaO0kTKBTaigfgZsdOnN564EWcpJW4IIR4AD8TEpw4IfECHDlyQOIIEheQELjsOF8m4/A3CzmwUrTr3dlvfnZ2PNm1Z1bFs3XAno1Ac27r5M9KqoiViIJuK0RzxzYi+7wH476ishHjq4k/S/JJJOinKH8WWUyX9iFMB/jJvsW5V63wuS4GaqLjc+rxgW2jnxFN145T+8C2IzbHxfo7XJ/kUJCfePWsrh+Zrj7YR0mOxk8CfewxYYf62M3+6ehj54S9r489IV/vArbH1hljm6LPTT3Gz5j1+GAY/5jJqh2jPMaP5OH2oX1BtosFWUfCGOqGY8gnFvhIWIEiVqiI1VHEIn8fmk370XrweKEdFz1mowD04DxJH25TjDch67tr61qfzzCHx1df6OO24/sC7cN971zFPsU8MrIP6eCPxzyu6uJP5zy2KuOfSTFUEf+C8GM3+M27p+cEPysJv+9G/iafGLjx/8Y/D9zgN/4zdII/XhD+yI39G/xrbvCbvPi6G/yC8A/drG+zv264kX9G+Ded4GeN/Y/c2Cch/Ftu7DMl/Ntu5F9SjnhsVoXn1yfQr5e7ZPnP5tfEP2ayusqvT5g83D48vz4VZB0JYzzHORX4nAp8JKxQEaujiLWviBUpYsWKWJq27+2oXH1FrMGOYmnqeKCIpbmOwx2Va6SIdU0RSzPmXFfEOlTEuqGItaux8KYi1q7uIU2f0IxfR4pYmnt7V331f17472L0/7zw17BuKWJp+oRmnNDMTXbVv247wHJ9hy6d5SviT6SzfKOHn7q7J50lju9CU+kcX9E2CZ2lSN9E1OvxBPrrH91thWblrzg3hHGkfwaYT227jrVDRle3+R1ez41tmzs8+j+Kd3jIk2TbY/TYRp2p77mtpTs8/I7BF/q23eEFP4HlAc0eoyf5Oi30QYs+L0CfLy2YoZHvQcMWzJeA6Vkh6KzBr1bz0SfqEsCY5rcHNZ8A5NhY42pd7wGM+QI9t/2BQI9nK2SzEaPH+DUU5vXBPnyeiz1D/81wzyDPAeiP9NiuS8j6Xtla2jODLbYjXmi7viCPZLtjZruhY9uNBNsNt9gO8yJqo+2o77XRs92xIM/v+vxIoJfO9ftmFScePrr/4LFhBQMdTxhQsLBFgIzNj1twcS6WsGWMnrMtOAPgJb04feCB9B9sXev6hmHyFyMPulGLDBj4kSZokeGtrWvHOvHWMaWEAOVqSwjeAabnyXIaoxNUSR4p2cC5SBsKtPyPE40Fwnz0L4713tbSRw6aAQcPQo3ZfPl/aNHHGNlHyVekpDEA3Ceg35V9Kn39itn3gHola7WyM34IZRj/kNF/ss88uSZ9zn9TzsuiTC+z8rKclMtlvij5Ohiz/hGtNv+yyGaLcb4o5pOszKZ/nX8+KYtFWaTpWZ5e5Onkb/NfTKbzxTchkou0fhz/iD+9fDvVahyTz7rs22eK35ye8EJG37UA9b6Ibbt5Twn8arrjLXReS32FIfQF1XpfVG3S+9UmPfGOq00ZaawHYyHj07fPaC/EIjlCRn9kAWhNujCH5o8E/l3Gf01uoQ9jF8fyhT6ir9dnaCc18R14a38YccWT4WMfl418x8W+Gs9m07PxPMmL5eJymWc/2ldfATd8RiZqNAAA", - "debug_symbols": "pZbNbuJAEITfxWcOrp7/vMoqikjiREgIkAMrrSLefWdcNSQ5EEXkwtfG9MfYLrf9PjxPj6fXh83uZf823P15Hx7nzXa7eX3Y7p/Wx81+V799H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5h24A6A5Ai3JsU4e3M1puF3oxiFFMYhY5G9DimxohmujE6suNQYxi9ZXGLJaF1nK8EKKJTvRiEKOYxCzKB/kgn3JsyrEpx6Ycm3JsyrEpx6Yc2zKYx1agF9aLNliXad1GsrUi9SL3oqhYRvNSoBfWi+ZxrfC9CL1oZt+K1Ivci6KiJZlFE/rzeTX0R9DDcZ6m9gT69EyqT6rDep52x+Fud9puV8Pf9fa0/OjtsN4tPK7nurce4rR7rqzCl812atV59dE9Xm8NWb2hXJrDj7vrTFF7nSq39Aff+2O41u+u9+cC9Rdzl36zL/3+l/3frD8VtefxlqN31o/epVv6fV99nYG39Fu5/P/Vq/fN2Uu+X/306fh/fvZwOX11pt2wfkMPfp0Bt/SPff11dvyy/+v1u69b66fN/OUN89xM82b9uJ20+XLaPX3ae/x36Hv6G+ph3j9Nz6d5aqaP19T68cfiuLKM+/Zm0DZ9WFkY2ybaZra619+f22L+Aw==", + "debug_symbols": "pZbdTioxFIXfZa65mLX776ucGIM6GhICZISTnBje/bSzVlEvMAZv+HYd95cWVtt5H56nx9Prw2b3sn8b7v68D4/zZrvdvD5s90/r42a/q399H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5hzYAtAPQohzbqcPtjJbbhV4MYhSTmEWeDWjxTY0QTXSiF4MYxerLjVksC63leCFEE53oxSBGMYlZlA/yQT7l2JRjU45NOTbl2JRjU45NObaW49II0cR2qo6taOfxcmanXuReFBXLubwU6IX1onmsFb4XoRfN7FqRepF7UVS0GLNoQnc+r4Z+/zwc52lq18+nC6leU4f1PO2Ow93utN2uhr/r7Wn5p7fDerfwuJ7r07qyafdcWYUvm+3UqvPqo3u83hqyekO5NIcfd9cDRe31SLmlP/jeH8O1fne9Pxeov5i79Jt96fe/7P9m/qmoPY+3rN5ZX71Lt/RbufRf/fa/WX3y/ddLn+b/89Xjsvx6IN0wf0MPbt3At/SPff514/+y/+v3f19H66fN/OX18NxM82b9uJ00fDntnj49Pf479Cf99fIw75+m59M8NdPHO2b9+GNxXFnGfbvW29CHlYWxDdGG2epTf39uk/kP", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 02e4ebbd9b8..376eba4d04b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+2azW7bOBDHqViyLduJ3aTtbrDAPsCeLEu2nMMCAbrYF9gHWMhyDOylXRQFWqBAoR6KXnor0L5uy5Qj/T0aJf0Ytj6UQCCKHP7mg+SIkhOYpgTuGrJ7I8hcuuv820qiyJqLht5USOZ3V4nd/RH09xSdjZleTf56ni1jwT9F+9PYMX3Gh5ge+POB4/xVNXzui4EryfExtv/Y1XGdkczQ9VN96uoxG+Nj/j3Oz/xMsP8IfLPlQdX0GUXdYxfLxyyWNFeKuup1GOqzF8SO9Nn1/uzrszNiD/TZS9pLQ2AHbJ4xdyqu6VXA9Bmzn38M0z9itmrnwIDpI3t4fGjfUexGgq0zoQ99wz7UMxL0SKxQkRUpsvqKLFrvU9OOH80HzxfaeTdgMQrBD66T/OExxXwTsbY/3NX68wzG8PzaE9p47Pi+wPj4eq7Hgr+K/CXPq9qHYH+5dT33nD8Tyj/SOcrGK4V2XK+RadYTjo2gH+VzYK5c3Z4Jpqa9D/i+HPnxvd6XY8fDfSnlySMmj3X0mdr+dFdpX+LZpCe03bQvw89gSWc87m+/Qz7s8OcB+PO8gxkZObdFHcy/gfnC1ens3aua8bgmbAmhT/M8YfW8BDtac1zt+z2Bvp4gz2N/LMhPQIZiNmPy0rMMx40hPnycjz1z4ni4Z1DnBPxHeazbErG2f9xV2jOTG2JHujB2Y8Ge2LRjpxifq2PBRyrUNwXdfdY3gz60n5ceu0efbOzeA5fLYR3H4VxKz4OIyT9yV+vDv4zJczbPB3GHDZiTUCbssKE0jc+/BftM6VklnVn5s2oHzBcddhqjs9/JHuk5iGNRNhJkB0b2PRTG20Lv+Zz10F1j016DmnnkFLjGtJ9Ljzr8MUZeo7RWpPNMCNwU/LuOT6XvX77+lCevba2aOPM9i/ojJv/U3eN6RX8uv9LOXV4ku7TYFctiu83Kgs+DgdiNPegv8nRdLrIy3yzTIl19d/3ZssjLIk+Siyy5ypLl99ZfLleb8qMR86vE3i5u00/Pin7V9OO5yJaBu6f8zeWJFzH5VyT78e+1q1POiQR9Vu7dDXJBx/WaIbSF1X5bXLXle1VbnnSPqraN1DeGPjyz2TJx9xgvZJEdEZN/6+5pToYwhsbPBP1Dpn/PbqENcxdn9YQ2krfz84Z47oq+a3/nutbJ+NjGbaO1c9u3YMr5lyq25hvp+44ef7GQvl/o8Vcb6fuFIv+Cf79Q5l8Rf+iHn0nfSPT4aSF9h1C0P5HOWorrfyG98yjyL6R3TsX9VRL/xE/8a/7UD7/+/jjzw8+Jf8fP/Nb769SP/Wvin3nhp3X87/qJT/2N9p6f+KyIf9+P/Vt6Z/rFNKU+k7n6r9Cud45Is885K6L+EbPVx7kG9ZE9PD7897tzwdaZ0MfPOOeCnnNBj8QKFVmRIquvyBoosoaKLM3Yxwdq10iRNT5QlqaPE0WW5jweH6hdJ4qsqSJLM+fMFFl3FFmniqxDzYVniqxD3UOaa0Izf91VZGnu7UNdqz/PhT8uR/88F34Z654iS3NNaOYJzbPJoa6v+x5Z0v8dHgmsgPmF8tL7tn1GUU76//F/D58YVhBEcMmwqMOAlPHoh3LO5XzTweW2pALHxw+Ni/V6dbHYzLN8W+62WXrbD40fAOfF/BJKNAAA", - "debug_symbols": "pdbdTupQEIbhe+kxB51Zf7O8FWMMajUkBAjCTnYM977X6vRF94GJwRO/D3GeInRaPoaX6en89rjZve7fh7v7j+HpuNluN2+P2/3z+rTZ79pvP4ax/5A83MlqkOJhHnUOHT3EQz2CR/RIHq6oK+qKuhJcCa4EV4IrwZXgSmiKtige5lHniKOHeKhHmCO1X4YWyR+5klxJriRXsivZlexKbkpsET2SR/ZoSmphHnWO0pTcQjzUI3hEj+SRPYqHedQ5zBVzxVwxV8wVa4q1yB7FwzzqHHX0EI+m1Bb9/Rxb5iXLkrZk9ZRxpAilfz79FBgDJVK6qr1kSqEYpS5FZCmpg6GXQImURMmUQjFKXUr/6LwIBTkjZ+SMnJEzckbOyAW5IBfkglyQC3JBLsgFuSAbsiEbsiEbsiEbsiEbsiFX5IpckStyRa7IFbkiV+S6yDqOFKEoJVAiJVEypVCMgizIgizIgizIgizIgizIgqzIiqzIiqzIiqzIiqzIihyQA3JADsgBOSAH5IAckANyRI7IETkiR+SIHJEjckSOyAk5IbODyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jzDsZ+LxopXY6Xy2rgLvh4Ok5Tvwl+uS22m+VhfZx2p+Fud95uV8Of9fY8/9H7Yb2b87Q+tmfbxXLavbRs4OtmO/V2WX1Oj9+PJltmU70Opx9Pi5RlXMRumC91GbfxlqMH5eih3DIfhfkYb5nXej3+Lf99u/swn9N38+X7eau8/qrhOq/64+Nf3/52wb/h9atw4rXL3y3zI2dPu2r+cv6Wz/+371+JHL98OX/7/EN7tH7eHP/7knvp0nGzftpOy8PX8+75y7Onvwee4Uvy4bh/nl7Ox6lLn9+U24/7fvZJGh/6N53+sF1YRGp/2C4u92phpZYeLv3F/AM=", + "debug_symbols": "pdbdTupQEIbhe+kxB51Zf7O8FWMMajUkBAjCTnYM977X6vRF94GJwRO/r+A8EMq0fAwv09P57XGze92/D3f3H8PTcbPdbt4et/vn9Wmz37VHP4ax/5E83MlqkOJhHnUOHT3EQz2CR/RIHq6oK+qKuhJcCa4EV4IrwZXgSmiKtige5lHniKOHeKhHmCO1B0OL5EeuJFeSK8mV7Ep2JbuSmxJbRI/kkT2Kh3nUOUpTUgvxUI/gET2SR/YoHuZR5zBXzBVzxVwxV6wppUX2KB7mUeeoo4d4NMVatLnaInsUD/Ooc8g4LilL9hMz9hIokdJPT/9ajJlSKEapSxFZSuqg9hIokZIomVIoRqlL6efMi1CQM3JGzsgZOSNn5IxckAtyQS7IBbkgF+SCXJALsiEbsiEbsiEbsiEbsiEbckWuyBW5IlfkilyRK3JFrous40gRilICJVISJVMKxSjIgizIgizIgizIgizIgizIiqzIiqzIiqzIiqzIiqzIATkgB+SAHJADckAOyAE5IEfkiByRI3JEjsgROSJH5IickBMyO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDyg4qO6jsoLKDOu9g6DehkdLlcLmsBm5/j6fjNPW735f7YbtLHtbHaXca7nbn7XY1/Flvz/M/vR/WuzlP62N7tl0Rp91Lywa+brZTb5fV5/T4/WiyZTbV63D68bRIWcZF7Ib5UpdxG2959aC8eii3zGu9zt/y7tvdg/mcvpvP389blWW+arjOq/749a8fX7tg3/D+VfjitMvXLfMjZ79d9X45f8v5++3nVyKvX758//r8QztaP2+O//06vXTpuFk/bafl8PW8e/7y7OnvgWf4dXs47p+nl/Nx6tLnT9z2575/+ySND/2XSj+UuBKp/bBdHO7VwkotPVz6m/kH", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_0.snap index 3d7eaeaebcb..e9ba684dcf9 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_0.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1azW7TQBBe13YaO0kTKBTaigfgZsdOnN564EWcpJW4IIR4AD8TEpw4IfECHDlyQOIIEheQELjsOF8m4/A3CzmwUrTr3dlvfnZ2PNm1Z1bFs3XAno1Ac27r5M9KqoiViIJuK0RzxzYi+7wH476ishHjq4k/S/JJJOinKH8WWUyX9iFMB/jJvsW5V63wuS4GaqLjc+rxgW2jnxFN145T+8C2IzbHxfo7XJ/kUJCfePWsrh+Zrj7YR0mOxk8CfewxYYf62M3+6ehj54S9r489IV/vArbH1hljm6LPTT3Gz5j1+GAY/5jJqh2jPMaP5OH2oX1BtosFWUfCGOqGY8gnFvhIWIEiVqiI1VHEIn8fmk370XrweKEdFz1mowD04DxJH25TjDch67tr61qfzzCHx1df6OO24/sC7cN971zFPsU8MrIP6eCPxzyu6uJP5zy2KuOfSTFUEf+C8GM3+M27p+cEPysJv+9G/iafGLjx/8Y/D9zgN/4zdII/XhD+yI39G/xrbvCbvPi6G/yC8A/drG+zv264kX9G+Ded4GeN/Y/c2Cch/Ftu7DMl/Ntu5F9SjnhsVoXn1yfQr5e7ZPnP5tfEP2ayusqvT5g83D48vz4VZB0JYzzHORX4nAp8JKxQEaujiLWviBUpYsWKWJq27+2oXH1FrMGOYmnqeKCIpbmOwx2Va6SIdU0RSzPmXFfEOlTEuqGItaux8KYi1q7uIU2f0IxfR4pYmnt7V331f17472L0/7zw17BuKWJp+oRmnNDMTXbVv247wHJ9hy6d5SviT6SzfKOHn7q7J50lju9CU+kcX9E2CZ2lSN9E1OvxBPrrH91thWblrzg3hHGkfwaYT227jrVDRle3+R1ez41tmzs8+j+Kd3jIk2TbY/TYRp2p77mtpTs8/I7BF/q23eEFP4HlAc0eoyf5Oi30QYs+L0CfLy2YoZHvQcMWzJeA6Vkh6KzBr1bz0SfqEsCY5rcHNZ8A5NhY42pd7wGM+QI9t/2BQI9nK2SzEaPH+DUU5vXBPnyeiz1D/81wzyDPAeiP9NiuS8j6Xtla2jODLbYjXmi7viCPZLtjZruhY9uNBNsNt9gO8yJqo+2o77XRs92xIM/v+vxIoJfO9ftmFScePrr/4LFhBQMdTxhQsLBFgIzNj1twcS6WsGWMnrMtOAPgJb04feCB9B9sXev6hmHyFyMPulGLDBj4kSZokeGtrWvHOvHWMaWEAOVqSwjeAabnyXIaoxNUSR4p2cC5SBsKtPyPE40Fwnz0L4713tbSRw6aAQcPQo3ZfPl/aNHHGNlHyVekpDEA3Ceg35V9Kn39itn3gHola7WyM34IZRj/kNF/ss88uSZ9zn9TzsuiTC+z8rKclMtlvij5Ohiz/hGtNv+yyGaLcb4o5pOszKZ/nX8+KYtFWaTpWZ5e5Onkb/NfTKbzxTchkou0fhz/iD+9fDvVahyTz7rs22eK35ye8EJG37UA9b6Ibbt5Twn8arrjLXReS32FIfQF1XpfVG3S+9UmPfGOq00ZaawHYyHj07fPaC/EIjlCRn9kAWhNujCH5o8E/l3Gf01uoQ9jF8fyhT6ir9dnaCc18R14a38YccWT4WMfl418x8W+Gs9m07PxPMmL5eJymWc/2ldfATd8RiZqNAAA", - "debug_symbols": "pZbNbuJAEITfxWcOrp7/vMoqikjiREgIkAMrrSLefWdcNSQ5EEXkwtfG9MfYLrf9PjxPj6fXh83uZf823P15Hx7nzXa7eX3Y7p/Wx81+V799H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5h24A6A5Ai3JsU4e3M1puF3oxiFFMYhY5G9DimxohmujE6suNQYxi9ZXGLJaF1nK8EKKJTvRiEKOYxCzKB/kgn3JsyrEpx6Ycm3JsyrEpx6Yc2zKYx1agF9aLNliXad1GsrUi9SL3oqhYRvNSoBfWi+ZxrfC9CL1oZt+K1Ivci6KiJZlFE/rzeTX0R9DDcZ6m9gT69EyqT6rDep52x+Fud9puV8Pf9fa0/OjtsN4tPK7nurce4rR7rqzCl812atV59dE9Xm8NWb2hXJrDj7vrTFF7nSq39Aff+2O41u+u9+cC9Rdzl36zL/3+l/3frD8VtefxlqN31o/epVv6fV99nYG39Fu5/P/Vq/fN2Uu+X/306fh/fvZwOX11pt2wfkMPfp0Bt/SPff11dvyy/+v1u69b66fN/OUN89xM82b9uJ20+XLaPX3ae/x36Hv6G+ph3j9Nz6d5aqaP19T68cfiuLKM+/Zm0DZ9WFkY2ybaZra619+f22L+Aw==", + "debug_symbols": "pZbdTioxFIXfZa65mLX776ucGIM6GhICZISTnBje/bSzVlEvMAZv+HYd95cWVtt5H56nx9Prw2b3sn8b7v68D4/zZrvdvD5s90/r42a/q399H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5hzYAtAPQohzbqcPtjJbbhV4MYhSTmEWeDWjxTY0QTXSiF4MYxerLjVksC63leCFEE53oxSBGMYlZlA/yQT7l2JRjU45NOTbl2JRjU45NObaW49II0cR2qo6taOfxcmanXuReFBXLubwU6IX1onmsFb4XoRfN7FqRepF7UVS0GLNoQnc+r4Z+/zwc52lq18+nC6leU4f1PO2Ow93utN2uhr/r7Wn5p7fDerfwuJ7r07qyafdcWYUvm+3UqvPqo3u83hqyekO5NIcfd9cDRe31SLmlP/jeH8O1fne9Pxeov5i79Jt96fe/7P9m/qmoPY+3rN5ZX71Lt/RbufRf/fa/WX3y/ddLn+b/89Xjsvx6IN0wf0MPbt3At/SPff514/+y/+v3f19H66fN/OX18NxM82b9uJ00fDntnj49Pf479Cf99fIw75+m59M8NdPHO2b9+GNxXFnGfbvW29CHlYWxDdGG2epTf39uk/kP", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 3d7eaeaebcb..e9ba684dcf9 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dedup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1azW7TQBBe13YaO0kTKBTaigfgZsdOnN564EWcpJW4IIR4AD8TEpw4IfECHDlyQOIIEheQELjsOF8m4/A3CzmwUrTr3dlvfnZ2PNm1Z1bFs3XAno1Ac27r5M9KqoiViIJuK0RzxzYi+7wH476ishHjq4k/S/JJJOinKH8WWUyX9iFMB/jJvsW5V63wuS4GaqLjc+rxgW2jnxFN145T+8C2IzbHxfo7XJ/kUJCfePWsrh+Zrj7YR0mOxk8CfewxYYf62M3+6ehj54S9r489IV/vArbH1hljm6LPTT3Gz5j1+GAY/5jJqh2jPMaP5OH2oX1BtosFWUfCGOqGY8gnFvhIWIEiVqiI1VHEIn8fmk370XrweKEdFz1mowD04DxJH25TjDch67tr61qfzzCHx1df6OO24/sC7cN971zFPsU8MrIP6eCPxzyu6uJP5zy2KuOfSTFUEf+C8GM3+M27p+cEPysJv+9G/iafGLjx/8Y/D9zgN/4zdII/XhD+yI39G/xrbvCbvPi6G/yC8A/drG+zv264kX9G+Ded4GeN/Y/c2Cch/Ftu7DMl/Ntu5F9SjnhsVoXn1yfQr5e7ZPnP5tfEP2ayusqvT5g83D48vz4VZB0JYzzHORX4nAp8JKxQEaujiLWviBUpYsWKWJq27+2oXH1FrMGOYmnqeKCIpbmOwx2Va6SIdU0RSzPmXFfEOlTEuqGItaux8KYi1q7uIU2f0IxfR4pYmnt7V331f17472L0/7zw17BuKWJp+oRmnNDMTXbVv247wHJ9hy6d5SviT6SzfKOHn7q7J50lju9CU+kcX9E2CZ2lSN9E1OvxBPrrH91thWblrzg3hHGkfwaYT227jrVDRle3+R1ez41tmzs8+j+Kd3jIk2TbY/TYRp2p77mtpTs8/I7BF/q23eEFP4HlAc0eoyf5Oi30QYs+L0CfLy2YoZHvQcMWzJeA6Vkh6KzBr1bz0SfqEsCY5rcHNZ8A5NhY42pd7wGM+QI9t/2BQI9nK2SzEaPH+DUU5vXBPnyeiz1D/81wzyDPAeiP9NiuS8j6Xtla2jODLbYjXmi7viCPZLtjZruhY9uNBNsNt9gO8yJqo+2o77XRs92xIM/v+vxIoJfO9ftmFScePrr/4LFhBQMdTxhQsLBFgIzNj1twcS6WsGWMnrMtOAPgJb04feCB9B9sXev6hmHyFyMPulGLDBj4kSZokeGtrWvHOvHWMaWEAOVqSwjeAabnyXIaoxNUSR4p2cC5SBsKtPyPE40Fwnz0L4713tbSRw6aAQcPQo3ZfPl/aNHHGNlHyVekpDEA3Ceg35V9Kn39itn3gHola7WyM34IZRj/kNF/ss88uSZ9zn9TzsuiTC+z8rKclMtlvij5Ohiz/hGtNv+yyGaLcb4o5pOszKZ/nX8+KYtFWaTpWZ5e5Onkb/NfTKbzxTchkou0fhz/iD+9fDvVahyTz7rs22eK35ye8EJG37UA9b6Ibbt5Twn8arrjLXReS32FIfQF1XpfVG3S+9UmPfGOq00ZaawHYyHj07fPaC/EIjlCRn9kAWhNujCH5o8E/l3Gf01uoQ9jF8fyhT6ir9dnaCc18R14a38YccWT4WMfl418x8W+Gs9m07PxPMmL5eJymWc/2ldfATd8RiZqNAAA", - "debug_symbols": "pZbNbuJAEITfxWcOrp7/vMoqikjiREgIkAMrrSLefWdcNSQ5EEXkwtfG9MfYLrf9PjxPj6fXh83uZf823P15Hx7nzXa7eX3Y7p/Wx81+V799H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5h24A6A5Ai3JsU4e3M1puF3oxiFFMYhY5G9DimxohmujE6suNQYxi9ZXGLJaF1nK8EKKJTvRiEKOYxCzKB/kgn3JsyrEpx6Ycm3JsyrEpx6Yc2zKYx1agF9aLNliXad1GsrUi9SL3oqhYRvNSoBfWi+ZxrfC9CL1oZt+K1Ivci6KiJZlFE/rzeTX0R9DDcZ6m9gT69EyqT6rDep52x+Fud9puV8Pf9fa0/OjtsN4tPK7nurce4rR7rqzCl812atV59dE9Xm8NWb2hXJrDj7vrTFF7nSq39Aff+2O41u+u9+cC9Rdzl36zL/3+l/3frD8VtefxlqN31o/epVv6fV99nYG39Fu5/P/Vq/fN2Uu+X/306fh/fvZwOX11pt2wfkMPfp0Bt/SPff11dvyy/+v1u69b66fN/OUN89xM82b9uJ20+XLaPX3ae/x36Hv6G+ph3j9Nz6d5aqaP19T68cfiuLKM+/Zm0DZ9WFkY2ybaZra619+f22L+Aw==", + "debug_symbols": "pZbdTioxFIXfZa65mLX776ucGIM6GhICZISTnBje/bSzVlEvMAZv+HYd95cWVtt5H56nx9Prw2b3sn8b7v68D4/zZrvdvD5s90/r42a/q399H8b2gTDcYTUgEonIRFlgIwHCCEd4ghajxWgxWowWR4ujxdHiaHG0uGqxikgkIhNlgR8JEEZUS6jwRCAikYhMlAVhJEAYQUugJdASaAm0BFoCLZGWSEukJdISaYm0RFoiLZGWSEuiJdGSaEm0JFoSLYmWREuiJdGSacm0ZFoyLZmWTEumJdOSacm0FFoKLYWWQkuhpdBSaCm0FFoKLRhHEaKJTvRiEKOYxCzKB/kgH+SDfJAP8kE+yAf5IJ/JZ/KZfCafyWfymXwmn8ln8jn5nHxOPiefk8/J5+Rz8jn5nHxePi+fl085h4IOJR2KOpR1KOxQ2qG4Q3mHAg8lHoo8lHko9FDqodhDuYeCDyUfij6UfSj8UPqh+EP5hzYAtAPQohzbqcPtjJbbhV4MYhSTmEWeDWjxTY0QTXSiF4MYxerLjVksC63leCFEE53oxSBGMYlZlA/yQT7l2JRjU45NOTbl2JRjU45NObaW49II0cR2qo6taOfxcmanXuReFBXLubwU6IX1onmsFb4XoRfN7FqRepF7UVS0GLNoQnc+r4Z+/zwc52lq18+nC6leU4f1PO2Ow93utN2uhr/r7Wn5p7fDerfwuJ7r07qyafdcWYUvm+3UqvPqo3u83hqyekO5NIcfd9cDRe31SLmlP/jeH8O1fne9Pxeov5i79Jt96fe/7P9m/qmoPY+3rN5ZX71Lt/RbufRf/fa/WX3y/ddLn+b/89Xjsvx6IN0wf0MPbt3At/SPff514/+y/+v3f19H66fN/OX18NxM82b9uJ00fDntnj49Pf479Cf99fIw75+m59M8NdPHO2b9+GNxXFnGfbvW29CHlYWxDdGG2epTf39uk/kP", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 9ed3b418195..03c4b5bb4cf 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+3dB5QVxbYG4JoecpYkCMIBQRAEuyYwMwiCIAqiIAqiIEoazDlnUREVURRFURRFUcw555xzzjnnrAj6qpvqe4u27fWu83et/tdUrVW3q3fxzttdtec7xdDv3SKxqjUqFuLgOqvGRaoX62vQGsRiRQkxLyFWnBCrkxCrmxCrlxCrnxBrkBBrmBBrlBBrnBBrkhBrmhBrlhBrnhBrkRBbIyHWMiHWKiHWOiHWJiHWNiG2ZkKsXUKsfUJsrYRYh4RYx4TY2gmxTgmxzgmxQkKsS0Ksa0JsnYRYt4RY94TYugmxHgmxngmx9RJivRJivRNi6yfE+iTE+ibENkiI+QkxmRArSYiVJsTKEmLlCbF+CbGKhFhlQqwqIdY/IbZhQmxAQmxgQmyjhNighNjghNjGCbEhCbGhCbFNEmLDEmKbJsQ2S4gNT4iNSIhtnhAbmRDbIiG2ZUJsVEJsdEJsq4TYmITY1gmxbRJiYxNi4xJi2ybExifEtkuIbZ8Qm5AQm5gQ2yEhNikhtmNCbKeE2GSxykAzNiXhz01NiE1LiE1PiFUnxGYkxHZOiO2SENs1IbZbQmz3hNgeCbE9E2J7JcT2TojtkxDbNyG2X0Js/4TYAQmxAxNiByXEDk6IHZIQOzQhdlhC7PCE2BEJsSMTYkclxI5OiB2jY/poGJ7z4q1IXwfrq1+zJifjPstPSBf12SXmWszU12NFbAGDic6x2LHGokWtOMNFLPX7lZVVV5RUy1I5xS+pmlpZ7peVT+1XKStleWX59JLK0tLqyrLKiqqpVRV+lSwrrZYzyqtKq2esajMBnzVDJ3Ys7hn9Onod42spBL4okXmb+R6XZcLHZfC5xwOLIavnPt5YYNDn+v+LgDX7gatebY39f9lW/ehWZyGgjAbmWszS1xOiBYm0CwKFWALFGS7Yv/ysEl2UcpbAFfgJGW0kquCiPGeJbL5y0XnOBuZZrOsw+rzZtbwLvR513JqstiZmi8AbrK85cOs/PxsnCtTPRkkIe52E58d8vi+jz0N/+ePW4L+OoXMUyBzt/b2sxMedSqZZO5WcpK8nRwsSnUqCQCGWAPbvYKsvWE1PJScJnBQnZ7SR6G/7kwT+pzloXv72+T/PPAf4zKyKI9cgqxwLIpvaBBfn6l+JNS3OU4B52fyNIiJv299cc/X11GhBom+uIFCIJYD+7eEpAvfNNVfgCvBUwfHNNVc4xYFYZKZ4UQY5hg2t+BxgcZ4mOBVH5G1b8Xn6enq0IJHiQaAQSwCt+GkCp/g8gSvA0wWH4vOEUxyIRWaKd8kgx7Dl+Sx+Bi6vEpuKI/K2rfh8fT0zWpBI8SBQiCWAVvwMgVN8vsAV4JmCQ/H5wikOxCIzxb0Mcgxbns/iZwlOxRF521Z8gb6eHS1IpHgQKMQSQCt+lsApvkDgCvBswaH4AuEUB2KRmeJdM8gxbHk+i5+Dy6vUpuKIvG0rvlBfz40WJFI8CBRiCaAVP0fgFF8ocAV4ruBQfKFwigOxyEzx4gxyDFuez+LnCU7FEXnbVnyRvp4fLUikeBAoxBJAK36ewCm+SOAK8HzBofgi4RQHYpGZ4utkkGPY8nwWvwCXV5lNxRF521Z8sb5eGC1IpHgQKMQSQCt+gcApvljgCvBCwaH4YuEUB2KRmeJ1MsgxbHk+i18kOBVH5G1b8SX6enG0IJHiQaAQSwCt+EUCp/gSgSvAiwWH4kuEUxyIRWaKd8sgx7Dl+Sx+CS6vcpuKI/K2rfhSfb00WpBI8SBQiCWAVvwSgVN8qcAV4KWCQ/GlwikOxCIzxetmkGPY8nwWv0xwKo7I27biy/T18mhBIsWDQCGWAFrxywRO8WUCV4CXCw7FlwmnOBCLzBTvnkGOYcvzWfwKXF79bCqOyNu24lfq61XRgkSKB4FCLAG04lcInOJXClwBXiU4FL9SOMWBWGSmeL0Mcgxbns/iVwtOxRF521b8Gn29NlqQSPEgUIglgFb8aoFT/BqBK8BrBYfi1winOBCLzBRfN4Mcw5bns/h1uLwqbCqOyNu24tfr6w3RgkSKB4FCLAG04tcJnOLXC1wB3iA4FL9eOMWBWGSmeP0Mcgxbns/iNwpOxRF521b8Jn29OVqQSPEgUIglgFb8RoFT/CaBK8CbBYfiNwmnOBCLzBTvkUGOYcvzWfwWXF6VNhVH5G1b8Vv19bZoQSLFg0AhlgBa8VsETvFbBa4AbxMcit8qnOJALDJTvEEGOYYtz2fx2wWn4oi8bSt+h77eGS1IpHgQKMQSQCt+u8ApfofAFeCdgkPxO4RTHIhFZor3zCDHsOX5LH4XLq8qm4oj8rat+N36ek+0IJHiQaAQSwCt+F0Cp/jdAleA9wgOxe8WTnEgFpkp3jCDHMOW57P4vYJTcUTethW/T1/vjxYkUjwIFGIJoBW/V+AUv0/gCvB+waH4fcIpDsQiM8XXyyDHsOX5LP4ALq8pNhVH5G1b8Qf19aFoQSLFg0AhlgBa8QcETvEHBa4AHxIcij8onOJALDJTvFEGOYYtz2fxhwWn4oi8bSv+iL4+Gi1IpHgQKMQSQCv+sMAp/ojAFeCjgkPxR4RTHIhFZor3yiDHsOX5LP4YLq+pNhVH5G1b8cf19YloQSLFg0AhlgBa8ccETvHHBa4AnxAcij8unOJALDJTvHEGOYYtz2fxJwWn4oi8bSv+lL4+HS1IpHgQKMQSQCv+pMAp/pTAFeDTgkPxp4RTHIhFZor3ziDHsOX5LP4MLq9pNhVH5G1b8Wf19bloQSLFg0AhlgBa8WcETvFnBa4AnxMcij8rnOJALDJTvEkGOYYtz2fx5wWn4oi8bSv+gr6+GC1IpHgQKMQSQCv+vMAp/oLAFeCLgkPxF4RTHIhFZoqvn0GOYcvzWfwlXF7TbSqOyNu24i/r6yvRgkSKB4FCLAG04i8JnOIvC1wBviI4FH9ZOMWBWGSmeNMMcgxbns/irwpOxRF521b8NX19PVqQSPEgUIglgFb8VYFT/DWBK8DXBYfirwmnOBCLzBTvk0GOYcvzWfwNXF7VNhVH5G1b8Tf19a1oQSLFg0AhlgBa8TcETvE3Ba4A3xIcir8pnOJALDJTvFkGOYYtz2fxtwWn4oi8bSv+jr6+Gy1IpHgQKMQSQCv+tsAp/o7AFeC7gkPxd4RTHIhFZor3zSDHsOX5LP4eLq8ZNhVH5G1b8ff19YNoQSLFg0AhlgBa8fcETvH3Ba4APxAcir8vnOLvifwr3jyDHMOW57P4h4JTcUTethX/SF8/jhYkUjwIFGIJoBX/UOAU/0jgCvBjwaH4R8IpDsQiM8U3yCDHsOX5LP4JLC/p21QckbdtxT/V18+iBYkUDwKFWAJoxT8ROMU/FbgC/ExwKP6pcIrjsMhO8RYZ5Bi2PJ/FPxeciiPytq34F/r6ZbQgkeJBoBBLAK345wKn+BcCV4BfCg7FvxBOcRwW2SnuZ5Bj2PJ8Fv8KlpeUNhVH5G1b8a/19ZtoQSLFg0AhlgBa8a8ETvGvBa4AvxEcin8tnOI4LLJTfI0Mcgxbns/i3wpOxRF521b8O339PlqQSPEgUIglgFb8W4FT/DuBK8DvBYfi3wmnOA6L7BSXGeQYtjyfxX+A5SVLbCqOyNu24j/q60/RgkSKB4FCLAG04j8InOI/ClwB/iQ4FP9ROMVxWGSneMsMcgxbns/iPwtOxRF521b8F339NVqQSPEgUIglgFb8Z4FT/BeBK8BfBYfivwinOA6L7BQvySDHsOX5LP4bLC9ZalNxRN62Ff9dX5dHCxIpHgQKsQTQiv8mcIr/LnAFuFxwKP67cIrjsMhO8VYZ5Bi2PJ/F/xCciiPytq34Cn1dGS1IpHgQKMQSQCv+h8ApvkLgCnCl4FB8hXCK47DITvHSDHIMW57P4n/C8pJlNhVH5G1b8b/MxTAVD/6jEEsArfifAqf4XwJXgMGzZ7GRaMX/Ek5xHBbZKd46gxzDluezeFERp+JFRXyKe3oRiuOKF1tQ3FywmiruFeEKsJhEca/IKV5UlH/FywQ+x7Dl+SxeB6d4uU3F6xAqXlcvQr244vUsKF4HqHhdoOL1SBSv6xSXdQgUbyPwOYYtz2fx+qSK1ydUvIFehIZxxRtaULw+UPEGQMUbkijewCku6xMoXi7wOYYtz2fxRjjF+9lUvBGh4o31IjSJK97EguKNgIo3BirehETxxk5x2YhA8bYCn2PY8nwWb0qqeFNCxZvpRWgeV7y5BcWbAhVvBlS8OYnizZzisimB4v0EPsew5fks3gKneIVNxVsQKr6GXoSWccVbWlC8BVDxNYCKtyRRfA2nuGxBoPiaAp9j2PJ8Fm9FqngrQsVb60VoE1e8jQXFWwEVbw1UvA2J4q2d4rIVgeIVAp9j2PJ8Fm+LU7zSpuJtCRVfUy9Cu7ji7Swo3hao+JpAxduRKL6mU1y2JVC8ncDnGLY8n8XbkyrenlDxtfQidIgr3sGC4u2Biq8FVLwDieJrOcVlewLFKwU+x7Dl+SzeEad4lU3FOxIqvrZehE5xxTtZULwjUPG1gYp3IlF8bae47EigeHuBzzFseT6LdyZVvDOh4gW9CF3iinexoHhnoOIFoOJdSBQvOMVlZwLFqwQ+x7Dl+SzeFaf4FJuKdyVUfB29CN3iinezoHhXoOLrABXvRqL4Ok5x2ZVA8bUEPsew5fks3p1U8e6Eiq+rF6FHXPEeFhTvDlR8XaDiPUgUX9cpLrsTKN5f4HMMW57P4j1xik+1qXhPQsXX04vQK654LwuK9wQqvh5Q8V4kiq/nFJc9CRTvIPA5hi3PZ/HepIr3JlR8fb0IfeKK97GgeG+g4usDFe9Dovj6TnHZm0DxDQU+x7Dl+SzeF6f4NJuK9yVUfAO9CH5ccd+C4n2Bim8AVNwnUXwDp7jsS6B4R4HPMWx5PotLUsUloeIlehFK44qXWlBcAhUvASpeSqJ4iVNcSgLFBwh8jmHL81m8DKf4dJuKlxEqXq4XoV9c8X4WFC8DKl4OVLwfieLlTnFZRqD42gKfY9jyfBavIFW8glDxSr0IVXHFqywoXgFUvBKoeBWJ4pVOcVlBoPhAgc8xbHk+i/fHKV5tU/H+hIpvqBdhQFzxARYU7w9UfEOg4gNIFN/QKS77EyjeSeBzDFuez+IDSRUfSKj4RnoRBsUVH2RB8YFAxTcCKj6IRPGNnOJyIIHiGwl8jmHL81l8ME7xGTYVH0yo+MZ6EYbEFR9iQfHBQMU3Bio+hETxjZ3icjCB4p0FPsew5fksPpRU8aGEim+iF2FYXPFhFhQfClR8E6Diw0gU38QpLocSKD5IAHPMeKMyW4TZBDlumkExJSZa05/8zXCJStaC2ozgJ384S0GNwCVawlpQIwgKanOWghqJS7SUtaBGEhTUFiwFtSUu0TLWgtqSoKBGsRTUaFyi5awFNZqgoLZiKagxuET7sRbUGIKC2pqloLbBJVrBWlDbEBTUWJaCGodLtJK1oMYRFNS2LAU1HpdoFWtBjScoqO1YCmp7XKJTWAtqe4KCmsBSUBNxiU5lLaiJBAW1A0tBTcIlOo21oCYRFNSOLAW1Ey7R6awFtRNBQU1mKagpuESrWQtqCkFBTWUpqGm4RGewFtQ0goKazlJQ1bg3PH3WgqomKKgZLAW1M66gaN+H2pmgoHZhKahdcQVF+z7UrgQFtRtLQe2OKyja96F2JyioPVgKak9cQdG+D7UnQUHtxVJQe+MKivZ9qL0JCmofloLaF1dQtO9D7UtQUPuxFNT+uIKifR9qf4KCOoCloA7EFRTt+1AHEhTUQSwFdTCuoGjfhzqYoKAOYSmoQ3EFRfs+1KEEBXUYS0Edjiso2vehDicoqCNYCupIXEHRvg91JEFBHcVSUEfjCor2faijCQrqGJaCmokrKNr3oWYSFNSxLAV1HK6gaN+HOo6goI5nKahZsERLaN+HmkVQUCewFNRsXEHRvg81m6CgTmQpqJNwBUX7PtRJBAV1MktBzcEVFO37UHMICuoUloKaiyso2veh5hIU1KksBXUarqBo34c6jaCg5rEU1Om4gqJ9H+p0goI6g6Wg5uMKivZ9qPkEBXUmS0GdhSso2vehziIoqAUsBXU2rqBo34c6m6CgzmEpqIW4gqJ9H2ohQUGdy1JQ5+EKivZ9qPMICmoRS0Gdjyso2vehzicoqAtYCmoxrqBo34daTFBQF7IU1EW4gqJ9H+oigoJawlJQF+MKivZ9qIsJCuoSloJaCku0lPZ9qKUEBXUpS0Fdhiso2vehLiMoqGUsBXU5rqBo34e6nKCgrmApqCtxBUX7PtSVBAV1FUtBXY0rKNr3oa4mKKhrWArqWlxB0b4PdS1BQV3HUlDX4wqK9n2o6wkK6gaWgroRV1C070PdSFBQN7EU1M24gqJ9H+pmgoK6haWgbsUVFO37ULcSFNRtLAV1O66gaN+Hup2goO5gKag7cQVF+z7UnQQFdRdLQd2NKyja96HuJiioe1gK6l5cQdG+D3UvQUHdx1JQ9+MKivZ9qPsJCuoBloJ6EFdQtO9DPUhQUA8hcwySq2skF9xvqv6jgR4PN8abG+MtjPEoY7yVMd7aGI81xtsa4+2M8QRjvIMx3tEYTzbGU43xdGM8wxjvYox3M8Z7GOO9jPE+xng/Y3yAMT7IGB9ijA8zxkcY46OM8THG+FhjfLwxPsEYn2iMTzbGpxjjU43xPGN8hjE+0xgvMMbnGONzjfEiY3yBMb7QGC8xxpcY40uN8TJjfIUxvsoYX2OMrzPGNxjjm4zxLcb4NmN8hzG+yxjfY4zvM8YPGOOH9PhhdX1E9UdVf0z1x1V/QvUnVX9K9adVf0b1Z1V/TvXnVX9B9RdVf0n1l1V/RfVXVX9N9ddVf0P1N1V/S/W3VX9H9XdVf0/191X/QPUPVf+o6L9oeuLvrUhfB+urX7MmJ4uMvpmweZaYa/GxXoRPivSCFOtrMNE5Fgv+UFEsqeIMF/HffgNXz1jVgmeo6WdF3+afFOE212ZRflzEV5Sf6kX4LF6UnyYU5WcWihJRSFFRfgosys/ARRmtd9ZFiczbzPfzogwT/rwI/7lfAIshq+f+wlhh0Of+TwLW7AeuerU19v9lW/WjW52FgDIamGvxpV6Er+ICBoFCLIHiDBfsX35WiS5K+SWwwL/KaCNRBRfl+WVGX7le/vb5P8/8NeyZV/3/Li4Wf2+gNZX/tO9+zZr8OoN9R+f4MDJHe+fYEh+n+DRrin+jF+HbuOLf/j8U92vUVl+wmir+DVCKbzPaSLTi31hS3K9Rg+zzf575O+Azsyr+HYHig0U2tQkuztW/EmtanN/jNkba/A3M94TfXD/oRfgx/s31Y+bfXKsvWE2/uX4AFuCPJN9cPzjF5fcEij9SRKL4d8Afop9IFf+JUPGf9SL8Elf8FwuK/wRU/GdgAf5CovjPTnH5E4HiGwt8jmHL81n8V9zGlNhU/FdCxX/Ti/B7XPHfLSj+K1Dx34AF+DuJ4r85xeWvBIo/WhvP4stJFV9OqPgfehFWxBVfYUHx5UDF/wAW4AoSxf9wisvlBIoPEfgcw5bns/hK3MaU2lR8JaHif+pF+Cuu+F8WFF8JVPxPYAH+RaL4n05xuZJA8cdq41k8SA6Ul1XFEXnbVrxI33ieWF3xIFCIJYBW3Fywmipe5OEK0PM4FC/ynOJALDJTfKjA5xi2PJ/Fi3EbU2ZT8WKPT/E6+qZuXPG6FhQvBipeB6h4XRLF6zjFZTGB4o/XxrN4PVLF63l8itfXNw3iijewoHg9oOL1gYo3IFG8vlNc1iNQfBOBzzFseT6LN8RtTLlNxRt6fIo30jeN44o3tqB4Q6DijYCKNyZRvJFTXDYkUPyJ2ngWb0KqeBOPT/Gm+qZZXPFmFhRvAlS8KVDxZiSKN3WKyyYEig8T+BzDluezeHPcxvSzqXhzj0/xFvpmjbjia1hQvDlQ8RZAxdcgUbyFU1w2J1D8ydp4Fm9JqnhLj0/xVvqmdVzx1hYUbwlUvBVQ8dYkirdyisuWBIpvKvA5hi3PZ/E2uI2psKl4G49P8bb6Zs244mtaULwNUPG2QMXXJFG8rVNctiFQ/KnaeBZvR6p4O49P8fb6Zq244mtZULwdUPH2QMXXIlG8vVNctiNQfDOBzzFseT6Ld8BtTKVNxTt4fIp31DdrxxVf24LiHYCKdwQqvjaJ4h2d4rIDgeJP18azeCdSxTt5fIp31jeFuOIFC4p3AireGah4gUTxzk5x2YlA8eECn2PY8nwW74LbmCqbinfx+BTvqm/WiSu+jgXFuwAV7wpUfB0Sxbs6xWUXAsWfqY1n8W6kinfz+BTvrm/WjSu+rgXFuwEV7w5UfF0Sxbs7xWU3AsVHCHyOYcvzWbwHbmOm2FS8h8eneE99s15c8fUsKN4DqHhPoOLrkSje0ykuexAo/mxtPIv3IlW8l8eneG99s35c8fUtKN4LqHhvoOLrkyje2ykuexEovrnA5xi2PJ/F++A2ZqpNxft4fIr31TcbxBXfwILifYCK9wUqvgGJ4n2d4rIPgeLP1cazuE+quO/xKS71TUlc8RILivtAxSVQ8RISxaVTXPoEio8U+BzDluezeCluY6bZVLzU41O8TN+UxxUvt6B4KVDxMqDi5SSKlznFZSmB4s/XxrN4P1LF+3l8ilfom8q44pUWFO8HVLwCqHglieIVTnHZj0DxLQQ+x7Dl+SxehduY6TYVr/L4FO+vbzaMK76hBcWrgIr3Byq+IYni/Z3isopA8Rdq41l8AKniAzw+xQfqm43iim9kQfEBQMUHAhXfiETxgU5xOYBA8S0FPsew5fksPgi3MdU2FR/k8Sk+WN9sHFd8YwuKDwIqPhio+MYkig92istBBIq/WBvP4kNIFR/i8Sk+VN9sEld8EwuKDwEqPhSo+CYkig91isshBIqPEvgcw5bns/gw3MbMsKn4MI9P8U31zWZxxTezoPgwoOKbAhXfjETxTZ3ichiB4i/VxrP4cFLFh3t8io/QN5vHFd/cguLDgYqPACq+OYniI5zicjiB4qMFPsew5fksPhK2MdK3qfhIj0/xLfTNlnHFt7Sg+Eig4lsAFd+SRPEtnOJyJIHiL9fGs/goUsVHeXyKj9Y3W8UV38qC4qOAio8GKr4VieKjneJyFIHiWwl8jmHL81l8DE5xaVPxMR6f4lvrm23iim9jQfExQMW3Biq+DYniWzvF5RgCxV+pjWfxsaSKj/X4FB+nb7aNK76tBcXHAhUfB1R8WxLFxznF5VgCxccIfI5hy/NZfDxO8RKbio/3+BTfTt9sH1d8ewuKjwcqvh1Q8e1JFN/OKS7HEyj+am08i08gVXyCx6f4RH2zQ1zxHSwoPgGo+ESg4juQKD7RKS4nECi+tcDnGLY8n8Un4RQvtan4JI9P8R31zU5xxXeyoPgkoOI7AhXfiUTxHZ3ichKB4q/VxrP4ZFLFJ3t8ik/RN1Pjik+1oPhkoOJTgIpPJVF8ilMc8kMXtaxy3Ebgcwxbns/i03CKl9lUfJrHp/h0fVMdV7zaguLTgIpPBypeTaL4dKe4nEag+Ou18Sw+g1TxGR6f4jvrm13iiu9iQfEZQMV3Biq+C4niOzvF5QwCxccKfI5hy/NZfFec4uU2Fd/V41N8N32ze1zx3S0ovitQ8d2Aiu9OovhuTnG5K4Hib9TGs/gepIrv4fEpvqe+2Suu+F4WFN8DqPieQMX3IlF8T6e43INA8XECn2PY8nwW3xuneD+biu/t8Sm+j77ZN674vhYU3xuo+D5AxfclUXwfp7jcm0DxN2vjWXw/UsX38/gU31/fHBBX/AALiu8HVHx/oOIHkCi+v1Nc7keg+LYCn2PY8nwWPxCneIVNxQ/0+BQ/SN8cHFf8YAuKHwhU/CCg4geTKH6QU1weSKD4W7XxLH4IqeKHeHyKH6pvDosrfpgFxQ8BKn4oUPHDSBQ/1CkuDyFQfLzA5xi2PJ/FD8cpXmlT8cM9PsWP0DdHxhU/0oLihwMVPwKo+JEkih/hFJeHEyj+dm08ix9FqvhRHp/iR+ubY+KKH2NB8aOAih8NVPwYEsWPdorLowgU307gcwxbns/iM3GKV9lUfKbHp/ix+ua4uOLHWVB8JlDxY4GKH0ei+LFOcTmTQPF3auNZ/HhSxY/3+BSfpW9OiCt+ggXFjwcqPguo+Akkis9yisvjCRTfXuBzDFuez+KzcYpPsan4bI9P8RP1zUlxxU+yoPhsoOInAhU/iUTxE53icjaB4u/WxrP4yaSKn+zxKT5H35wSV/wUC4qfDFR8DlDxU0gUn+MUlycTKD5B4HMMW57P4nNxik+1qfhcj0/xU/XNaXHFT7Og+Fyg4qcCFT+NRPFTneJyLoHi79XGs/g8UsXneXyKn65vzogrfoYFxecBFT8dqPgZJIqf7hSX8wgUnyjwOYYtz2fx+TjFp9lUfL7Hp/iZ+uasuOJnWVB8PlDxM4GKn0Wi+JlOcTmfQPH3a+NZfAGp4gs8PsXP1jfnxBU/x4LiC4CKnw1U/BwSxc92issFBIrvIPA5hi3PZ/GFOMWn21R8ocen+Ln65ry44udZUHwhUPFzgYqfR6L4uU5xuZBA8Q9q41l8Eaniizw+xc/XNxfEFb/AguKLgIqfD1T8AhLFz3eKy0UEik8S+BzDluez+GKc4tU2FV/s8Sl+ob65KK74RRYUXwxU/EKg4heRKH6hU1wuJlD8w9p4Fl9CqvgSj0/xi/XNJXHFL7Gg+BKg4hcDFb+ERPGLneJyCYHiOwp8jmHL81l8KU7xGTYVX+rxKX6pvrksrvhlFhRfClT8UqDil5EofqlTXC4lUPyj2ngWX0aq+DKPT/HL9c0VccWvsKD4MqDilwMVv4JE8cud4nIZgeI7CWCOGW9UZoswmyDHKz23UXKzovzneJXbKF+OINioq91G+XIkwUZd4zbKl1sSbNS1bqN8OZpgo65zG+XLMQQbdb3bKF9uQ7BRN7iN8uU4go260W2UL8cTbNRNbqN8uT3BRt3sNsqXEwk26ha3Ub6cRLBRt7qNUr+ZJtio29xG+XIKwUbd7jbKl9MINuoOt1G+rCbYqDvdRvlyZ4KNusttlC93Jdiou91G+XJ3go26x22UL/ck2Kh73Ub5cm+CjbrPbZQv9yXYqPvdRvlyf4KNesBtlC8PJNioB91G+fJggo16yG2ULw8l2KiH3Ub58nCCjXrEbZQvjyTYqEfdRvnyaIKNesxtlC9nEmzU426jfHkcwUY94TbKl7MINupJt1G+nE2wUU+5jfLlSQQb9bTbKF/OIdioZ9xG+XIuwUY96zbKl6cRbNRzbqN8eTrBRj3vNsqX8wk26gW3Ub48i2CjXnQb5cuzCTbqJbdRvlxIsFEvu43y5XkEG/WK2yhfnk+wUa+6jfLlYoKNes1tlC8vItio191G+fJigo16w22UL5cSbNSbbqN8eRnBRr3lNsqXlxNs1Ntuo3x5JcFGveM2ypdXE2zUu26jfHktwUa95zbKl9cTbNT7bqN8eSPBRn3gNsqXNxNs1Iduo3x5K8FGfeQ2ype3E2zUx26jfHknwUZ94jbKl3cTbNSnbqN8eS/BRn3mNsqX9xNs1Oduo3z5IMFGfYHcqCC5ukZywX3w33vUQI+vMsZXG+NrjPG1xvg6Y3y9Mb7BGN9ojG8yxjcb41uM8a3G+DZjfLsxvsMY32mM7zLGdxvje4zxvcb4PmN8vzF+wBg/aIwfMsYPG+NHjPGjxvgxY/y4MX7CGD9pjJ8yxk8b42eM8bPG+Dlj/LwxfsEYv2iMXzLGLxvjV4zxq8b4NWP8ujF+wxi/aYzfMsZvG+N3jPG7xvg9Y/y+Mf7AGH9ojD8yxh8b40+M8afG+DNj/Lkx/kKPv1TXr1T/WvVvVP9W9e9U/171H1T/UfWfVP9Z9V9U/1X131T/XfXlqv+h+grVV6r+p+p/aQmLVPdUL1a9jup1Va+nen3VG6jeUPVGMTE9fR2sr37NmpxifFZN/8sGv/TwUGbxzFOBz/wVyTNPAz7z1yTPPB34zN+QPHM18Jm/JXnmGcBn/o7kmXcGPvP3JM+8C/CZfyB55l2Bz/wjyTPvBnzmn0ieeXfgM/9M8sx7AJ/5F5Jn3hP4zL+SPPNewGf+jeSZ9wY+8+8kz7wP8JmXkzzzvsBn/oPkmfcDPvMKkmfeH/jMK0me+QDgM/9J8swHAp/5L5JnPgj4zMHvNRme+WDgMxeRPPMhwGf2SJ75UOAzF5M882HAZ65D8syHA5+5LskzHwF85nokz3wk8JnrkzzzUcBnbkDyzEcDn7khyTMfA3zmRsBnDv4tvI7+rJnG8xfpNSjW88E7I/VUry9W/bt5Q9Ubqd5Y9SaqN1W9merNVW+h+hqqt1S9leqtVW+jelvV11S9nertVV9L9Q6qd1R9bdU7qd5Z9YLqXVTvqvo6qndTvbvq66reQ/Weqq+nei/Ve6u+vup9VO+r+gbBmqguVS8J1lr1MtXLVe+neoXqlapXqd5f9Q1VH6D6QNU3Un2Q3qeNVR+i+lDVN1F9mOqbqr6Z6sNVH6H65qqPVH0L1bdUfZTqo1XfSvUxqm+t+jaqj1V9nOrbqj5e9e1U3171CapPVH0H1SepvqPqO6k+WfXg3+6nqh78227wb53Bv/0F/xYW/NtQ8G8lwb8dBL9LD363HPyuNfjdY/C7uOB3U8HvaoLfXQR/lw/+bhv8XS/4u0/wd4HgbBycFYOzU3CWCL5bg++awN7AouBn8xjx92bG5uirJ1o0m/DQ7g+bf+7MlLnzUuYuSpm7LGXu6pS5G1Pmbk+Zuzdl7uGUuSdT5p5PmXs1Ze7tlLkPU+Y+T5n7NmXu55S5P1Lmior+ea5+ylzTlLlWKXPtU+Y6p8x1T5nrnTInU+YqUuYGpswNTZkbkTI3OmVuXMrcxJS5KSlzO6fM7Zkyt3/K3KEpc0enzM1KmZuTMnd6ytzZKXPnp8xdnDJ3ecrctSlzN6fM3Zkyd3/K3KMpc0+nzL2YMvd6yty7KXMfp8x9mTL3fcrcrylzK1Pmir1/nmuYMrcwZW5xytylKXNXpczdkDJ3W8rcPSlzD6XMPZEy91zK3Cspc2+lzH2QMvdZytw3KXM/pcwtT5mL3mJPmquXMtckZa5lyly7lLlOKXPdUuZ6pcz5KXP9UuYGpMwNSZkbnjI3KmVubMrchJS5ySlzM1Lm9kiZ2y9l7pCUuaNS5o5PmTs5ZW5eytyClLlFKXNLUuaWpcxdkzJ3U8rcHSlz96XMPZIy91TK3Aspc6+lzL2TMvdRytwXKXPfpcz9kjK3ImXOq/PPcw1S5pqlzLX+h7no9yIN9LWhvjbS1+DrNkh1sL73a9ZKos9vnM3n+/XF31sjY9w4Nhc9f52E/7mif7j3Yte0PxuPm7GmCXPRZ7bSVzPf6Dkaxq5tjM8FrqWMPr91Np+fuFdtjHHr2HOa6z0YlEP0edH/6UZd8ffmxeaiPxv/mSnC5yfjuRQn/O+KWlQzrY1YtJ7/B6yMO1AhNAQA", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(leaf: [u8; 32], path: [u8; 64], index: u32, root: [u8; 32]) {\n compute_root(leaf, path, index, root);\n}\n\nfn compute_root(leaf: [u8; 32], path: [u8; 64], _index: u32, root: [u8; 32]) {\n let mut current = leaf;\n let mut index = _index;\n\n for i in 0..2 {\n let mut hash_input = [0; 64];\n let offset = i * 32;\n let is_right = (index & 1) != 0;\n let a = if is_right { 32 } else { 0 };\n let b = if is_right { 0 } else { 32 };\n\n for j in 0..32 {\n hash_input[j + a] = current[j];\n hash_input[j + b] = path[offset + j];\n }\n\n current = std::hash::blake3(hash_input);\n index = index >> 1;\n }\n\n // Regression for issue #4258\n assert(root == current);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap index 9ed3b418195..03c4b5bb4cf 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(leaf: [u8; 32], path: [u8; 64], index: u32, root: [u8; 32]) {\n compute_root(leaf, path, index, root);\n}\n\nfn compute_root(leaf: [u8; 32], path: [u8; 64], _index: u32, root: [u8; 32]) {\n let mut current = leaf;\n let mut index = _index;\n\n for i in 0..2 {\n let mut hash_input = [0; 64];\n let offset = i * 32;\n let is_right = (index & 1) != 0;\n let a = if is_right { 32 } else { 0 };\n let b = if is_right { 0 } else { 32 };\n\n for j in 0..32 {\n hash_input[j + a] = current[j];\n hash_input[j + b] = path[offset + j];\n }\n\n current = std::hash::blake3(hash_input);\n index = index >> 1;\n }\n\n // Regression for issue #4258\n assert(root == current);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 9ed3b418195..03c4b5bb4cf 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "nZrNbh1HDoXfRWsvuqpY/MmrDIJAcZRAgCAbih1gEPjdp+/t73CchRfRioyV/mg3dUTyXP398NvTr1//+OX59fdPfz789J+/H359e355ef7jl5dPHx+/PH96Pf/0728fHvSfv3x5e3o6/+jhu6+fT31+fHt6/fLw0+vXl5cPD389vny9/09/fn58vccvj2/nV48PD0+vv53xBP7+/PJ0y759+P/Tx48fDePZMUY/vf/5+Pjx4+uYPL+O9Z7nfen5mO96vutHvuP5vfT8tvfU31N//z3fVX90/VnveT5cz9e7/v4eev5d73/vrh/v6b/3+/P9nvoe+t73PN7xfCx9/4f9+P2vHwPmcegNzGN89wr+BWFEE+b+nvDz+R+PH5/f/vFD42HMOr/dPzyMdRAHcRLXw092i0bcRD9f0y0GMYl1RTt5cYuDOImLaMSTV7foxCAm8eSNsy9jH0rGVWFP4iIacRP9qrAhboi7rugHcRAnBRygA3SAzj/Z+Sd7XgUcYAAMgDGJi2gUCIABMAAG7zB4h8k7TIAJMAGmEXmH6RRIgAkwAdZB5BUWTSmABbAAFk0pXmElBeoCnt+wxEGcxEW8ujyPCzgPJwYxidcrnIMmzwFwABwAhxE38WryHAAHwAFwHsRBpMlzApwAJ8DpxCBeTZ4T4AK4AK5JXESaPBdAhDIRykQoE6FMhDINoAE0gGZEXqHR5GkADaAB3PQEncx9NXlugBvgBrjpCTqZmybPDdABOkCnJ+hkOk12gA7QATo9QScz1OQAGAADYNATdDKDJgfAABgAk56gk5lqcgJMgAkw6Qk6mUmTE2ABLIBFT9DJLDW5ABbAAlj0BJ2s42ryOi7gOiZxEY24iTR5HQEgiQDHQRzEq8lrABwAB8DhxCDS5DUAToAT4JzERbyavCbACXACnEm8XuFaNHktgAvgAriMuIlXk9cCuAAugHYQeYVGk5cBNIAG0JzIK7SrycsAboAb4KYn6GRtmrwYKGsD3AA3PUEny2kyA2U5QAfo9ASdLFeTGSjLATrAoCfoZAVNZqCsABgAg56gkxVqMgNlJcAEmPQEnaykyQyUlQATYNITdLJKTWagrAJYAIueoJNVNJmBsgpgXUA7DuIg0mRjoNhhxE10YhCvJhsDxQbAAXBM4iLSZGOg2AA4AI4kXq/Q5tVkY6DYBDgBTiNuIk02BopNgBPgOoiDeDXZGCi2AC6Ay4lBpMnGQDEDaABtEnmFbF7GQDE2L2PzMjYvQyemxcsYKMbiZSxexuJl6MRYvIyBYixexuJlLF6GTkyLlzFQjMXLWLyMxcvQibF4GQPFWLyMxctYvAydmBYvY6AYi5exeBmLl6ETY/EyBoqxeBmLl7F4GToxLV7GQDEWL2PxMhYvQyfG4mUMFGPxMhYvY/EydGJavIyBslm8NovXZvHa6GSzeG0Gymbx2ixem8Vro5OtxWszUDaL12bx2ixeG51sFq/NQNksXpvFa7N4bXSytXjtm1DGuCWmZCtxJaEklRTJfa7ck6FkKhF5ibxEXiIvkZfIS2QT2UQ2kU1kE9lENpFNZBPZRN4ib5G3yFvkLfIWeYu8Rd4ib5FdZBfZRXaRXWQX2UV2kV1kFzlEDpFD5BA5RA6RQ+QQOUQOkVPkFDlFTpFT5BQ5RU6RU+QUuUQukUvkErlELpFL5BK5RC7IfhxKhpKpZCkxJVuJKwklqUTkIfIQeYg8RB4iD5GHyEPkIfIQeYo8RZ4iS4MuDbo06NKgS4MuDbo06NKgS4MuDbo06NKgS4MuDbo06NKgS4MuDbo06NKgS4MuDbo06NKgS4MuDbo06NKg3zU4b8lUspSYkn03P/wmwXsMYhLrboL4TX73OIjXD01nkDmDzBlk7tcPTb/p7h6vH5rOIHMGmTPIPPih6XfJ3ROITDJnkjmTzJlkflPbrQKnkTPJnEnmTDJnkvldZ7cCnEbOJHMmmTPJnEnmdfk6zmnkTDJnkjmTzJlkfhfXrQCnkTPJgkkWTLJgksVxGUXBaRRMsmCSBZMsmGRxYBQFp1EwyYJJFkyyYJLFTUy3ApxGwSQLJlkwyYJJFncZ3QpwGgWnUWAhBBZCYCHEvLocnEbBaRRYCIGFEFgIsWhycBoFp1FgIQQWQmAhxLqaHJxGwWkUWAiBhRBYCGE0OTiNgtMosBACCyGwEGJfTQ5Oo+A0CiyEwEIILITYNDk4jYLTKLAQAgshEEo4TeY0Ck6jwEIILIRAKOFqMqdRcBoFFkJgIQQ6iaDJnEbBaRRYCIGFEOgkUk3mNApOo8BCCCyEQCeRNJnTKDiNAgshsBACnUSpyZxGwWkUWAiBhRDoJOpqcnIaJadRYiEkFkKikzxocnIaJadRYiEkFkKikxxXk5PTKDmNEgshsRASneSgyclplJxGiYWQWAiJTnJeTU5Oo+Q0SiyExEJIdJKTJienUXIaJRZCYiEkOsl1NTk5jZLTKLEQEgsh0UkaTU5Oo+Q0SiyExEJIdJJ2NTk5jZLTKLEQEgsh0UlumpycRslplFgIiYWQ6CQ3TeY0Sk6jxEJILIREJ+lqMqdRcholFkJiISQ6yaDJnEbJaZRYCImFkOgkQ01moCSnUWIhJBZCopNMmsxASU6jxEJILIREJ5lqMgMlOY0SCyGxEBKdZNFkBkpyGiUWQmIhFDqpgyYXA6U4jQoLobAQCp3UcTW5GCjFaVRYCIWFUOikBk0uBkpxGhUWQmEhFDqpcTW5GCjFaVRYCIWFUOikJk0uBkphIRQWQmEhFDqpdTW5GCiFhVBYCIWFUOikFk0uBkphIRQWQmEhFDopPrwpBkphIRQWQmEhFDopfXhTDJTCQigshMJCKHRS+2pyMVAKC6GwEAoLodBJuZrMQCk2r2LzKjavQifF5lUMlGLzKjavYvMqdFJavIqBUixexeJVLF6FTorFqxgoxeJVLF7F4lXopLR4FQOlWLyKxatYvAqdFItXMVCKxatYvIrFq9BJafEqBkqxeI2DzetMhpKphE/pDqbKmWwlriSUpBJ9VncMoYfQQ2jWsDMxJZtiQ+gh9BCaZWwciOdMhopNoafQU2hWsjNxJUGxKfQUegnNYnYmU8lSsSX0ElqfhB76KPTQZ6EHC9o4TGgT2oRmSTsTvWqtaWfGYXNm0Vl2Vsp03JzZ6Gx2tjqzznZnXWN3jd01dtfwruFdw7uGdw3vGt41vGt41/Cu4V0jukZ0jega0TWia0TXiK4RXSO6RnSN7BrZNbJrZNfIrpFdI7tGdo3sGtk1qmtU16iuUV2jukZ1jeoa1TWqa8iRGEOWxJmNzmZnqzPrbHfmnUVn2VnXGF3j7k6sezY7W51ZZ7sz7yw6y85K2d2muLKuMbvG7Bqza8yuMbvG7Bqza8yusbrG6hqra6yusbrG6hqra6yusbrG6hrWNaxr3M2L2+9x/PX49vz468vTn9cvav3+9fXjd7+39eW/n/UV/WbX57dPH59++/r2dPt1jfvXvv387X8=", "file_map": { "50": { "source": "fn main(leaf: [u8; 32], path: [u8; 64], index: u32, root: [u8; 32]) {\n compute_root(leaf, path, index, root);\n}\n\nfn compute_root(leaf: [u8; 32], path: [u8; 64], _index: u32, root: [u8; 32]) {\n let mut current = leaf;\n let mut index = _index;\n\n for i in 0..2 {\n let mut hash_input = [0; 64];\n let offset = i * 32;\n let is_right = (index & 1) != 0;\n let a = if is_right { 32 } else { 0 };\n let b = if is_right { 0 } else { 32 };\n\n for j in 0..32 {\n hash_input[j + a] = current[j];\n hash_input[j + b] = path[offset + j];\n }\n\n current = std::hash::blake3(hash_input);\n index = index >> 1;\n }\n\n // Regression for issue #4258\n assert(root == current);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 67cdf4369cf..4fd489f9f99 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -76,8 +76,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZbNbqNAEITfhbMPzE/PT14liiLHIZElZFvEXmkV+d23G6qw95BVdnJxfQN0UcM0eD671+Hl8v68P7wdP7qHx8/uZdqP4/79eTzutuf98aBHP7veflyN3YPbqAo0QTO0QOusvu+hDuoXdRg7jgM0QgWaoOrvTQu0Lup7qIN6aIBGqEATFH4efh5+AX4BfkGvC6pRj0dTPS6mHhqgESrQBM3QAq2LSg+FnyCvIK8gryCvIK8gryBvQt6EvAnzT/BL6pdMBap+2TRD1a+Y1kWznq+mtn69QrEFtBUojuAJgRAJQkiETCiECqh4pNVBPVSWCHNr2Rzm3pqhEOoCYW6vGSxdMPCEQIgEISSCOUeDQqgA1xMcwRMCwZzFQAiJkAnmnAwqwFp2AUfwhECIBHPOBomQCYVQAda8C7hl9ULwhECIBCEkQiYUArogoM0D2jygzYO1uSsGmVAIFWCtvoAjeEIg0Mf62unqh8SL5462DHNLzxAJ9pI4g0TIBHtPbIkTDXNPMOd6vW46ft+ez9Mw2Oft7oOnn8HTdhoO5+7hcBnHTfdrO17miz5O28Os5+2kZzXIcHhVVcO3/TgYXTe36v7r0hxR65xbq+Xb5drrqNdmb6jXlx/1+vo31KfMuafSN9TnwPnn2HJ/bXPOP+SW+hRYn31T/fr8c2moj1VQH2tLfpGEeskt658855+kZf6y1otvmb8EPj+JTfd3a71v6R9JeX1+Tfcv7D+pLe+v5HX9asv9ddPFALrvukvwfYPKBLoxS/9voNu7m4ELLQYu3xLITxN8NQXv//EQfL9+hnWbee/wpIPtbj/9tRG+mtW0376MA4Zvl8Pu7uz594lnuJE+Tcfd8HqZBnO67ab15zGUsIl9fNI/Jh25nDeuZB3Z/uPRovm+2tDZtXo25Pp0tWh/AA==", + "bytecode": "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", + "debug_symbols": "pZbNbuMwDITfxeccrB/qp69SFEWaukUAIwncZIFFkXdf0p5xsocuuuol88k2x6RFKfrsXoeXy/vz/vB2/OgeHj+7l2k/jvv35/G42573x4Ne/ex6+3E1dg9uoyrQBM3QAq2z+r6HOqhf1GHsOA7QCBVogqq/Ny3QuqjvoQ7qoQEaoQJNUPh5+Hn4BfgF+AV9LqhGvR5N9bqYemiARqhAEzRDC7QuKj0UfoJ8BfkK8hXkK8hXkK8g34R8E/JNqD/BL6lfMhWo+mXTDFW/YloXzXq/mtr89QrFJtBmoDiCJwRCJAghETKhECqg4pNWB/VQWVKYW8tqmHtrhkKoC4S5vYKBI3hCIESCEBLBnKNBIVSA6wmO4AmBYM5iIIREyIRCqABr2QXMORl4QiCYczYQQiJkQiFUgDXvAm6ZvRA8IRAiQQiJkAmFgC4IaPOANg9o82Bt7opBJhRCBVirL+AInhAI9LG+djr7IfHhuaMth7mlZ4gEWyTOIBEywdaJTXGiYe4J5lyv103H/e35PA2DbW93G55ug6ftNBzO3cPhMo6b7td2vMwPfZy2h1nP20nvaiLD4VVVDd/242B03dyi+69Dc0Ssc26Nlm+Ha68jXpu9IV4XP+J1+TfEp8zaU+kb4nNg/Tm2vF/bnPWH3BKfAuOzb4pfv38uDfGxCuJjbclfJCFecsv8J8/6k7TUL4H1S2yKX98vvuX7iVvf71v6Rwr7R2rL+pO8fv/aVH/K6/y1xOuhiwXoueuugu8bVFagB7P0/wZ6vLsZuNBi4PItA/lpBl+V4P0/PoLv121Yj5n3Dk862O72018H4atZTfvtyzhg+HY57O7unn+feIcH6dN03A2vl2kwp9tpWn8eQwmb2Mcn/WPSkct540rWkZ0/Hi0131cbOntW74Zcn66W2h8=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap index d8b0674aa16..5e2f5204970 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap @@ -76,8 +76,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZZBbuMwDEXv4nUWpiRScq9SFIWbuoUBwwncZIBBkbsPafOn7SLFjAbd5D/FIiV9UbLfm+fh6fz6OM4vh7fm7v69eVrGaRpfH6fDvj+Nh1n/fW9a+6FOJexUyTW4Rtfkyq7S3EXT7Fpcu1VD27qSa3CNrsmVXcU1uxZXz0eeL6gmU83Dpponm7KruGqeYlpcu01j60quwTW6JlePT9q/M9X+Yhpcoyt7Px2XWoMMKAAdmkiBWwABNBvZsjhuw3ByZVe3gd0GcRvEbRW3VdxWcVvFbRW3VdxW8XxiczIfcwuwOZmjOQA0J9kac3Io1sfcLfaPLbvoOGQTLQLIgALoHKzGNiBAAERAAvC2wVZoq+ZVoxWWzSFaZYXWIAAiIAEYoFkCGWRAAXQOVmIbEMAyB4MISAAGCCADCsAyq9vRinYDAgSAZU4GCcAAAWRAAXQOVs7BbLF63iAAIiABGCDb9kWr8g0KoHOwwt+AAAEQAWsZXC67BjfK42kZBrtQPl0xevEc+2WYT83dfJ6mXfOrn85rp7djP6966hd9qhs1zM+qmvBlnAajy+4jur0dmpPHEtE1mr+G04+Fawl6vNZgRbweS4/Xg1kRLxnWSWlrlh+x/pxuji8/F69vEcIGdOXTDvx9gk7gYBvk3xPo++ojAcWaBHYpYQb8vzO4tQQK35igL1W4GCjfyvBNGUfsgl4MNcdAIuJzqIq/HqNcKuJTxx6fupr5M2MHONccYwlYv3DN+vkaz6Fm/RzhH6eq8ekaH2quIZZ89a9q/IL6467mGuZ83b/u6/gP2ur34/Lly/dimZaxf5oGb76c5/2np6ffRzzBl/NxOeyH5/MyWKaPz2f9ubfqjSU+6HtRW5TzjkrWFq0PU95FDtYka2qlRS4PF5vaHw==", + "bytecode": "H4sIAAAAAAAA/+2dR3AbyRWGB0QgwSBAoijt2mtbu8722gZIQMQ6coNyonKWCIKkcs4Z2pxzzkGbo3a1UdLmq0++uspnH1zlg303njSP+PnQDwuZGG09l6cKNaG/7vd3T3dPT093I+Sd34qlX8g/jog9XZ/kjdyY7fH3qdFt6TqGlQpKY8iAxgYDGsMGNEYMaIwa0BgzoLHRgMYmAxrjBjQ2G9DYYkBjqwGNbQY0jjGgMWFAY9KAxrEGNI4zoLHdgMbxBjR2GNA4wYDGiQY0XmJA46UGNH7HgMbvGtB4mQGN3zOg8fsGNP6gjhqxDy4ovZMMpOnlBjReYUDjDw1o/JEBjT82oPEnBjT+1IDGnxnQ+HMDGn9hQOMvDWi80oDGXxnQ+GsDGn9jQGPKgMa0AY2dBjR2GdCYMaAxa0DjZAMauw1ozBnQeJUBjb81oPF3BjT+3oDGPxjQ+EcDGv9kQGOPAY1XG9B4jQGN1xrQeJ0BjVMMaJxqQOM0AxqnG9A4w4DGmQY0zjKgcbYBjXMMaJxrQOM8Axp7DWicb0DjAgMaFxrQuMiAxsUGNC4xoHGpAY3LDGhcbkDjCgMaVxrQuMqAxtUGNK4xoHFtABqD0NlXR50XY/543sC97zegsWBA44ABjYMGNA4Z0LjOgMb1BjRuMKBxowGNmwxo3GxA4xYDGrca0LjNgMbtBjTuMKBxpwGNuwxo3G1A4x4DGvca0LjPgMb9BjQeMKDxoAGNhwxoPGxA4xEDGo8a0HjMgMZiABrPbcfhmEQ3lH60OCEt/keL69HidbQ4HC2+Roub0eJhtDgXLX5Fi0vR4k20OFKy9KPFfWjxHFqchhZ/ocVVaPESWhyEFt+gxS1o8QhanIEWP6DFBWjyPk2On1T6XV76XVH60YRkmvBLE2ppwipNCKUJlzShkSYM0oQ8mvBGE8powhZNiKJY0YQemjBDE1JowgdNqKAJCzQhgAbc04B2GjBOA7JpwDMNKKYBuzwg9urS75rSjwYk0oA/GlBHA9ZoQBgNuKIBTTRgiAbk0IAXGlBCAzZoQERv6Ucf9OmDOX2Qpg++9EGVPljSB0H64EYftOiDEX2QoQ8e9EGBOuypQ7yv9KMOXOogpQ5I6uCjDjTqoKIOIOpgoQ4M6iCgF3B6waUXSHpBoxcgesGgBjw1kKkBSg08akBRA4UaAPSApQcYPSCoAqYKjioQKqBUAIqevnFmLvoHcf+8AdzruKBlOi7s1jP8XKqQjTviV0f9XXE/zGgg4efSHH4sGP2pRj+c64rl8DEubDcsOOknBMwUYKYozFRgpirMNGCmKcx0YKYrzAxgZijMTGBmKswsYGYpzGxgZivMHGDmKMxcYOYqzDxg5ilMLzC9CjMfmPkKswCYBQqzEJiFCrMImEUKsxiYxQqzBJglCrMUmKUKswyYZQqzHJjlCrMCmBUKsxKYlQqzCphVCrMamNUKswaYNQqzFpi1CtMHTJ/C5IHJK0w/MP0KUwCmoDADwAwozCAwgwozBMyQwqwDZp3CrAdmvcJsAGaDwmwEZqPCbAJmk8JsBmazwmwBZovCbAVmq8JsA2abwmwHZrvC7ABmh8LsBGanwuwCZpfC7AZmt8LsAWaPwuwFZq/C7ANmn8LsB2a/whwA5oDCHATmoMIcAuaQwhwG5rDCHAHmiMIcBeaowhwD5pjCFIEpKsxxYI4rzPXAXK8wNwBzg8LcCMyNCnMTMDcpzM3A3KwwtwBzi8LcCsytCnMbMLcpzO3A3K4wdwBzh8LcCcydCnMXMHcpzN3A3K0w9wBzj8LcC8y9CnMfMPcpzP3A3K8wDwDzgMI8CMyDCvMQMA8pzMPAPKwwjwDziMI8CsyjCvMYMI8pzOPAPK4wTwDzhMI8CcyTCvMUME8pzNPAPK0wzwDzjMI8C8yzCvMcMM8pzPPAPK8wLwDzgsKcAOYEMGFgXgTmRSWcl4B5SWFeBuZlhXkFmFcU5lVgXlWY14B5TWFeB+Z1hXkDmDcU5k1g3lSYt4B5S2HeBuZthXkHmHcU5iQwJxXmXWDeVZj3gHlPYU4Bc0ph3gfmfYX5AJgPFOZDYD5UmI+A+UhhPgbmY4X5BJhPFOY0MKcV5gwwZxTmLDBnFeZTYD5VmM+A+UxhPgfmc4X5ApgvFOZLYL5UmK+A+Uphvgbma8HE4dgDfz3+eWoUWy6VyQTbF9aZavPDjJajOBwXtt0YjO10SNjzvHKaoxvbbxZa66vn/J8/oT3WI9OH+4XbmCmW9YSEW6RYGQ92i4Ib31/6DnESOJm3WAffmyD6qHOpyQHnu8y3mO8y/5P5TrpFipXxuNB8h3krKtw4vWg74YfH9y0SQDrlUvns/+tCW3kyItwixcp4XGiexLwVBe4MHJ/1j4N9NheyQdbBtLU79KMt2hqL3vDG+SUM1zhdOZ2bkBducXCLFEfaafbPI2AHw2IdUcGf9s8T/j4Gfth/0mE/JuyP0O24JtMl7uDjDp7y2in/uMX/UR5a6QfE+S5W9uqFlD3awmtsK+lV1l/YXggJf6O1I/M9bXFxzlyPf54a5cbxaHTEg203CV31sV37c53tN3tB1unlOrRJ6JHp0yDSJx5M+qRCInzUE3ekD9/LZocbh9Xin0chLORxLAXyeMz+8dpf/H3SEabMu81eZXzwGpb1P/vHrnJQz7o72Lye6gw2r3QO68d09+qnf3iMR0sw6TMcfmsg4WeG06cNwq9jPZqWbVHMq5SP/yrsjvHPsRyi3yZwR74hVA7zb/61hFfZ1uBnVrU28n/7nEKdzUIDPiu57RdsWzyVkvU2t3mkzRjER5Z1rPOj4trf/T2d50NlPximBzZjVdIu4tDj6jfAvPMPb6TNMOgMO/zGRTyY/zeE+U//OOHwHxX+2e1f/j7odvQ4CNcTtlpAc9ihmfW63oMicK1B8NWe+ZgGrnzeVENYDVVstzr4piq2UVerYjviVeZRV5xiDk1hR9xcZV+2i8OOeOA95GdHrfmd45tw6Oc8mBRh9PjnqVFurG+sV07PsMNmAtIPeTz2vHJZ4mtNfuRddUrCq0xHvCbrlEaHnjaHv5CyZzvymrTjug8ynRo89/OM6yS+p+OEfw/8jQc3WRcw0w7Xkcd8x34jir8waJZu7LcWXWFg8Hq7oqsd7Lr8YRsR3RoULczzPR8j7NJG5epSkc84H+NzZIwj3KjgrwyVw7zMP044/NeSF4Mtx7X307H9Zq8yrwfxjpkUejDtaJPvmGMD0VN+x3Tld1edM9Yrlxe8Z6iPw5rk7139KBy2K9+ExDGzLZ47n7YJOyGHnZBXmcaueko+o9CN/WJ7nvVjWsjnYofDJt5/2R6Y4OA7HDrYNtYFE6roStSgC9O1XdEVU3gOLyr4LDzrBkLuMKNKXFuVMHMQ5jr/2NWnPdxX6e8j4FbPvizSsRF0yPsYLY6M90RwCzt4mScucfATgeE0Swpe5g+t7sHyK8si+48pPD5HkL+2yn0fD35c7apWJcypjvteLT9Xa3e77kGHI16ucjZRhFWtPsc6UWrVypJMU+bnVElTLH+1pCnzvTWWJc6f30ZZwntbS1lC/kLLEqdZtbLkahN3CDvflCfks8Z1/7HdFmS6d+fOv/Oc0+qHz/lIbhFwR77PD0D2QdI+MgqdQ9359FBXfiifzQ8MZAp5+U5AG/YP1Nt+vrsrV+jMFLr7s135rskX3X4mm+8u5LvT6asy6cFMOnux7Reyk/sLJRGpwTSddn6Tfde3Q6xHaOPvj/h9EnkOLyr4rX4AVC62i7oq6rBH3LEqXEjZnwvDcS1SHHnN9d0Sv+cyz7abi5Ua2a0F3LCOo63VP8f0wrBYR1Twh/0A+J7gN1j2n3TYbxL2R+h2XJPfc1scfIuDp/uzR9QbGPd6v3udsynCx2tSG+cdytf/AY14AvKZkQAA", + "debug_symbols": "tZZBbuMwDEXv4nUWpiRScq9SFIWbuoUBwwncZIBBkbsPafOn7SLFjAbd5D/FIiV9UbLfm+fh6fz6OM4vh7fm7v69eVrGaRpfH6fDvj+Nh1n/fW9a+6FOJexUyTW4Rtfkyq7S3EXT7Fpcu1VD27qSa3CNrsmVXcU1uxZXz0eeL6gmU83Dpponm7KruGqeYlpcu01j60quwTW6JlePT9q/M9X+Yhpcoyt7Px2XWoMMKAAdmkiBWwABNBvZsjhuw3ByZVe3gd0GcRvEbRW3VdxWcVvFbRW3VdxW8XxiczIfcwuwOZmjOQA0J9kac3Io1sfcLfaPLbvoOGQTLQLIgALoHKzGNiBAAERAAvC2wVZoq+ZVoxWWzSFaZYXWIAAiIAGsWslAABlQAJ2DldgGBLDMwSACEoABAsiAArDM6na0ot2AAAEQAQnAAMucDDKgACyzuWHlvAEBAiACEoABsm1ftCrfoAA6Byv8DQgQABGwlsHlsmtwozyelmGwC+XTFaMXz7FfhvnU3M3nado1v/rpvHZ6O/bzqqd+0ae6Y8P8rKoJX8ZpMLrsPqLb26E5eSwRXaP5azj9WLiWoMdrDVbE67H0eD2YFfGSYZ2Utmb5EevP6eb48nPx+hYhbEBXPu3A3yfoBA62Qf49gb6vPhJQrElglxJmwP87g1tLoPCNCfpShYuB8q0M35RxxC7oxVBzDCQiPoeq+OsxyqUiPnXs8amrmT8zdoBzzTGWgPUL16yfI9bPqSr+Oj6HGv+YruOHmmuIC+qHu5prlPPV/65q/ZKv+/c1/kFb/X5cvnz5XizTMvZP0+DNl/O8//T09PuIJ/hyPi6H/fB8XgbL9PH5rD/3Vr2xxAd9L2qLct5Rydqi9WHKu8jBmmRNrbTI5eFiU/sD", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index d8b0674aa16..5e2f5204970 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -76,8 +76,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZZBbuMwDEXv4nUWpiRScq9SFIWbuoUBwwncZIBBkbsPafOn7SLFjAbd5D/FIiV9UbLfm+fh6fz6OM4vh7fm7v69eVrGaRpfH6fDvj+Nh1n/fW9a+6FOJexUyTW4Rtfkyq7S3EXT7Fpcu1VD27qSa3CNrsmVXcU1uxZXz0eeL6gmU83Dpponm7KruGqeYlpcu01j60quwTW6JlePT9q/M9X+Yhpcoyt7Px2XWoMMKAAdmkiBWwABNBvZsjhuw3ByZVe3gd0GcRvEbRW3VdxWcVvFbRW3VdxW8XxiczIfcwuwOZmjOQA0J9kac3Io1sfcLfaPLbvoOGQTLQLIgALoHKzGNiBAAERAAvC2wVZoq+ZVoxWWzSFaZYXWIAAiIAEYoFkCGWRAAXQOVmIbEMAyB4MISAAGCCADCsAyq9vRinYDAgSAZU4GCcAAAWRAAXQOVs7BbLF63iAAIiABGCDb9kWr8g0KoHOwwt+AAAEQAWsZXC67BjfK42kZBrtQPl0xevEc+2WYT83dfJ6mXfOrn85rp7djP6966hd9qhs1zM+qmvBlnAajy+4jur0dmpPHEtE1mr+G04+Fawl6vNZgRbweS4/Xg1kRLxnWSWlrlh+x/pxuji8/F69vEcIGdOXTDvx9gk7gYBvk3xPo++ojAcWaBHYpYQb8vzO4tQQK35igL1W4GCjfyvBNGUfsgl4MNcdAIuJzqIq/HqNcKuJTxx6fupr5M2MHONccYwlYv3DN+vkaz6Fm/RzhH6eq8ekaH2quIZZ89a9q/IL6467mGuZ83b/u6/gP2ur34/Lly/dimZaxf5oGb76c5/2np6ffRzzBl/NxOeyH5/MyWKaPz2f9ubfqjSU+6HtRW5TzjkrWFq0PU95FDtYka2qlRS4PF5vaHw==", + "bytecode": "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", + "debug_symbols": "tZZBbuMwDEXv4nUWpiRScq9SFIWbuoUBwwncZIBBkbsPafOn7SLFjAbd5D/FIiV9UbLfm+fh6fz6OM4vh7fm7v69eVrGaRpfH6fDvj+Nh1n/fW9a+6FOJexUyTW4Rtfkyq7S3EXT7Fpcu1VD27qSa3CNrsmVXcU1uxZXz0eeL6gmU83Dpponm7KruGqeYlpcu01j60quwTW6JlePT9q/M9X+Yhpcoyt7Px2XWoMMKAAdmkiBWwABNBvZsjhuw3ByZVe3gd0GcRvEbRW3VdxWcVvFbRW3VdxW8XxiczIfcwuwOZmjOQA0J9kac3Io1sfcLfaPLbvoOGQTLQLIgALoHKzGNiBAAERAAvC2wVZoq+ZVoxWWzSFaZYXWIAAiIAGsWslAABlQAJ2DldgGBLDMwSACEoABAsiAArDM6na0ot2AAAEQAQnAAMucDDKgACyzuWHlvAEBAiACEoABsm1ftCrfoAA6Byv8DQgQABGwlsHlsmtwozyelmGwC+XTFaMXz7FfhvnU3M3nado1v/rpvHZ6O/bzqqd+0ae6Y8P8rKoJX8ZpMLrsPqLb26E5eSwRXaP5azj9WLiWoMdrDVbE67H0eD2YFfGSYZ2Utmb5EevP6eb48nPx+hYhbEBXPu3A3yfoBA62Qf49gb6vPhJQrElglxJmwP87g1tLoPCNCfpShYuB8q0M35RxxC7oxVBzDCQiPoeq+OsxyqUiPnXs8amrmT8zdoBzzTGWgPUL16yfI9bPqSr+Oj6HGv+YruOHmmuIC+qHu5prlPPV/65q/ZKv+/c1/kFb/X5cvnz5XizTMvZP0+DNl/O8//T09PuIJ/hyPi6H/fB8XgbL9PH5rD/3Vr2xxAd9L2qLct5Rydqi9WHKu8jBmmRNrbTI5eFiU/sD", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index a4002bf9c31..9f74679cbc1 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -88,7 +88,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1cd3PTThC9OPn9gIQeek3oLaCTLFumht57J7SY2JTQey/5bPC92CUnIuSFf/Ruhh28MztSnuzze7d7p5VOSocZtzHyL26/g7zTbbvIJ+ew/wTsfwHrEbCpAjZNwGYLWK+AzXFYp+M+10wYHy+5Y12ON/Oc5L4zhbzb8ZzqeEwnn0E+k3yW49HrfiffN/MEPvMFbIGALRSwRQK2WMCWCNhSAVsmYMsFrE/A+gVshYCtFLBVArZawNYI2FoBWydg6wVsg4BtFLBNAjYgYJsFbIuABQJmBSwUsEjAygIWO4zzmK1kWq3DbQfdNihmdi6grea43RLoFm3bpjvZvqi4bdXkOpCBvhyBTo8dFgWVcrlRDRs2ssNBWKsncVCO65XEJjZO4pEwiaJGUk6qtXqtGtRsOWrYZlwLm66tSvG2ItdWUPUUyHzCFeVZwcUi8MkzUcKzBsxtnzy34niWffLchuNZ9clzO45n4pPnDhzPuk+eO3E8Gz557sLxbPrkOQjjaUOfPHfjeMZca3Ch0u3a44HF8zPPfTyv8Jjl8cC5lsZxt2m1Uk5jUMwiQM3ys7/2ANsqGbnIBekOfpczQTGzexRw3OuBo0i0aBLsgxGtDEvJhOxUTcFCc8TFKZdQ4Nnul84smpz7PSSPFJyiPA/AeFbqWgcRMFbeBhEuTp4H0X5gch40OgbRIRxPtWciYKy8DaJDSI5aa9BEAcfD7UAFtqaA4xEPHEWiRafooziiodaEOqqA4zGjJKGO44hGWhPquAKOJ0z7VGK3KuB40igZ+adwRGOtCXVKAcfTRklCncERrWhNqDMKOJ417VOJ3aaA47l2oAK7XQHH8x44ikSLTtEXcERrWhPqggKOF5EceVWePV2V57tSfMODr1H5soIrVi4y+LzAUw5n80XTan/zqvwlYFslM/HUZNZAur0lzSUFHC8b8CnNKAwUtBM8cbzigeMPQy/UZTuz6MgfAvLSmpxDCjheNUqScwiYnNfayWmvKeB43YBrN34dJq1HeFrm7L9uWg2dvMj67IbB1mddxlvyenu04Ib5+5MXuqruOVD/9KMFN9uB0vFowXA7UDqW7OtIjkyOX8XuzJC9aSZeeR3O7NfdPr92OELOr8/wqym3ye+Q3yW/Rz5Kfp/8AflD8kfkj8mfkD8lf0b+nPwF+UvyV+Svyd+QvyV/R/6e/AP5R/JP5J/N+CvxY+ZXy9cSRc/Z84CBumXwyeRD83yg5hElmhcANTeUaF4I1NxUonkRUPNtJZoXAzXfUaJ5CVDzXSWalwI131OieRlQ86gSzcuBmu8r0dwH1PxAieZ+oOaHSjSvAGp+pETzSqDmx0o0rwJqfqJE82qg5qdKNK8Ban6mRPNaoObnSjSvA2p+oUTzeqDml0o0bwBqfqVE80ag5tdKNG8Can6jRPMAUPNbJZo3AzW/U6J5C1DzeyWaA6DmD0o0W6Dmj0o0h0DNn5RojoCaPyvRXAZq/qJEcwzUPAbUzGvh6cMNPv/FeX/mN3hdmtdped2S1/F4XYvXeXjdg9cB+L443yfuc9/j+2p8n4nvu/B9CL4u5+tUvm7j6xiu67nO5bqP6yCuC/g8yQHleZTnFR5nnHdxTmNqAz/jPnP6la+j3/Kfmey2U9y2O3Oc+2jQ/R0UszBtv8dP+8Ek02rdmf2e3LF0HEgPwHT85u9Sbvunz+bxLDZNOJa22eu2Wb6pju+ooNMOe2AAAA==", - "debug_symbols": "ndTNbqpQFIbhe9ljB3ut/e+tnJwY1G1DQtBQaNIY771LvoW1gzYto1fF71EC4WqOdT+97Nr+dH41239Xsx/armtfdt350IztuZdPr7eNWd7uxqFW+cg8HZfVpRlqP5ptP3Xdxrw13TR/6fXS9HPHZpCjdmNqf5QKeGq7en9123yu7fdTdk7H7PJjHv6wp8e+rNnHx+/HsGZflr2ztGLvQ9S9T27NvnjdB16zD64s+xC/26cfzt/a5QTY0tM/+D1A6QFweAb+y5vm0A5f7lnj2WzlmnuHeCQgURRJQjJS5gSLEMKIQzwSECgBSoASoEQoEUqEEqFEKBFKhBJFkUsUM1LmJIsQwohDPBKQiEBJUBKUDCVDyVAylAwlQ8lQMpQMJUMpogQJIYyIIte1eCQgEUnzBS0ZKXPIWi1pWeu0Xhu0UZu0WaseqUfqkXqkHqlH6pF6pB6pR+qxeqweq8fqsXqsHqvH6vHdu93v46Ft9l3V5+dp6g9Pj9Px/bIcWR64l+F8qMdpqPfbeD4mN/YH", + "debug_symbols": "ndTNbqpQFIbhe9ljBnut/d9bOTkxqNuGhKCh0KQx3nuXfAtrB20aRq+K36MEwtUc635+3XXD6fxmXv5dzX7s+r573fXnQzt150E+vd4as77dTWOt8pF5Oi6rSzvWYTIvw9z3jXlv+3n50tulHZZO7ShHbWPqcJQKeOr6en91a77W9ucpR6djjuExD3/fu8fe5U17euzLln1Zf99Z2rD3IereJ7dlX7zuA2/ZB1fWfYg/7dMv52/tegJs6ekf/B2g9AA4PAP/5U176MZv96zxLN9sjHeIRwIS5TpIEpKRsiRYhBBGHOKRgEAJUAKUACVCiVAilAglQolQIpQoilyimJGyJFmEEEYc4pGARARKgpKgZCgZSoaSoWQoGUqGkqFkKBlKESVICGFEFLmuxSMBiUhaLmjJSFlC1mpJy1qn9dqgjdqkzVr1SD1Sj9Qj9Ug9Uo/UI/VIPVKP1WP1WD1Wj9Vj9Vg9Vo/v3u1+H49du++rPj9P83B4epxOH5f1yPrAvYznQz3OY73fxssxubE/AQ==", "file_map": { "50": { "source": "struct Bar {\n inner: [u8; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(mut x: [Foo; 3], y: pub Field, hash_result: pub [u8; 32]) {\n // Simple dynamic array set for entire inner most array\n x[y - 1].bar.inner = [106, 107, 10];\n let mut hash_input = x[y - 1].bar.inner;\n // Make sure that we are passing a dynamic array to the black box function call\n // by setting the array using a dynamic index here\n hash_input[y - 1] = 0;\n let hash = std::hash::blake3(hash_input);\n assert_eq(hash, hash_result);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap index a4002bf9c31..9f74679cbc1 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_0.snap @@ -88,7 +88,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1cd3PTThC9OPn9gIQeek3oLaCTLFumht57J7SY2JTQey/5bPC92CUnIuSFf/Ruhh28MztSnuzze7d7p5VOSocZtzHyL26/g7zTbbvIJ+ew/wTsfwHrEbCpAjZNwGYLWK+AzXFYp+M+10wYHy+5Y12ON/Oc5L4zhbzb8ZzqeEwnn0E+k3yW49HrfiffN/MEPvMFbIGALRSwRQK2WMCWCNhSAVsmYMsFrE/A+gVshYCtFLBVArZawNYI2FoBWydg6wVsg4BtFLBNAjYgYJsFbIuABQJmBSwUsEjAygIWO4zzmK1kWq3DbQfdNihmdi6grea43RLoFm3bpjvZvqi4bdXkOpCBvhyBTo8dFgWVcrlRDRs2ssNBWKsncVCO65XEJjZO4pEwiaJGUk6qtXqtGtRsOWrYZlwLm66tSvG2ItdWUPUUyHzCFeVZwcUi8MkzUcKzBsxtnzy34niWffLchuNZ9clzO45n4pPnDhzPuk+eO3E8Gz557sLxbPrkOQjjaUOfPHfjeMZca3Ch0u3a44HF8zPPfTyv8Jjl8cC5lsZxt2m1Uk5jUMwiQM3ys7/2ANsqGbnIBekOfpczQTGzexRw3OuBo0i0aBLsgxGtDEvJhOxUTcFCc8TFKZdQ4Nnul84smpz7PSSPFJyiPA/AeFbqWgcRMFbeBhEuTp4H0X5gch40OgbRIRxPtWciYKy8DaJDSI5aa9BEAcfD7UAFtqaA4xEPHEWiRafooziiodaEOqqA4zGjJKGO44hGWhPquAKOJ0z7VGK3KuB40igZ+adwRGOtCXVKAcfTRklCncERrWhNqDMKOJ417VOJ3aaA47l2oAK7XQHH8x44ikSLTtEXcERrWhPqggKOF5EceVWePV2V57tSfMODr1H5soIrVi4y+LzAUw5n80XTan/zqvwlYFslM/HUZNZAur0lzSUFHC8b8CnNKAwUtBM8cbzigeMPQy/UZTuz6MgfAvLSmpxDCjheNUqScwiYnNfayWmvKeB43YBrN34dJq1HeFrm7L9uWg2dvMj67IbB1mddxlvyenu04Ib5+5MXuqruOVD/9KMFN9uB0vFowXA7UDqW7OtIjkyOX8XuzJC9aSZeeR3O7NfdPr92OELOr8/wqym3ye+Q3yW/Rz5Kfp/8AflD8kfkj8mfkD8lf0b+nPwF+UvyV+Svyd+QvyV/R/6e/AP5R/JP5J/N+CvxY+ZXy9cSRc/Z84CBumXwyeRD83yg5hElmhcANTeUaF4I1NxUonkRUPNtJZoXAzXfUaJ5CVDzXSWalwI131OieRlQ86gSzcuBmu8r0dwH1PxAieZ+oOaHSjSvAGp+pETzSqDmx0o0rwJqfqJE82qg5qdKNK8Ban6mRPNaoObnSjSvA2p+oUTzeqDml0o0bwBqfqVE80ag5tdKNG8Can6jRPMAUPNbJZo3AzW/U6J5C1DzeyWaA6DmD0o0W6Dmj0o0h0DNn5RojoCaPyvRXAZq/qJEcwzUPAbUzGvh6cMNPv/FeX/mN3hdmtdped2S1/F4XYvXeXjdg9cB+L443yfuc9/j+2p8n4nvu/B9CL4u5+tUvm7j6xiu67nO5bqP6yCuC/g8yQHleZTnFR5nnHdxTmNqAz/jPnP6la+j3/Kfmey2U9y2O3Oc+2jQ/R0UszBtv8dP+8Ek02rdmf2e3LF0HEgPwHT85u9Sbvunz+bxLDZNOJa22eu2Wb6pju+ooNMOe2AAAA==", - "debug_symbols": "ndTNbqpQFIbhe9ljB3ut/e+tnJwY1G1DQtBQaNIY771LvoW1gzYto1fF71EC4WqOdT+97Nr+dH41239Xsx/armtfdt350IztuZdPr7eNWd7uxqFW+cg8HZfVpRlqP5ptP3Xdxrw13TR/6fXS9HPHZpCjdmNqf5QKeGq7en9123yu7fdTdk7H7PJjHv6wp8e+rNnHx+/HsGZflr2ztGLvQ9S9T27NvnjdB16zD64s+xC/26cfzt/a5QTY0tM/+D1A6QFweAb+y5vm0A5f7lnj2WzlmnuHeCQgURRJQjJS5gSLEMKIQzwSECgBSoASoEQoEUqEEqFEKBFKhBJFkUsUM1LmJIsQwohDPBKQiEBJUBKUDCVDyVAylAwlQ8lQMpQMJUMpogQJIYyIIte1eCQgEUnzBS0ZKXPIWi1pWeu0Xhu0UZu0WaseqUfqkXqkHqlH6pF6pB6pR+qxeqweq8fqsXqsHqvH6vHdu93v46Ft9l3V5+dp6g9Pj9Px/bIcWR64l+F8qMdpqPfbeD4mN/YH", + "debug_symbols": "ndTNbqpQFIbhe9ljBnut/d9bOTkxqNuGhKCh0KQx3nuXfAtrB20aRq+K36MEwtUc635+3XXD6fxmXv5dzX7s+r573fXnQzt150E+vd4as77dTWOt8pF5Oi6rSzvWYTIvw9z3jXlv+3n50tulHZZO7ShHbWPqcJQKeOr6en91a77W9ucpR6djjuExD3/fu8fe5U17euzLln1Zf99Z2rD3IereJ7dlX7zuA2/ZB1fWfYg/7dMv52/tegJs6ekf/B2g9AA4PAP/5U176MZv96zxLN9sjHeIRwIS5TpIEpKRsiRYhBBGHOKRgEAJUAKUACVCiVAilAglQolQIpQoilyimJGyJFmEEEYc4pGARARKgpKgZCgZSoaSoWQoGUqGkqFkKBlKESVICGFEFLmuxSMBiUhaLmjJSFlC1mpJy1qn9dqgjdqkzVr1SD1Sj9Qj9Ug9Uo/UI/VIPVKP1WP1WD1Wj9Vj9Vg9Vo/v3u1+H49du++rPj9P83B4epxOH5f1yPrAvYznQz3OY73fxssxubE/AQ==", "file_map": { "50": { "source": "struct Bar {\n inner: [u8; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(mut x: [Foo; 3], y: pub Field, hash_result: pub [u8; 32]) {\n // Simple dynamic array set for entire inner most array\n x[y - 1].bar.inner = [106, 107, 10];\n let mut hash_input = x[y - 1].bar.inner;\n // Make sure that we are passing a dynamic array to the black box function call\n // by setting the array using a dynamic index here\n hash_input[y - 1] = 0;\n let hash = std::hash::blake3(hash_input);\n assert_eq(hash, hash_result);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index a4002bf9c31..9f74679cbc1 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -88,7 +88,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1cd3PTThC9OPn9gIQeek3oLaCTLFumht57J7SY2JTQey/5bPC92CUnIuSFf/Ruhh28MztSnuzze7d7p5VOSocZtzHyL26/g7zTbbvIJ+ew/wTsfwHrEbCpAjZNwGYLWK+AzXFYp+M+10wYHy+5Y12ON/Oc5L4zhbzb8ZzqeEwnn0E+k3yW49HrfiffN/MEPvMFbIGALRSwRQK2WMCWCNhSAVsmYMsFrE/A+gVshYCtFLBVArZawNYI2FoBWydg6wVsg4BtFLBNAjYgYJsFbIuABQJmBSwUsEjAygIWO4zzmK1kWq3DbQfdNihmdi6grea43RLoFm3bpjvZvqi4bdXkOpCBvhyBTo8dFgWVcrlRDRs2ssNBWKsncVCO65XEJjZO4pEwiaJGUk6qtXqtGtRsOWrYZlwLm66tSvG2ItdWUPUUyHzCFeVZwcUi8MkzUcKzBsxtnzy34niWffLchuNZ9clzO45n4pPnDhzPuk+eO3E8Gz557sLxbPrkOQjjaUOfPHfjeMZca3Ch0u3a44HF8zPPfTyv8Jjl8cC5lsZxt2m1Uk5jUMwiQM3ys7/2ANsqGbnIBekOfpczQTGzexRw3OuBo0i0aBLsgxGtDEvJhOxUTcFCc8TFKZdQ4Nnul84smpz7PSSPFJyiPA/AeFbqWgcRMFbeBhEuTp4H0X5gch40OgbRIRxPtWciYKy8DaJDSI5aa9BEAcfD7UAFtqaA4xEPHEWiRafooziiodaEOqqA4zGjJKGO44hGWhPquAKOJ0z7VGK3KuB40igZ+adwRGOtCXVKAcfTRklCncERrWhNqDMKOJ417VOJ3aaA47l2oAK7XQHH8x44ikSLTtEXcERrWhPqggKOF5EceVWePV2V57tSfMODr1H5soIrVi4y+LzAUw5n80XTan/zqvwlYFslM/HUZNZAur0lzSUFHC8b8CnNKAwUtBM8cbzigeMPQy/UZTuz6MgfAvLSmpxDCjheNUqScwiYnNfayWmvKeB43YBrN34dJq1HeFrm7L9uWg2dvMj67IbB1mddxlvyenu04Ib5+5MXuqruOVD/9KMFN9uB0vFowXA7UDqW7OtIjkyOX8XuzJC9aSZeeR3O7NfdPr92OELOr8/wqym3ye+Q3yW/Rz5Kfp/8AflD8kfkj8mfkD8lf0b+nPwF+UvyV+Svyd+QvyV/R/6e/AP5R/JP5J/N+CvxY+ZXy9cSRc/Z84CBumXwyeRD83yg5hElmhcANTeUaF4I1NxUonkRUPNtJZoXAzXfUaJ5CVDzXSWalwI131OieRlQ86gSzcuBmu8r0dwH1PxAieZ+oOaHSjSvAGp+pETzSqDmx0o0rwJqfqJE82qg5qdKNK8Ban6mRPNaoObnSjSvA2p+oUTzeqDml0o0bwBqfqVE80ag5tdKNG8Can6jRPMAUPNbJZo3AzW/U6J5C1DzeyWaA6DmD0o0W6Dmj0o0h0DNn5RojoCaPyvRXAZq/qJEcwzUPAbUzGvh6cMNPv/FeX/mN3hdmtdped2S1/F4XYvXeXjdg9cB+L443yfuc9/j+2p8n4nvu/B9CL4u5+tUvm7j6xiu67nO5bqP6yCuC/g8yQHleZTnFR5nnHdxTmNqAz/jPnP6la+j3/Kfmey2U9y2O3Oc+2jQ/R0UszBtv8dP+8Ek02rdmf2e3LF0HEgPwHT85u9Sbvunz+bxLDZNOJa22eu2Wb6pju+ooNMOe2AAAA==", - "debug_symbols": "ndTNbqpQFIbhe9ljB3ut/e+tnJwY1G1DQtBQaNIY771LvoW1gzYto1fF71EC4WqOdT+97Nr+dH41239Xsx/armtfdt350IztuZdPr7eNWd7uxqFW+cg8HZfVpRlqP5ptP3Xdxrw13TR/6fXS9HPHZpCjdmNqf5QKeGq7en9123yu7fdTdk7H7PJjHv6wp8e+rNnHx+/HsGZflr2ztGLvQ9S9T27NvnjdB16zD64s+xC/26cfzt/a5QTY0tM/+D1A6QFweAb+y5vm0A5f7lnj2WzlmnuHeCQgURRJQjJS5gSLEMKIQzwSECgBSoASoEQoEUqEEqFEKBFKhBJFkUsUM1LmJIsQwohDPBKQiEBJUBKUDCVDyVAylAwlQ8lQMpQMJUMpogQJIYyIIte1eCQgEUnzBS0ZKXPIWi1pWeu0Xhu0UZu0WaseqUfqkXqkHqlH6pF6pB6pR+qxeqweq8fqsXqsHqvH6vHdu93v46Ft9l3V5+dp6g9Pj9Px/bIcWR64l+F8qMdpqPfbeD4mN/YH", + "debug_symbols": "ndTNbqpQFIbhe9ljBnut/d9bOTkxqNuGhKCh0KQx3nuXfAtrB20aRq+K36MEwtUc635+3XXD6fxmXv5dzX7s+r573fXnQzt150E+vd4as77dTWOt8pF5Oi6rSzvWYTIvw9z3jXlv+3n50tulHZZO7ShHbWPqcJQKeOr6en91a77W9ucpR6djjuExD3/fu8fe5U17euzLln1Zf99Z2rD3IereJ7dlX7zuA2/ZB1fWfYg/7dMv52/tegJs6ekf/B2g9AA4PAP/5U176MZv96zxLN9sjHeIRwIS5TpIEpKRsiRYhBBGHOKRgEAJUAKUACVCiVAilAglQolQIpQoilyimJGyJFmEEEYc4pGARARKgpKgZCgZSoaSoWQoGUqGkqFkKBlKESVICGFEFLmuxSMBiUhaLmjJSFlC1mpJy1qn9dqgjdqkzVr1SD1Sj9Qj9Ug9Uo/UI/VIPVKP1WP1WD1Wj9Vj9Vg9Vo/v3u1+H49du++rPj9P83B4epxOH5f1yPrAvYznQz3OY73fxssxubE/AQ==", "file_map": { "50": { "source": "struct Bar {\n inner: [u8; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(mut x: [Foo; 3], y: pub Field, hash_result: pub [u8; 32]) {\n // Simple dynamic array set for entire inner most array\n x[y - 1].bar.inner = [106, 107, 10];\n let mut hash_input = x[y - 1].bar.inner;\n // Make sure that we are passing a dynamic array to the black box function call\n // by setting the array using a dynamic index here\n hash_input[y - 1] = 0;\n let hash = std::hash::blake3(hash_input);\n assert_eq(hash, hash_result);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 2c368ac6356..031fe9af695 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -95,8 +95,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pdXfjqowEAbwd+Gai870v6+yMQYVNyQEDasnOTG8+5mBr+q52M0ue+OvpcxHpVDu1bHd39533XA6f1Sbt3u1H7u+7953/fnQXLvzIEfvldEfyqHaUC1GmGCeZWMgQYa22rDqoIcBSp5VE8yLZCBBhhY66GGAyCPkEfIYeUzLdZkh5seYH2N+jPlxhAlKnhOtgQQZWuighwFGmCDynOR5lSBDCx30MMAIJS+oedEbSJChhQ56KHlRjTDBvBgMJMjQQgc9XPKssdBBD2U8qREmmBd1/WcJMrQQ5+t6ZhXHdR3JaMOXRigNfXRJG6k0Mhq6mmS1gThdzlmJzdNUV+WV2F3HttU34uUdkTfn0oztcK02w63v6+pP09/mkz4uzTB7bUYZlVm0w1GUwFPXt9qa6me1+bxUHiwUy6PzKPc/qKdHfV5THx7XD35NfS711tCKeucD6l20a+qzQ73nNfXe5lLvw4p62TjLAsje+XIHvh+Qyx2QzTX8PEC26GcA2TUBFJ8z8L+dwWd/gfiLmyDfkXIXZat/TdhKpzl0438fr0mjxq7Z9y26p9tweBm9/r2UkfLxu4znQ3u8ja0mPb+A8vPGMdac01Y2BulRopoySY/mwZBqjla7pN2ca3nUt5NO7R8=", + "bytecode": "H4sIAAAAAAAA/+1c23IbRRAdSbuWVrKxkhAghIvDLZBAWN0s80KFSnhI8uLkJQm5rmQ79/s9T/tTVPEGVXwFP8E3QNvb0lGrRxblHYepaKpcu9o5232mp3umZ2bLBbNVOv/+FbL7ILuWsis9329GC2OPZ9d4Z6WRo6zYFceCBxyLHnAsecAx8IBj6AHHOQ84lj3gWPGAY+QBx6oHHGsecJz3gOOCBxzf8YDjogcc6x5w3OMBx70ecNznAcd3HXB0wXN/jjyJ25IZLXnzfc+Dvn/fA44feMDxgAccP/SA40EPOH7kAcePPeD4iQccP/WA45IHHA95wPEzDzh+7gHHLzzg+KUHHL/ygONhDzh+7QHHbzzgeMQDjkc94PitBxy/84DjMQ84fu8Bx9gDjg0PODY94NjygGPbA44dBxw3C368QqTpIwn6CIEO+ekQnQ6p6RCYDlnpEJMOCekQjg656BCJDmnoEIQOGWgTnzbJaROaNnkPgQ7anKTNP9pco80r2hyizRfa3KDNA1qc0+J3KXuPFke0+KDknpJnSk4p+aPkipIXSg5o8qXJjSYPGpxp8KPWUfBScJDzUed2zHjhDlrNbqLsdxHqc/wYoxEJvXnKX4m7vUhpX478W1EmM3Aiv7XM8kM3/ONyJufndCgf28J6+cOuU+nQlqfgnQJgTgPmtAVzBjBnLJhVwKxaMGcBc9aCOQeYcxbMecCct2AuAOaCBXMRMBctmEuAuWTBXAbMZQvmCmCuWDBXAXPVgrkGmGsWzHXAXLdgEsAkFkwPMD0Lpg+YvgWzBpg1C2YdMOsWzAZgNiyYG4C5YcHcBMxNC+YWYG5ZMLcBc9uCuQOYOxbMXcDctWDuAeaeBXMfMPctmAeAeWDBPATMQwvmEWAeWTCPAfPYgnkCmCcWzFPAPLVgngHmmQXzHDDPLZgXgHlhwbwEzEsL5hVgXlkwrwHzWmAiuDcm77m23XE8V/2wYEbnJwNtYd1zbnQnBaHPmNGPnY3QXzUu84KtD4tRH/OR9ikK+1Tc8IlZfuRIPre3qrQX7c/tW8x+l6GuCvc2Weg/3Ja68n55d+zacGzXxn+1K/OZd8OnxTFeAz4yxhfc6G5PG+Osvyq4uuqbBTPeN2gfjnHGldIhn6qoC9LxdvA1hDruX+r3X6F9WId8JsUN+grzdhw3bcdx05zFzaDM4gbqPI+bruO4ab2l8/iKY7u2Z+PRqC1QH9vCmNl4xM89GY96juOmM4ubQZnFDdR5HjfrjuNm+S2dxzcc27U7G48GZTYeQZ3f41Gj6ThuVmZxMyizuIE613GzYMZ9LBB1RdDzS7p1ZR/AfsnvLKbTc3sW04zf3FlMszGtf/9fz2I0/y6JuiAdb4fm39y/6N8LZty3AsD9Afd/Zvduzwa7A3909B1RvE/hj7qolFMzKGybEjxju7KdK4gXdRHUBemonmr2OwA9KIt5hAL/e/Z7MbvOwTv8fl3RPyf0j/BWnkm7RAo+UvDkh79l9zT+8fh4Ih2Vdzy7xjsrg2/DToL8POOW2kAxMJ8R177lKuSmbznRxuQc5fe0cTc/+XHC4wqvtVgH2s7Vec60Yz7rrwqursb8iuAj7YNjvsx/+d26Uid9MFL0RIoeTVaYoyz2LRkrVI5n13hnpWHjXVTsU1LqZM6jxbWLMw3WG1p4BVCP+L+yK/nD3sJomxlT3EZmwYz3R0nIoHIy3bq6zdGG56OVCXy0sSpU8IHCX8uheBxgfw1SJ21LqE37C0MekmMoOE2bF06KT7QT20iLz7KQtZ09pW6NK/aX3M/T8u1Fo/umMUO/c/U9s2xHYGlHAO2X9kUbhOLZ39mV7HBUxKoWe5qt62bcdoGwj5scJI7fYNy0tbgZsbXgVFbsOafYc5q5GMfNusCjveV63phx33Wzhpl+Xcv6q2bcj1zkOEXFrlo/7NY8q/lFQeGzxwzj2zZnsqyl3WnDsub3XGR+je3iOplfGzPadrQLFmwTyTgGcShxkg/ajrmFoq6WvehyH4HKXsETdeGaNEjz199d2ZpfNu2bDu0gbY36Q4HfkwnAsyu+7uQfyG50k8ZGK9lIOsnaWrufSDtRGfSVA/39znKv3+4k8XqDfja306/tceCcRIX3SXAfBfEsLxT4A5kAirGDws9DRR/hjkzAFSzXTRnKsyAdfabtr+C+E+MH+/HpOEeuq0EdzpdU5rPfaC+UxTxCgT+cCeA+wb0ifr+u6K8I/SO8lWdy36mm4GsKnvpnScQNtj3vOW9Tp5CPzyQ39h0XcZV0Wyv9Zrvf7XVaSWt527jG/axJe/TT+rLMmVAW7/txvi/X61QcrzNjmRNgvq+tmYpmfI7FfCIUz1ayhmj5vra2CifYrqDwcb0eipT2ujgHKiltI/v/aLEZ7pHguzK/YPwJGNN/gvFK2pX9s2Z0v5TrKm3NoPk/P9fW5lpOxrq188RJsooTdGtn29EE3ciratEdwDPkWhH4OYVTqLRNjhNSri1uMIc6mW5dp/WtfwCs/ABGkWIAAA==", + "debug_symbols": "pdXfjqowEAbwd+Gai06nf32VjTGouCEhaFg9yYnh3c8MfFXPxW522Rt+LWU+sYVyr47t/va+64bT+aPavN2r/dj1ffe+68+H5tqdBzl7r4weKIdqQ7UYYYJ51hoDCVrI0EEPA4wwQeSR5FmVoIUMHfQwQMljNcG8aA0kaCFDBz0MEHkWeVbynMgGErSQoYMeBhhhgshzkudVghYydNDDACOUvKDmRW8gQQsZOuih5EU1wgTzYjCQoIUMHfRwyWPD0EEPZTypESaYF3X9ZwlayBDX63pmFed1Hclow5dGKA191EgbqTQyGrqaxNpAnC7nrMTmaaqr8krsrmPb6hvx8o7Im3Npxna4Vpvh1vd19afpb/NFH5dmmL02o4zKXbTDUZTAU9e32prqZ7X5vFQmGsUyxY9y//16ftRzWlVPj/q8pj6X32dDK+qdD6h3kdfUZ4d6b9fUe86l3ocV9bJxlgmUvfNlBr4fkMsMyOYafh4gW/QzgHhNAMXnHfjf3sFnf4HsF5Mg35Eyi7LVvyZspdMcuvG/j9ekUWPX7PsW3dNtOLyMXv9eykj5+F3G86E93sZWk55fQDm82Rhrm9NWNgbpUaKaMkmP5sGQahtZu6TdnGt51LeT3to/", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap index b757414408c..05ac992c70f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_0.snap @@ -95,8 +95,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tdVNjuIwEAXgu2Sdhav8z1UQQgFCK1IUUJqMNEK5+1TBMzALRtNp9YbPIaln4xj7Wh3a3fSx7Ybj6bNara/Vbuz6vvvY9qd9c+lOg3x7rYx+UHbVimrRwwAjTDDfZGMgQa5WrFrooIcBSp5VE8x3yUCCDC100MMAkUfII+Qx8pju/TLGxxgfY3yM8THGxxEmKHlOtAYSZGihgx4GGGGCyHOS51WCDC100MMAI5S8oOa73kCCDC100EPJS2qECUpeFoOBBBla6KCH4W7E81HXk9GGPBDVACNER0kXkq6gRKXBpSF9kb6E5ErDl4YuT53HFNFPSqWhK9TMc12VZb69jG2rq/xl3cu/4dyM7XCpVsPU93X1q+mn20Of52a4eWlGuSuR7XAQJfDY9a225vpZbd6XyuJAsbz+R7n/Qj096vOS+vDoP/gl9bnUW0ML6p0PqHfRLqnPDvWel9R7m0u9D+/q48/Vy+ZZXqDsny8z+P8BucygbLDh6wGyTT8DyC4JoPgcgf/uCN79BLL/mAQ5S8osynb/mrCRi2bfjX8daLNGjV2z61tcHqdh/3L38vtc7pQD8Tye9u1hGltNep6K8rGWpV9b5k1dyW60pkQ1ZZIrPbDWnLnmHPWS9Fm28qzfzDq0Pw==", + "bytecode": "H4sIAAAAAAAA/+1b23IbRRAdSStZu7KR4pCEOw6ESwKB1c0ST7iAopK8JHlJQu5r2cr9fn/TT1HFG/AXfAXfAG3PSGdnp2WBd5J0RVPlmtXO2e4zPdM9sz3rgtou3X//Cvo60HVJ13R/n0oXg13Tdby70sxRVuyLY0EAx6IAjiUBHAMBHMsCOFYEcFwQwLEqgGMogGMkgGNNAMdFARyXBHB8SwDHugCODQEc9wjguCyA414BHN/2wNEHz3058iRuKypd8ua7X8DYHxDA8R0BHN8VwPE9ARzfF8DxAwEcPxTA8SMBHD8WwHFFAMeDAjh+IoDjpwI4HhLA8TMBHD8XwPELARy/FMDxsACORwRw/EoAx68FcDwqgOM3Ajh+K4BjLIBjUwDHlgCObQEcOwI4dj1w3Cr48QqRpo8k6CMEOuSnQ3Q6pKZDYDpkpUNMOiSkQzg65KJDJDqkoUMQOmSgJD4lySkJTUneg6CDkpOU/KPkGiWvKDlEyRdKblDygF7O6eV3RT9HL0f08kGbe9o80+aUNn+0uaLNC20OaPGlxY0WDwrOFPyod+S85Bw0+WhwuypbzAD9rC9C/bsI7Tl+jNEMLb15yu/HvSR09C9H/u1Qywy8yG+vGvllP/zjBS3np9FEPvbF6DUfdh0bTWx5DJ4pAOY4YI4zmBOAOcFgTgLmJIM5BZhTDOY0YE4zmDOAOcNgzgLmLIM5B5hzDOY8YM4zmAuAucBgLgLmIoO5BJhLDOYyYC4zmCuAucJgrgLmKoNJAJMwmHXArDOYAWAGDGYDMBsMZhMwmwxmCJghg7kGmGsM5jpgrjOYG4C5wWBuAuYmg7kFmFsM5jZgbjOYO4C5w2DuAuYug7kHmHsM5j5g7jOYB4B5wGAeAuYhg3kEmEcM5jFgHjOYJ4B5wmCeAuYpg3kGmGcM5jlgnjOYF4B5YWFCuFYq77W20/G8Vn23pNLrk4K+GN0VP7qTgqVPqfTHzsrSHymf+4LtD4tRn+Fj26do2afqh09s5Iee5Jv+Ro7+ov1N/+r69wK0RXDNycL5Y/rScDy/8HLs2vRs1+Z/tavhs+iHT9v4eA342D6+5Ed3Z1YfN/oji6uvsVlS2bFB+xgfN7jSaMInstqCUbYfpi5DmxlfGvdfoX/Yhnym+Q3OFcPbs990PPtNa+434zL3G2gT7jc9z37TfkPX8b5nu3bm8ShtC9RnbKHUPB6Z+0Li0bpnv+nO/WZc5n4DbcL9ZtOz36y+oev40LNde/N4NC7zeARtsuNRs+XZb/pzvxmXud9Am2+/WVLZORZYbUXQ88touzZzAMclv7OYbuL3LKYVv7qzmFZz1vn9up7FuOZ3yWoLRtl+uOa3GV+c30sqO7cCwP0B13/qa79ng73xfPT0HVG818EfdVFZGKlxMbYpwT1jV2PnKuKtthDaglFaT6R/B6AHZRkeZQv/u/5d13UFnjHPNxz6K5b+FG/HPdsuoQMfOvA0D3/T1zX9R3PokBbkijn0t6Z/x7sqq4krruQof5xrWPAiP06MX1Ynps3ETJ/5QdSHY41tRn+kfO4HJzEztPjY9sGYifsA1/qMbfYcdO0LI4cel6xKjrLs99QyPLem63h3pcnxLjrsU3K02eu2373E5EzA6C0zvMqW7dBP87Rf2eLzl65pXh4ppG1qMMUZOXuy4VR/qkzhE/nhMz4fre3Ax84BufZQoYO/aw+FsZRKMPLSt4TmwdHChIdt97LFKZrSJypFywau9xJXPHK9l1QtWdPs6dJddeBxvMx41lXa5vhsXbnjj1L+v0Oy/SBQ2XXF9lt7jqXG0rr3t65J1o9MLHDZzuii0lBZ21Us+/jZ48TxK/Sbjm+/ccUa9Bvb/pjvwHcstIlS2bnr5x1m9vdaoz9S2XnkY00pOuzqGge/7/2zfTuAfPaoiX9z+xsja0XXrpxNgamNfsXobzh0mz3LLDHS07tA5ltKjJGhw05FlfUlHIOydS/UHXmZMdLHt6x+9kbZ3Bn2heo6YzPcF+OzEbQj/kBhInNZX7vW7aL1vGnbX0jb21fuZhnk2pxqyu0rdux37XtdPjltrcC5b+xrdOPeoTaDrNIU3a79XW2KbuS1yOgOVHYPZz+LbVw8NPJcsWuWvaXrf8dmne8+9x+9/nbc2+Kq5Rt/sksA7Yg/rAVgXFDQt7X/yXPYS5rDdjJMusnGRmeQ2P5ABf0hb/2D7ur6oNNN4s0m/WztpN+Vn8T9JBWT48QcKOIx5iC+CTGrra/tvDfqI9wPU3AFpt6S4bgXjNL3XLlRzBkb/PgsbZTlaNpq0Fa29Czq32gvlGV4lC389xDXqWCe1zzfcOivWvpTvB337JxxzYGvOfA0Pn3Lb7Dvee9Xt3Ra8vGezc3MHR9+lfTa/UGrM+itd9tJe3VHv/4H0a7aPFlhAAA=", + "debug_symbols": "tdVNjuIwEAXgu2Sdhav8z1UQQgFCK1IUUJqMNEK5+1TBMzALRj1p9YbPJq6X4Bj7Wh3a3fSx7Ybj6bNara/Vbuz6vvvY9qd9c+lOg3x7rYx+UHbVimrRwwAjTDDfZGMgQYYWOuhhgBFKHqv5LhlIkKGFDnooeVaNMMF8lw0kyNBCBz1EHiOPkceS50RrIEGGFjroYYARJog8J3leJcjQQgc9DDBCyQtqvusNJMjQQgc9lLykRpig5GUxGEiQoYUOehjuRoyP+v6NNmRAVAOMEDdKupB0RSQqDS4NXUv6spMrDV8aupx0HlPEfVIqDV2hZp7rqizz7WVsW13lL+te/g3nZmyHS7Uapr6vq19NP90GfZ6b4ealGeWqRLbDQZTAY9e32prrZ7V5XyqThWKZpke5/3q9fdTbtKieHvV5SX0u97eGFtQ7H1Dvol1Snx3qPS+p9zaXeh/e1cefq5fNs7wA2T9fZvDrAbnMoGyw4f8DZJt+BpBdEkDx+QT+u0/w7ieQ/cckyFlSZlG2+9eEjXSafTf+daDNGjV2za5v0T1Ow/7l6uX3uVwpB+J5PO3bwzS2mvQ8FeVjLUu/tsybupLdaE2JasokPT2w1py55hy1SzqWrYz1m1kf7Q8=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index b757414408c..05ac992c70f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_dynamic_nested_blackbox_input/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -95,8 +95,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tdVNjuIwEAXgu2Sdhav8z1UQQgFCK1IUUJqMNEK5+1TBMzALRtNp9YbPIaln4xj7Wh3a3fSx7Ybj6bNara/Vbuz6vvvY9qd9c+lOg3x7rYx+UHbVimrRwwAjTDDfZGMgQa5WrFrooIcBSp5VE8x3yUCCDC100MMAkUfII+Qx8pju/TLGxxgfY3yM8THGxxEmKHlOtAYSZGihgx4GGGGCyHOS51WCDC100MMAI5S8oOa73kCCDC100EPJS2qECUpeFoOBBBla6KCH4W7E81HXk9GGPBDVACNER0kXkq6gRKXBpSF9kb6E5ErDl4YuT53HFNFPSqWhK9TMc12VZb69jG2rq/xl3cu/4dyM7XCpVsPU93X1q+mn20Of52a4eWlGuSuR7XAQJfDY9a225vpZbd6XyuJAsbz+R7n/Qj096vOS+vDoP/gl9bnUW0ML6p0PqHfRLqnPDvWel9R7m0u9D+/q48/Vy+ZZXqDsny8z+P8BucygbLDh6wGyTT8DyC4JoPgcgf/uCN79BLL/mAQ5S8osynb/mrCRi2bfjX8daLNGjV2z61tcHqdh/3L38vtc7pQD8Tye9u1hGltNep6K8rGWpV9b5k1dyW60pkQ1ZZIrPbDWnLnmHPWS9Fm28qzfzDq0Pw==", + "bytecode": "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", + "debug_symbols": "tdVNjuIwEAXgu2Sdhav8z1UQQgFCK1IUUJqMNEK5+1TBMzALRj1p9YbPJq6X4Bj7Wh3a3fSx7Ybj6bNara/Vbuz6vvvY9qd9c+lOg3x7rYx+UHbVimrRwwAjTDDfZGMgQYYWOuhhgBFKHqv5LhlIkKGFDnooeVaNMMF8lw0kyNBCBz1EHiOPkceS50RrIEGGFjroYYARJog8J3leJcjQQgc9DDBCyQtqvusNJMjQQgc9lLykRpig5GUxGEiQoYUOehjuRoyP+v6NNmRAVAOMEDdKupB0RSQqDS4NXUv6spMrDV8aupx0HlPEfVIqDV2hZp7rqizz7WVsW13lL+te/g3nZmyHS7Uapr6vq19NP90GfZ6b4ealGeWqRLbDQZTAY9e32prrZ7V5XyqThWKZpke5/3q9fdTbtKieHvV5SX0u97eGFtQ7H1Dvol1Snx3qPS+p9zaXeh/e1cefq5fNs7wA2T9fZvDrAbnMoGyw4f8DZJt+BpBdEkDx+QT+u0/w7ieQ/cckyFlSZlG2+9eEjXSafTf+daDNGjV2za5v0T1Ow/7l6uX3uVwpB+J5PO3bwzS2mvQ8FeVjLUu/tsybupLdaE2JasokPT2w1py55hy1SzqWrYz1m1kf7Q8=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 8a7ececa055..2e139ef4295 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9VYS47TQBBtJ3a+DIngBKzZOONkkmUkwhFYsTIZZQ8LxAbJCyTYcQSuSjpTFb88V4xD3DOakqJ2d5dffbo+7USupEjG2F1BCvJHxqGMHdjv7n9rmafX0WxIctvEX6XzxdCwr0X9s6FgRmHwU8UP5P+0LzjvixIfbVG5g/1vDM8vXRkfoezX8wtp/+samzV23hXuSC3JPcb9pn3s27Gc0VvBuyEbHTwH9m8WkTwn+O6Mz0cuaD7NIpKn+rB/OuS7rqHrlPY8aaxExl7XWKvD2hSnOqDO0ZnRuap/LTl43so3cVVbOU5i2GszD1VWInixK/3FMtUe5MdnJ8+49kZGnxczsu/SM+LYRP90w/hncWPYqKR7PbIL9/qwh2fP1KU52uR9Nwdc5lMau7J2xsUpzlrW0ytouXqIl4O+gp+4qu4oPyH+VOYj0l/jbf2feu6W+WyX5bt8kd/fz7f5K8L31AE/tS0/X2ar7e18u/y0yPLs7p/ysU9Y+Y+9MGT+Kz7GdzvYd3ONVT17zltPcRHErsz794tgcZ56SkAu5qlzZS1Cfq7bA4Mfc13Pa0r86GurJ/RIZ6v3BK55je8OujZyQe8ys7p+gf7hu4PVv6a054nvDrEhJzbkWFgbwQqct0vuL0i6hzHHfQm//y7tS2qTx/8FuMzH+mAMqW7Wd4yntYzpdTRLSPYHkhvq+4brP8qauPN5Hzi3U45xvO9Z/afjqnGM8Z7Q2kcZrfuedfe38nfqqvcqzu26uhgo5xrXRZX/WHUxbuhX607KfQr38I5/rkf2DTlTY29TPIxDA/sp6yL322vqotp0aV3EeFXdOK8+y/iUdcvfWyfy3CtKO/B+56kvc60tzN8BG5H/q/Luf99c6aMDb1GV5/l+1vBFZ8YDhrEWF6drw6LK3y2q/Cp7VFR11L0x7OHd09MLmaO/EEv1SIj/h8z1TAbwjr4/NeQPSP6J3sYa58HY4B8b/P58viuejGh727XwIJPwcY1109hp8j32SD0m+P8xv2V8pv/HHHtez9DV0mdi+If/r7H6WqcGC9/Hd5E3qZEbuAfe1tmFPkoa2NXUR4wVGViO3kucfR74rHPrPLg3/QXFfuvOlRsAAA==", - "debug_symbols": "pdXfjqowEAbwd+Gai07/Tn2VjTGouCEhaFg9yYnh3c+Ub1D3wmQPe8OvFeaj0Fbu1bHd3z533XA6f1Wbj3u1H7u+7z53/fnQXLvzIL/eK1MOFKoN1RVFkACDPGMNIGCBAx4gxSLFIsUixSLFIcUhxSHFIcUhxUmKFSJIgEGe8QbQTHBAyp0QQAQJMMgz0QACFjggKV4IIIIEGOSZZAABCyQlCB4EEEECDPIMG0DAAqQwUhgpjBRGCiOFkZKRkpGSkZIlJQoeBBBBAgzyDBmjkipBqehUrwY1qkllNUMyKqmaVyaVi6xmWOZ1llSrOtWrcv9cjGpSy1ozpZG1Ecp6s6VBuCRY1al+uTIsjbiUlAXspqmulg2zu45tW/bLyw6SfXVpxna4Vpvh1vd19afpb/NFX5dmmL02o5yV7HY4ihJ46vq2tKb6WW3el4alNtCjOPy8mrWazYpqeblaTqvuTrwMnnhVfXKPerui3pqs9ZZWPX9+1q8af060PEB+fQM/fwATlxEYWY8rAig9Amz47QjimwCi9wnpMYmJ4/8PQObgOQD7LWArnebQjd8+alOJGrtm37faPd2Gw8vZ69/Lcmb5KF7G86E93sa2JD2/jHL4IPI1ubAt/2zS9a72XDpUOrkOtJ3KQP4B", + "debug_symbols": "pdXNbuIwFAXgd8k6C1//XvdVqgoFCFWkKKAURhoh3n2uc66BLpA66YbPJjkH549cm32/vXxuhulw/Gre3q/Ndh7GcfjcjMdddx6Ok3x7bUz5oNC8UdtQBAkwyAvWAAIWOOABWixaLFosWixaHFocWhxaHFocWpy0WCGCBBjkBW8ALQSJO0HiXgggggQY5IVoAAELHJCWIAQQQQIM8kIygIAF0hIFDwKIIAEGeYENIGABWhgtjBZGC6OF0cJoyWjJaMloydKSBA8CiCABBnmBjFFJlSIuOtWrQY1qUlnNkIxKqvaVi5qLrGZYrusiqVZ1qlfLjWbKINZBqoNyu5W71mcdhHLLuTIg3SfYOnB14OvOoQ5iTZVmf7u1TX1sNue578tT8/QcydN16uZ+Ojdv02Uc2+ZPN16Wnb5O3bR47mbZKr/WT3tRCg/D2JfRrX2kzetoqNlA93D4eZo1zWZFWs6QxuWErMn7dM+vWT1xPXjiVfnk7nm7Im9N1rylVecvP/Kr1p8T1QPIz2fg5wdgYl2BIbemgNK9wIbfriC+KCD7uiHdL2Li+P8LkGvwWID9VvAhk243zN9ejbdSNQ/ddux1erhMu6et57+nuqW+Wk/zcdfvL3Nfmh7vV/l4J/ItufBR/h9l6l3ruUyoTHIb6ONWFvIP", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 8a7ececa055..2e139ef4295 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/array_rc_regression_7842/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9VYS47TQBBtJ3a+DIngBKzZOONkkmUkwhFYsTIZZQ8LxAbJCyTYcQSuSjpTFb88V4xD3DOakqJ2d5dffbo+7USupEjG2F1BCvJHxqGMHdjv7n9rmafX0WxIctvEX6XzxdCwr0X9s6FgRmHwU8UP5P+0LzjvixIfbVG5g/1vDM8vXRkfoezX8wtp/+samzV23hXuSC3JPcb9pn3s27Gc0VvBuyEbHTwH9m8WkTwn+O6Mz0cuaD7NIpKn+rB/OuS7rqHrlPY8aaxExl7XWKvD2hSnOqDO0ZnRuap/LTl43so3cVVbOU5i2GszD1VWInixK/3FMtUe5MdnJ8+49kZGnxczsu/SM+LYRP90w/hncWPYqKR7PbIL9/qwh2fP1KU52uR9Nwdc5lMau7J2xsUpzlrW0ytouXqIl4O+gp+4qu4oPyH+VOYj0l/jbf2feu6W+WyX5bt8kd/fz7f5K8L31AE/tS0/X2ar7e18u/y0yPLs7p/ysU9Y+Y+9MGT+Kz7GdzvYd3ONVT17zltPcRHErsz794tgcZ56SkAu5qlzZS1Cfq7bA4Mfc13Pa0r86GurJ/RIZ6v3BK55je8OujZyQe8ys7p+gf7hu4PVv6a054nvDrEhJzbkWFgbwQqct0vuL0i6hzHHfQm//y7tS2qTx/8FuMzH+mAMqW7Wd4yntYzpdTRLSPYHkhvq+4brP8qauPN5Hzi3U45xvO9Z/afjqnGM8Z7Q2kcZrfuedfe38nfqqvcqzu26uhgo5xrXRZX/WHUxbuhX607KfQr38I5/rkf2DTlTY29TPIxDA/sp6yL322vqotp0aV3EeFXdOK8+y/iUdcvfWyfy3CtKO/B+56kvc60tzN8BG5H/q/Luf99c6aMDb1GV5/l+1vBFZ8YDhrEWF6drw6LK3y2q/Cp7VFR11L0x7OHd09MLmaO/EEv1SIj/h8z1TAbwjr4/NeQPSP6J3sYa58HY4B8b/P58viuejGh727XwIJPwcY1109hp8j32SD0m+P8xv2V8pv/HHHtez9DV0mdi+If/r7H6WqcGC9/Hd5E3qZEbuAfe1tmFPkoa2NXUR4wVGViO3kucfR74rHPrPLg3/QXFfuvOlRsAAA==", - "debug_symbols": "pdXfjqowEAbwd+Gai07/Tn2VjTGouCEhaFg9yYnh3c+Ub1D3wmQPe8OvFeaj0Fbu1bHd3z533XA6f1Wbj3u1H7u+7z53/fnQXLvzIL/eK1MOFKoN1RVFkACDPGMNIGCBAx4gxSLFIsUixSLFIcUhxSHFIcUhxUmKFSJIgEGe8QbQTHBAyp0QQAQJMMgz0QACFjggKV4IIIIEGOSZZAABCyQlCB4EEEECDPIMG0DAAqQwUhgpjBRGCiOFkZKRkpGSkZIlJQoeBBBBAgzyDBmjkipBqehUrwY1qkllNUMyKqmaVyaVi6xmWOZ1llSrOtWrcv9cjGpSy1ozpZG1Ecp6s6VBuCRY1al+uTIsjbiUlAXspqmulg2zu45tW/bLyw6SfXVpxna4Vpvh1vd19afpb/NFX5dmmL02o5yV7HY4ihJ46vq2tKb6WW3el4alNtCjOPy8mrWazYpqeblaTqvuTrwMnnhVfXKPerui3pqs9ZZWPX9+1q8af060PEB+fQM/fwATlxEYWY8rAig9Amz47QjimwCi9wnpMYmJ4/8PQObgOQD7LWArnebQjd8+alOJGrtm37faPd2Gw8vZ69/Lcmb5KF7G86E93sa2JD2/jHL4IPI1ubAt/2zS9a72XDpUOrkOtJ3KQP4B", + "debug_symbols": "pdXNbuIwFAXgd8k6C1//XvdVqgoFCFWkKKAURhoh3n2uc66BLpA66YbPJjkH549cm32/vXxuhulw/Gre3q/Ndh7GcfjcjMdddx6Ok3x7bUz5oNC8UdtQBAkwyAvWAAIWOOABWixaLFosWixaHFocWhxaHFocWpy0WCGCBBjkBW8ALQSJO0HiXgggggQY5IVoAAELHJCWIAQQQQIM8kIygIAF0hIFDwKIIAEGeYENIGABWhgtjBZGC6OF0cJoyWjJaMloydKSBA8CiCABBnmBjFFJlSIuOtWrQY1qUlnNkIxKqvaVi5qLrGZYrusiqVZ1qlfLjWbKINZBqoNyu5W71mcdhHLLuTIg3SfYOnB14OvOoQ5iTZVmf7u1TX1sNue578tT8/QcydN16uZ+Ojdv02Uc2+ZPN16Wnb5O3bR47mbZKr/WT3tRCg/D2JfRrX2kzetoqNlA93D4eZo1zWZFWs6QxuWErMn7dM+vWT1xPXjiVfnk7nm7Im9N1rylVecvP/Kr1p8T1QPIz2fg5wdgYl2BIbemgNK9wIbfriC+KCD7uiHdL2Li+P8LkGvwWID9VvAhk243zN9ejbdSNQ/ddux1erhMu6et57+nuqW+Wk/zcdfvL3Nfmh7vV/l4J/ItufBR/h9l6l3ruUyoTHIb6ONWFvIP", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap new file mode 100644 index 00000000000..dfc940b091f --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -0,0 +1,20 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", + "debug_symbols": "XY5BCsQwCEXv4rqLWfcqw1BsaosgJtikMITefWyYQOlK/3/6tcJCc9km1jXuML4rzMYivE0SA2aO6m49B+hyykbkFty4byU00gyjFpEBDpTShvaE2mpGc/oagHTx6oErC13d+XGBge158UBjnIX+ci0abjR/Uyf942Qx0FKMrqTGPPsH", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_0.snap new file mode 100644 index 00000000000..dfc940b091f --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_0.snap @@ -0,0 +1,20 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", + "debug_symbols": "XY5BCsQwCEXv4rqLWfcqw1BsaosgJtikMITefWyYQOlK/3/6tcJCc9km1jXuML4rzMYivE0SA2aO6m49B+hyykbkFty4byU00gyjFpEBDpTShvaE2mpGc/oagHTx6oErC13d+XGBge158UBjnIX+ci0abjR/Uyf942Qx0FKMrqTGPPsH", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_9223372036854775807.snap new file mode 100644 index 00000000000..dfc940b091f --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -0,0 +1,20 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": {} + }, + "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", + "debug_symbols": "XY5BCsQwCEXv4rqLWfcqw1BsaosgJtikMITefWyYQOlK/3/6tcJCc9km1jXuML4rzMYivE0SA2aO6m49B+hyykbkFty4byU00gyjFpEBDpTShvaE2mpGc/oagHTx6oErC13d+XGBge158UBjnIX+ci0abjR/Uyf942Qx0FKMrqTGPPsH", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap new file mode 100644 index 00000000000..95e5d610736 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -0,0 +1,40 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": { + "12049594436772143978": { + "error_kind": "string", + "string": "array ref-count underflow detected" + }, + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/9VYzY7TQAx2Mpltk2q1FbwAj5A0LekBJMSWckFInDiHriohceaGFPECSDwxO2K8+XCckFVnDmupmiR2Pv+Ox01CPSV+zegCYpDffs39mgLf3P/e+PvyMqpyoTck/r7cNrniX0D769xjJnHwS8aPFP9y4XHedz0++sJ6l/e/FVyvqa+PWP5z/mL6/3zCZ66d267nEYWv/UMXxbcN47/z+AFtbxn7GBx7s3d15mrsNeQh4h6rtBoLGKuHPZzFsX937TEtDYl5V6A7EbwFyHOtM28J78n4IBlxj/46jFvQKeWkrQZ40m485IyQd3To/q5WyL/wa+x+8gxwiYb9JKLuWsYPaW7OsN9/9tdzcob+ZoKXKu/mNMx1wFhsE8VWI56h/oKi5qZKaJgbQ8P4pCJ2mWLrWvAccY9PFJ5RnqUTWMeAWGzXU+mBl/a5b4Ar5aQ9Wp+zgvfKr7HnTK1v8fWK+lko68Lrb/ZlybpM18dB62MZ8FH+rb8vFD+yC+w8N211rttzu2vv7ranVsbJUQpxwrlF7mFpl8QxE9hyb2k1nATUo/VIrk2W/ehXV7sfAEfrowSyn0Z8cnToxu1IFYwbRV8meOhvMqIbMaZicD1h11j+tbxEngVmn3+sv6Co/eXh/EuFPTI+8vwziq1rGtaVPP+0c9YoejSsY0AstkurU1kLkWahUp7j2uyMtqU03Bu4R6149tWvrvZ/Cf+0fKcTsXvMvorRVx3xfyDOmaV/fXLEOcOZIkbOeC7BnKFOC/6gPF4T9TnjZ9/9quUMZyijPJvKmRXxsZHikyv+xviut4yDX2n9jWPl8vtjJCeW9L27AD7K/wTMzl/f0DBvXP8r0utezh34XXWqj/PzQpHHb79G2IY1XszASid0rxT5YkI32oXv4ntWsTMXeq8Ue6yCpc0i8r+Kticx/1ync+sq9JzcNvX+tNmemi+7uq1f/ndO/gORwuKquRgAAA==", + "debug_symbols": "pdVNbqNAEAXgu7Bm0dXVP7SvElkWtnGEhLBFzEgji7tPNa/AziKjhGz8NYb3ArgIj+LcHMf3Q9tfrh/F7u1RHIe269r3Q3c91ff22su3j8LkD4rFjsqCKpBmrAEELGDggAcBoMVKixXSDBtAQFpYYOCABwFEIC1OSDPOAAIWMHDAgwAiQIuTFl8W3gACFjBwwIMAIqgAWoJsBSHNRAMIWMBAWqJQgTRTEbCAgQNyZCWkmWQAAQsYOOBBABGgJeEEyRiVVKuy6lSvBhWXS2RUUiWfsqw61atBjWqlJmj1uDwnZGSRRyR/kWeE8vzlKcGCl0WeN5sXflmEZZGnzuXF2pd0kaeGzDSVxTLyh/vQNHniX54BeTJu9dD092LXj11XFn/qbpwP+rjV/ey9HmSvVDb9WZTCS9s1eTWVz7T5OspL1oc17L+djlbTld2Qlh9Y4/JTbcm7asl7syW/Xjx52pBnnzTPgTfkLQfNW44b8m49f8eb7l+KtNyAVL3cge8XpPUKjA0/L7DGPAuItxRQfJ6B/+0ZfHUJxP95BiJrQaw+5feyUZ/a4dNrbcpFQ1sfu0Y3L2N/etl7/3tb9iyvxdtwPTXncWhy08u7UT7fApUh7PM/MdkgxyU5v5/yH/8H", + "file_map": { + "5": { + "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", + "path": "std/cmp.nr" + }, + "50": { + "source": "fn main() {\n let result1 = bug_8262((1, true, false));\n assert_eq(result1, 2);\n\n let result2 = bug_8337();\n assert_eq(result2, [10, 40, 10]);\n}\n\nfn bug_8262(mut a: (i32, bool, bool)) -> i32 {\n a.1 = if a.1 {\n a = (2, a.2, a.1);\n true\n } else { !a.2 };\n a.0\n}\n\nfn bug_8337() -> [Field; 3] {\n let mut a = [10, 20, 30];\n a[1] = {\n a = {\n a[2] = a[0];\n [a[0], 40, a[2]]\n };\n a[1]\n };\n a\n}\n", + "path": "" + } + }, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_0.snap new file mode 100644 index 00000000000..462226954f8 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_0.snap @@ -0,0 +1,27 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": { + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/7WSwQ7CIAyGwWEUZzw4H6TLMNvRgy/SuPAce3R3+BsaYrwATUhpSr72L7UmmYV3psAE8oD38AeV7/bzQkxlNvqsbk3+QiH4H/oq9j95MG0bPgm/0fzpBM57S3ytReqe99Or+9Wk/WilX/6vpf7hj+YeWm8qln1yW/1+5oVI+ujAP4Kfm1N5/X5AfFF6xLuCPuPMY5w48pPXNXz4nvFNNrcvgErvAJkEAAA=", + "debug_symbols": "XY7BCoRACIbfxfMcCvayvUpE2GQxIM5gM8ESvfs6sUHsRf391N8DZprKOgZZ4gZdf8CkgTmsI0ePOUSx7nE6uOWYlcha8OC2lVBJMnRSmB3syOUa2hLKlTOq0cYByWzZDi6BqVbnYAJ90H/HHTXgxPSTSxH/oPmTbnJ/nDR6motSvVQZNDW0Fvv25dr3cFa3Lw==", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_9223372036854775807.snap new file mode 100644 index 00000000000..462226954f8 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/execution_success/assign_evaluation_order/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -0,0 +1,27 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: artifact +--- +{ + "noir_version": "[noir_version]", + "hash": "[hash]", + "abi": { + "parameters": [], + "return_type": null, + "error_types": { + "17843811134343075018": { + "error_kind": "string", + "string": "Stack too deep" + } + } + }, + "bytecode": "H4sIAAAAAAAA/7WSwQ7CIAyGwWEUZzw4H6TLMNvRgy/SuPAce3R3+BsaYrwATUhpSr72L7UmmYV3psAE8oD38AeV7/bzQkxlNvqsbk3+QiH4H/oq9j95MG0bPgm/0fzpBM57S3ytReqe99Or+9Wk/WilX/6vpf7hj+YeWm8qln1yW/1+5oVI+ujAP4Kfm1N5/X5AfFF6xLuCPuPMY5w48pPXNXz4nvFNNrcvgErvAJkEAAA=", + "debug_symbols": "XY7BCoRACIbfxfMcCvayvUpE2GQxIM5gM8ESvfs6sUHsRf391N8DZprKOgZZ4gZdf8CkgTmsI0ePOUSx7nE6uOWYlcha8OC2lVBJMnRSmB3syOUa2hLKlTOq0cYByWzZDi6BqVbnYAJ90H/HHTXgxPSTSxH/oPmTbnJ/nDR6motSvVQZNDW0Fvv25dr3cFa3Lw==", + "file_map": {}, + "names": [ + "main" + ], + "brillig_names": [ + "main" + ] +} diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 1d6b0894691..d898581b331 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "pZfRThsxEEX/Jc95sMdjj91fQQgFWKpIUUBpUqlC+fd6du/dwEMrZF44Z0l8ba/H68375nl6vPx82B9fXn9tfty9bx5P+8Nh//Ph8Pq0O+9fj/2/75vgf2LsiNvOCAqYQAUzWEADK9gWSs8TZwQFTKCCGSyggRVsCxPyEvJSz0vOBCrY89RZQAMr2BZqACMoYAIV7HnZWUADK9gW5gBGUMAEKoi8jLzc84qzgm2h+Tr4hEwoiaKUTCkUo1SKr4dPpAZKpAjFk30wVSmZUihGqZQGaYESKUJhcmNyY3JjcmNy82Sfe2uLSAiUSPFkc0kUpWRKT55pYAXbQi/1mREUEO0i2kW0i2gnaCdoJ2jnJT1TwQwiT5AnyBPkJeQl5HlJV2cCFcxgAQ2sYFvoJT0zgshT5CnyFHmKPEWeIk+Rl5GXkZeRl5GXkZeR5yXdnAZWsC0sAYyggAn0lQwuvpLRpVCMUikNYoESKULxGhGXZZOJVXDZZOJ7YmYEBUyggj4gn+K8HWYxSqX4gHwa83aYJVKEkihKyZRCMUqlIDmFQIkUoSSKP1eDS6YUilH82RpdGsS3xCKRgsdOiomilEwpFKPgsZO8dvzWJy+eRYTiJ8AsSsmUQjFKpTSIV9EibOU1Id6p8SMvBVEXoSSKd5pdMqVQvFNzWQMbxAtF0vW63fDofDifpslPzg9naT9h33an6Xje/DheDoft5vfucJm/9Ottd5x53p36p30RpuNzZw982R8mt+v21jr8u2k/CBta9zOvrQH56wm9rNeEUL+bkMNIQqrrLDTloYRyG0Ot30zQVEYSQqlMCNUGElKLCFCRgfaaeBu1hqH+w9o+jvTfDO2zfq//rCP9m3IBrNjQCspaA0HGaiCUW0IcSjC7VdHYGNbb2HWkjizwNlgYGUGpZW0/tI7Z1nUc6d+MN8BsZP79JZQbsb+GfpjB1wMa74B8KqSvBsitjvrbbhoJiHYbQf7uCP41BSn/W4XEVaif2t/3i93T/vTph+fVg0773eNhwuXL5fj04dPznzd+wh+ub6fXp+n5cpo86fbrtf+5S30nJ833/bTuVyVuLXb3F5u72K9iKX4Z/Zta+jfr/dUH9hc=", + "debug_symbols": "pZfBbuowEEX/hTULe8b22O9XqqqibVohIUAUnvRU8e/Pk9wb2kWlKmx6Thrmxo4nMXyuXofny/vTdv92+Fj9efhcPZ+2u932/Wl3eNmct4d9/+/nKvifGDviujOCAiqYwAwW0MAKtonS88QZQQEVTGAGC2hgBdtERZ4iT3ueOhVMYM9LzgIaWME2MQUwggIqmMCel50FNLCCbWIOYAQFVDCByMvIyz2vOCvYJpqvg0/IhKKURMmUQjFKpfh6+ERqoESKUDzZB1MTJVMKxSiV0iAtUCJFKExuTG5MbkxuTG6e7HNvbRIJgRIpQlFKomRKTzangRVsE73VR0ZQQNRF1EXURdQJ6gR1gjpv6ZEJzCDyBHmCPEGeIk+R5y1dnQomMIMFNLCCbaK39MgIIi8hLyEvIS8hLyEvIS8hLyMvIy8jLyMvIy8jz1u6OQ2sYJtYAhhBARX0lQwuvpLRpVCMUikNYoESKULxHhGX6SETq+D0kIk/EyMjKKCCCfQB+RKNj8MoRqkUH5DfhvFxGCVShKKURMmUQjFKpSBZQ6BEilCU4snNJVMKxSiV0iDj23+USMFrR6NSEiVTCsUoeO2o947fevXmmUQovgMEl0TJlEIxSqU0iHfRJKzynpC+3mo85a0gfi1vhUmU4hf1EfrLc5JC8YtmlzmwQbxRJF6v6xW3zqfzaRh85/yyl/Yd9rg5Dfvz6s/+stutV383u8v4oY/jZj/yvDn1s32Mw/61swe+bXeD23V9qw4/l/aNsKG673ltDsi/T+htPSeEem9CDksStM6zSJoXJZTbGGq9MyFpWZIQSmVCqLYgQVtEQBJZUJ+UtzHVsOj6Ya6PS67fDPU53Xf9nJZc3xIXwIotWkGZeyDIsh4I5ZYQFyWY3bpoyRgscBIWltSXWub6RauQbV6FRfewGR+D/iXwywh+H9A4A/m2jL8NkNsq9u+auiQg2m0E+d4R/DQF79YfV8GUq1C/1T/2g83L9vTtZ9/Vg07bzfNuwOHbZf/y5ez535Fn+LPxeDq8DK+X0+BJt9+O/c+D9pFpyo99r+xHJa4tdvevFQ+xH8VS/DD6J1Ppn6yPVx/Yfw==", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_0.snap index 0f876c6328a..fbea9a61f27 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_0.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "pZdNbuJAEEbv4jWLruqfqs5VRlFEEidCsgA5MNIo4u7ThevDYQGKzCbvOaYfjd224bt771+Pny+b7cfuq3v68929jpth2Hy+DLu39WGz27b/fnfB/lBo4FUjOdkZncmZncUpTu2eorFOpOAkZ+slY3QmZ3YWpzjVWSdycJLTe+w99h57j73H3uPWy8Y6MQYnOdnZesWYnNlZnK0nRnXWiSk4ycnO6Gy9aszO4hSnOuvEHJzkZGd0ei97L3svey97L3uvtB4FE4IwJEISJEMKRCAKqS6CsqAsKAvKgrKgLCgLyoKyoKwoK8qKsqKsViaTDCkQgSikutQAIYiVbSHXCEmQDCkQgSikTsJ2HVE0IQhDIiRBMqRABKIQK7eVyXZFTUIQhkRIgmRIgVi5mCikuti1NQlBGBIhCWJlNSkQgSikuthVNglBGBIhCYJyRDmiHFGOKCeU7YKjasKQCEmQDCkQgSikutiVNwnKGeWMckY5o5xRtkXCwUQgCmlvwW2xxfPN9iwEYUiEJEiGFBfCKDvdzCaXXfam0UQh1cXOMicTgjDE3rSYIGhneRIr8+m06vDQeDmMfW/PjB9PkfZs2a/HfnvonrbHYVh1f9fD8fyir/16e+ZhPba97TD02/fGFvzYDL3ZaTWPDreHtlt29dHt7lwvgXxdoNsFSeoBKbJgfHsoJswgcFlUCGUu0KKCyKWgy+ZQw6VQeVGh6DyHm0fy3rlkvRzJGPRWQR+ew51CrOSBxLxgfIpYjknDkvEVJzKn8OgxzIsKUS9XVIr55kpI9xIlzYmyJFEUl4QEWvQp5ilEvbmWSB5eTPcSv1pN4d74cFkNi45CFUygfSv5Ufh9oOI88NXN7bcBnu9t7ctPXBIgmWeQH53BrY/A+c4TQiLWol6Nf24b67fNePXT6WShcbN+HXrf/Dhu337sPfzbYw9+eu3H3Vv/fhx7K82/v9qfPyxhxZWe21O3bRVaiTmdd2VdcYm2SbZZub0yPZ9sYv8B", + "debug_symbols": "pZfNbuIwFEbfhTUL3+ufa/dVRlVF27RCQoAojDSqePfxJd8HZQGqwqbnpMEHkzgJfM/eh9fD58ty/bH5mj39+Z697par1fLzZbV5W+yXm3X/7/cs+B8JHTrvFFDBCCYwgwU0sM6eorONlAAK2HvJGcEEZrCABlawjdQACoieoqfoKXqKnqKnvZedbWQMoIAKRjCBGSxg7xVnBdvIFEABFYxg71VnBgtoYAXbyBxAARWMIHoZvYxeRi+jl9ErvdecAioYwQRmsIAGVrCNNPQMPUPP0DP0DD1Dz9Az9Ay9il5Fr6JX0au9J8ElUwrFKJXSIC1QhNK7Ii6RkiiZUihGqZQ2ivr1IuoiFKVESqJkSqEYpVK83Feq+pUzilCUEimJkimF4uXsUikN4tfQKEJRSqQkipfNpVCMUikN4lfTKEJRSqQkCsuR5chyZDmynFj2C0uqi1IiJVEypVCMUikN4lfYKCxnljPLmeXMcmb5tEiai1Eqpb+F9sUWTzfVkwhFKZGSKJlSIMJRfrpVXM67/LarLpXSIH6WNboIRSn+ptmFQT/Lo3hZjsf5jA+Hl/1uGPzZ8ONp0Z8h28VuWO9nT+vDajWf/V2sDqcXfW0X6xP3i13f2+c4rN87e/BjuRrcjvPL6HB7aL81N4zud+F2DuTrgtwuWKoIWLEJ4/vDL3EGQcukQiiXgkwqmJ0LddocSr0Ubh6He2dC6/k4xFBvFezhOdwpxCYIJNUJ41PkYko1TBnfeBpyCo8ewzypEOv5ekgx31wJ8V6ipEuiTEmUygVtQSZ9issUYr25lqQ8vJjuJX61msK98eG8GiYdhWacQP9O8aPw+0DjedCrW9NvA3q5M/WvLnFKQOwyg/zoDG59BL8D37y/W+RarFfjn/vG4m25u/qBc/TQbrl4XQ3Y/Dis337s3f/bcg9/IG13m7fh/bAbvHT5ldT//FELc23y3J+ZfavI3NzltCvXuZbom+KbTfsr0/PRJ/Yf", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 8f520fe4033..4d7a2feba6c 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "tZndTiM7EITfJddc2O32H6+yQihAWEWKAsrCkY4Q735c4y4CFzOaM9beUF82mVq73G1bycfu6fDw/vv+eH5++bO7/fWxe7gcT6fj7/vTy+P+7fhybv/6sXP4U8vuVm52tU7inTP1pmIaTNU0mqbdbYBm02Jau3pn6k2bn0KDqZpG02SaTYtp7SrO1Juan5ifmJ+Yn5ifmJ80vwitXYMz9aZi2vwSVE2jaTJtfhlaTGtXdabeVEyDafOr0GiaTLNpMa1dozP1pmIaTM0vml80v2h+0fyi+aXm5z3AE4TQLD3WNCkhEhIhEwqhGmRH4FMZn8GiZ3zGNSiO4AlCCAQlREIiZEIh0LnSudK50rnSudK5whmrXBMhE+CMBUZDAAQd0cEThBAISogE8xEUvs8APFUBgaAENJMDJEImFEI1QAd08AQh0AdVLh6Ap9paCOq8gycIIRCUEAmJkAlwVkA1QMV38AQhBIISIgHOEZAJhVANUPsdPEEIgQBnxIsG6JAImVAI1QBd0METhBAIdE50TnROdE50TnRGFwjWNHuCEJpzwOpkJURCImRCIVQD9E4H+qAvAlYZfSEFUAjVAH3RwROEEAhKiIREoHOlczXn4BzBE4SAEQaAEiIBY1ZAJhRCNZjOjAk8QQiBQB/0RWiVENAXIQM8QQh4CgPD6dAhEhIhEwqhGqB3OtAHfREqAMeKAxRCNUBfdPAEIQSCEiKBw0A7qAdUA7RDBxgKQAiBAEPEgnaYRhg5VLTDBInxovgV0aH4OwQCfBIgEhIBU8YIUfxT8olLgOLvYCUaUOqK/xSl3iERmk+cPlMI1QClHjEdHBOo8IBjokMg2FYZUPwRpYXi71ANUPwRM0XxdxBC84mYzlT8MJyKf4JEsCNAUeoxAzxBCPApACVEAq4KDpD7EaDToTBBNZgOBQHgvuEBSogE+EyfyYRCaD6pTUdR/DhqFcXfAc7h8/Nmxzvf/dvlcMCV79slsF0NX/eXw/ltd3t+P51udv/sT+/Th/687s+Tvu0v7d02j8P5qWkzfD6eDqDPm+vTbv7Rdseq9nS7TtUvg/jTwc87ZNTbZJBT3vB8u8UqR+AkbXJw6ergNznk/OVQto2hui+HKpscUrmOYTbJpbWU8pVk27nnHMrwGBYcWjebQSvy2RTckgFzjOq3GLTrIofQLozfLP6HQ2U9yY+KXBuCBvaUFjc7Bx0NQYdD0L8ZQs1fc5gPoYyGUIZDKKMhrG3J6LY0dTsx6aAhzjlIWLJIerVIWyxSYQ7Z+U2zuA6h3QVmh5CG96Yli1Wbk4yWpAyXpAyX5FIKq3anIIMpLBmsS2HZYTiFNdtTSKMppOEU0t/cntbtDEtjkOvlq30JEzbMoj2Wr7OImxy+j2EuB13Y33IO3N9K2lCPK1OQ4RRkOIU8lsLS3rQuhWWHNSmsH8PcLKIfS8EPp+CHU/DjKcTBFHQ4BR1OQYdTqIMpuOEU3HAKbjSFtGV3vGsv9o/Hy4+frj5hdDnuH04He/n8fn789u7bv698hz99vV5eHg9P75cDnK6/f7U/v7R9S6ix3LXvfNqr9qVL9nf4DQtvtW+ZNTi89HjZVlKTv/vEwP4D", + "debug_symbols": "tZndTiM7EITfJddc2O3f5lVWCAUIq0hRQFk40hHi3dc17iJwMaPRWHtDfdmMaz013bY1+dg9HR7ef98fz88vf3a3vz52D5fj6XT8fX96edy/HV/O7V8/dg5/tO5u5WanOol3ztSbimkwjabJNO9uA7SYVlPt6p2pN21+ERpMo2kyzabFtJpqV3Gm3tT8xPzE/MT8xPzE/KT5Jah2Dc7Um4ppMI2myTSbNr8MrabaNTpTbyqmwbT5VWgyzabFtJpq1+RMvamYBlPzS+aXzC+ZXzK/ZH65+XkH8AQhNEvvAZGQCJlQCJWgBsUROKrgGhRJaddo0+pMvamYBtNomkyzaTGtpuan5qfmp+an5qfmp5gRnr5mQiFgjnigaACAoAM6eIIQAiESEsF8BIXuMwCjKiAQIgGjFJAJhVAJaoCK7+AJQqAPqlocAG3cshfUdQdPEEIgREIiZEIhwDkA1AAV3sEThBAIkZAIcI6AQqgENUCtd/AEIQQCnBEvCr5DJhRCJagBqr6DJwghEOic6ZzpnOmc6ZzpjKoXPNPiCUKAM55OiYREyIRCqAQ1QLN0oA/aIeApox+kACpBDdASHTxBCIEQCYmQCXRWOqs5B+cIniCE5hwEEAmJgDkHQCFUghpMe8QEniCEQKAP+iK0Sgjoi5ABniAEjMLEsBt0SIRMKIRKUAP0Tgf6oC9CBWCUAipBDdAXHTxBCIEQCYnAaaAdogOoAdqhA/Y6DxBCIGC7Qyxoh2mGiVNFO0yQGS+KPyI6FH+HQIBPAiRCJmDnxAxR/FPymY8Axd/BSjSg1CP+U5R6h0yAz3RNJagBSj3hdrAxoMIDdoYOgWBLZUDxJ5QWir+DGqD4E+4Uxd9BCNjPcTtT8cNwKv4JMsG2gIhSTxngCUKATwFEQiLgaKCA0reAOG0KE6jBtCl4AM4DDhAJidB88nRNIVQCThntduK0KQjAE+Asn583O57x7t8uhwOOeN8Ofe0o+Lq/HM5vu9vz++l0s/tvf3qfLvrzuj9P+ra/tG/bRA7np6bN8Pl4OoA+b66j3fzQdqZSG92OT/plkH46+HmHgoKZDEouG8a3U2vkDJzkTQ4uXx38JodSvhzqtjnkenWYzWHpSUj9yqGtu3MOZXgOCw6tF82glejceF0az1JM0W8Y3456nEA77H1zWG+gLAX5UUxrE4iB7RCrm62DMBjBksG6DJYdRkPQ8nUP8yGU0RDKcAhlNIS1/Zjclo5umx0dYkhzDiJLFjleLfIWi1yZQ3F+011cp9C28dkppOGFacli1cokoyUpwyUpwyW5lMKq1Sn4wRSWDNalsOwwnMKa5Smk0RTScArpXy5P61aGpTnI9dzU3p+EDXfRhpXrXaRNDt/nMJdDXFjfSglc32reUI8rU/DDKfjhFPJYCktr07oUlh3WpLB+DnN3kdxYCn44BT+cgh9PIQ6mEIZTCMMphOEU6lgKOhqCjmagoxHkLUvjXfuwfzxefvzE9Amjy3H/cDrYx+f38+O3b9/+f+U3/Inq9fLyeHh6vxzgdP2dqv35FdubspjqXXtX0z61NyLF3+G3JnzVdvcYHD56fGwvYmL2d5+Y2F8=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 1d6b0894691..d898581b331 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "pZfRThsxEEX/Jc95sMdjj91fQQgFWKpIUUBpUqlC+fd6du/dwEMrZF44Z0l8ba/H68375nl6vPx82B9fXn9tfty9bx5P+8Nh//Ph8Pq0O+9fj/2/75vgf2LsiNvOCAqYQAUzWEADK9gWSs8TZwQFTKCCGSyggRVsCxPyEvJSz0vOBCrY89RZQAMr2BZqACMoYAIV7HnZWUADK9gW5gBGUMAEKoi8jLzc84qzgm2h+Tr4hEwoiaKUTCkUo1SKr4dPpAZKpAjFk30wVSmZUihGqZQGaYESKUJhcmNyY3JjcmNy82Sfe2uLSAiUSPFkc0kUpWRKT55pYAXbQi/1mREUEO0i2kW0i2gnaCdoJ2jnJT1TwQwiT5AnyBPkJeQl5HlJV2cCFcxgAQ2sYFvoJT0zgshT5CnyFHmKPEWeIk+Rl5GXkZeRl5GXkZeR5yXdnAZWsC0sAYyggAn0lQwuvpLRpVCMUikNYoESKULxGhGXZZOJVXDZZOJ7YmYEBUyggj4gn+K8HWYxSqX4gHwa83aYJVKEkihKyZRCMUqlIDmFQIkUoSSKP1eDS6YUilH82RpdGsS3xCKRgsdOiomilEwpFKPgsZO8dvzWJy+eRYTiJ8AsSsmUQjFKpTSIV9EibOU1Id6p8SMvBVEXoSSKd5pdMqVQvFNzWQMbxAtF0vW63fDofDifpslPzg9naT9h33an6Xje/DheDoft5vfucJm/9Ottd5x53p36p30RpuNzZw982R8mt+v21jr8u2k/CBta9zOvrQH56wm9rNeEUL+bkMNIQqrrLDTloYRyG0Ot30zQVEYSQqlMCNUGElKLCFCRgfaaeBu1hqH+w9o+jvTfDO2zfq//rCP9m3IBrNjQCspaA0HGaiCUW0IcSjC7VdHYGNbb2HWkjizwNlgYGUGpZW0/tI7Z1nUc6d+MN8BsZP79JZQbsb+GfpjB1wMa74B8KqSvBsitjvrbbhoJiHYbQf7uCP41BSn/W4XEVaif2t/3i93T/vTph+fVg0773eNhwuXL5fj04dPznzd+wh+ub6fXp+n5cpo86fbrtf+5S30nJ833/bTuVyVuLXb3F5u72K9iKX4Z/Zta+jfr/dUH9hc=", + "debug_symbols": "pZfBbuowEEX/hTULe8b22O9XqqqibVohIUAUnvRU8e/Pk9wb2kWlKmx6Thrmxo4nMXyuXofny/vTdv92+Fj9efhcPZ+2u932/Wl3eNmct4d9/+/nKvifGDviujOCAiqYwAwW0MAKtonS88QZQQEVTGAGC2hgBdtERZ4iT3ueOhVMYM9LzgIaWME2MQUwggIqmMCel50FNLCCbWIOYAQFVDCByMvIyz2vOCvYJpqvg0/IhKKURMmUQjFKpfh6+ERqoESKUDzZB1MTJVMKxSiV0iAtUCJFKExuTG5MbkxuTG6e7HNvbRIJgRIpQlFKomRKTzangRVsE73VR0ZQQNRF1EXURdQJ6gR1gjpv6ZEJzCDyBHmCPEGeIk+R5y1dnQomMIMFNLCCbaK39MgIIi8hLyEvIS8hLyEvIS8hLyMvIy8jLyMvIy8jz1u6OQ2sYJtYAhhBARX0lQwuvpLRpVCMUikNYoESKULxHhGX6SETq+D0kIk/EyMjKKCCCfQB+RKNj8MoRqkUH5DfhvFxGCVShKKURMmUQjFKpSBZQ6BEilCU4snNJVMKxSiV0iDj23+USMFrR6NSEiVTCsUoeO2o947fevXmmUQovgMEl0TJlEIxSqU0iHfRJKzynpC+3mo85a0gfi1vhUmU4hf1EfrLc5JC8YtmlzmwQbxRJF6v6xW3zqfzaRh85/yyl/Yd9rg5Dfvz6s/+stutV383u8v4oY/jZj/yvDn1s32Mw/61swe+bXeD23V9qw4/l/aNsKG673ltDsi/T+htPSeEem9CDksStM6zSJoXJZTbGGq9MyFpWZIQSmVCqLYgQVtEQBJZUJ+UtzHVsOj6Ya6PS67fDPU53Xf9nJZc3xIXwIotWkGZeyDIsh4I5ZYQFyWY3bpoyRgscBIWltSXWub6RauQbV6FRfewGR+D/iXwywh+H9A4A/m2jL8NkNsq9u+auiQg2m0E+d4R/DQF79YfV8GUq1C/1T/2g83L9vTtZ9/Vg07bzfNuwOHbZf/y5ez535Fn+LPxeDq8DK+X0+BJt9+O/c+D9pFpyo99r+xHJa4tdvevFQ+xH8VS/DD6J1Ppn6yPVx/Yfw==", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_0.snap index 0f876c6328a..fbea9a61f27 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_0.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "pZdNbuJAEEbv4jWLruqfqs5VRlFEEidCsgA5MNIo4u7ThevDYQGKzCbvOaYfjd224bt771+Pny+b7cfuq3v68929jpth2Hy+DLu39WGz27b/fnfB/lBo4FUjOdkZncmZncUpTu2eorFOpOAkZ+slY3QmZ3YWpzjVWSdycJLTe+w99h57j73H3uPWy8Y6MQYnOdnZesWYnNlZnK0nRnXWiSk4ycnO6Gy9aszO4hSnOuvEHJzkZGd0ei97L3svey97L3uvtB4FE4IwJEISJEMKRCAKqS6CsqAsKAvKgrKgLCgLyoKyoKwoK8qKsqKsViaTDCkQgSikutQAIYiVbSHXCEmQDCkQgSikTsJ2HVE0IQhDIiRBMqRABKIQK7eVyXZFTUIQhkRIgmRIgVi5mCikuti1NQlBGBIhCWJlNSkQgSikuthVNglBGBIhCYJyRDmiHFGOKCeU7YKjasKQCEmQDCkQgSikutiVNwnKGeWMckY5o5xRtkXCwUQgCmlvwW2xxfPN9iwEYUiEJEiGFBfCKDvdzCaXXfam0UQh1cXOMicTgjDE3rSYIGhneRIr8+m06vDQeDmMfW/PjB9PkfZs2a/HfnvonrbHYVh1f9fD8fyir/16e+ZhPba97TD02/fGFvzYDL3ZaTWPDreHtlt29dHt7lwvgXxdoNsFSeoBKbJgfHsoJswgcFlUCGUu0KKCyKWgy+ZQw6VQeVGh6DyHm0fy3rlkvRzJGPRWQR+ew51CrOSBxLxgfIpYjknDkvEVJzKn8OgxzIsKUS9XVIr55kpI9xIlzYmyJFEUl4QEWvQp5ilEvbmWSB5eTPcSv1pN4d74cFkNi45CFUygfSv5Ufh9oOI88NXN7bcBnu9t7ctPXBIgmWeQH53BrY/A+c4TQiLWol6Nf24b67fNePXT6WShcbN+HXrf/Dhu337sPfzbYw9+eu3H3Vv/fhx7K82/v9qfPyxhxZWe21O3bRVaiTmdd2VdcYm2SbZZub0yPZ9sYv8B", + "debug_symbols": "pZfNbuIwFEbfhTUL3+ufa/dVRlVF27RCQoAojDSqePfxJd8HZQGqwqbnpMEHkzgJfM/eh9fD58ty/bH5mj39+Z697par1fLzZbV5W+yXm3X/7/cs+B8JHTrvFFDBCCYwgwU0sM6eorONlAAK2HvJGcEEZrCABlawjdQACoieoqfoKXqKnqKnvZedbWQMoIAKRjCBGSxg7xVnBdvIFEABFYxg71VnBgtoYAXbyBxAARWMIHoZvYxeRi+jl9ErvdecAioYwQRmsIAGVrCNNPQMPUPP0DP0DD1Dz9Az9Ay9il5Fr6JX0au9J8ElUwrFKJXSIC1QhNK7Ii6RkiiZUihGqZQ2ivr1IuoiFKVESqJkSqEYpVK83Feq+pUzilCUEimJkimF4uXsUikN4tfQKEJRSqQkipfNpVCMUikN4lfTKEJRSqQkCsuR5chyZDmynFj2C0uqi1IiJVEypVCMUikN4lfYKCxnljPLmeXMcmb5tEiai1Eqpb+F9sUWTzfVkwhFKZGSKJlSIMJRfrpVXM67/LarLpXSIH6WNboIRSn+ptmFQT/Lo3hZjsf5jA+Hl/1uGPzZ8ONp0Z8h28VuWO9nT+vDajWf/V2sDqcXfW0X6xP3i13f2+c4rN87e/BjuRrcjvPL6HB7aL81N4zud+F2DuTrgtwuWKoIWLEJ4/vDL3EGQcukQiiXgkwqmJ0LddocSr0Ubh6He2dC6/k4xFBvFezhOdwpxCYIJNUJ41PkYko1TBnfeBpyCo8ewzypEOv5ekgx31wJ8V6ipEuiTEmUygVtQSZ9issUYr25lqQ8vJjuJX61msK98eG8GiYdhWacQP9O8aPw+0DjedCrW9NvA3q5M/WvLnFKQOwyg/zoDG59BL8D37y/W+RarFfjn/vG4m25u/qBc/TQbrl4XQ3Y/Dis337s3f/bcg9/IG13m7fh/bAbvHT5ldT//FELc23y3J+ZfavI3NzltCvXuZbom+KbTfsr0/PRJ/Yf", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 8f520fe4033..4d7a2feba6c 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -89,7 +89,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "tZndTiM7EITfJddc2O32H6+yQihAWEWKAsrCkY4Q735c4y4CFzOaM9beUF82mVq73G1bycfu6fDw/vv+eH5++bO7/fWxe7gcT6fj7/vTy+P+7fhybv/6sXP4U8vuVm52tU7inTP1pmIaTNU0mqbdbYBm02Jau3pn6k2bn0KDqZpG02SaTYtp7SrO1Juan5ifmJ+Yn5ifmJ80vwitXYMz9aZi2vwSVE2jaTJtfhlaTGtXdabeVEyDafOr0GiaTLNpMa1dozP1pmIaTM0vml80v2h+0fyi+aXm5z3AE4TQLD3WNCkhEhIhEwqhGmRH4FMZn8GiZ3zGNSiO4AlCCAQlREIiZEIh0LnSudK50rnSudK5whmrXBMhE+CMBUZDAAQd0cEThBAISogE8xEUvs8APFUBgaAENJMDJEImFEI1QAd08AQh0AdVLh6Ap9paCOq8gycIIRCUEAmJkAlwVkA1QMV38AQhBIISIgHOEZAJhVANUPsdPEEIgQBnxIsG6JAImVAI1QBd0METhBAIdE50TnROdE50TnRGFwjWNHuCEJpzwOpkJURCImRCIVQD9E4H+qAvAlYZfSEFUAjVAH3RwROEEAhKiIREoHOlczXn4BzBE4SAEQaAEiIBY1ZAJhRCNZjOjAk8QQiBQB/0RWiVENAXIQM8QQh4CgPD6dAhEhIhEwqhGqB3OtAHfREqAMeKAxRCNUBfdPAEIQSCEiKBw0A7qAdUA7RDBxgKQAiBAEPEgnaYRhg5VLTDBInxovgV0aH4OwQCfBIgEhIBU8YIUfxT8olLgOLvYCUaUOqK/xSl3iERmk+cPlMI1QClHjEdHBOo8IBjokMg2FYZUPwRpYXi71ANUPwRM0XxdxBC84mYzlT8MJyKf4JEsCNAUeoxAzxBCPApACVEAq4KDpD7EaDToTBBNZgOBQHgvuEBSogE+EyfyYRCaD6pTUdR/DhqFcXfAc7h8/Nmxzvf/dvlcMCV79slsF0NX/eXw/ltd3t+P51udv/sT+/Th/687s+Tvu0v7d02j8P5qWkzfD6eDqDPm+vTbv7Rdseq9nS7TtUvg/jTwc87ZNTbZJBT3vB8u8UqR+AkbXJw6ergNznk/OVQto2hui+HKpscUrmOYTbJpbWU8pVk27nnHMrwGBYcWjebQSvy2RTckgFzjOq3GLTrIofQLozfLP6HQ2U9yY+KXBuCBvaUFjc7Bx0NQYdD0L8ZQs1fc5gPoYyGUIZDKKMhrG3J6LY0dTsx6aAhzjlIWLJIerVIWyxSYQ7Z+U2zuA6h3QVmh5CG96Yli1Wbk4yWpAyXpAyX5FIKq3anIIMpLBmsS2HZYTiFNdtTSKMppOEU0t/cntbtDEtjkOvlq30JEzbMoj2Wr7OImxy+j2EuB13Y33IO3N9K2lCPK1OQ4RRkOIU8lsLS3rQuhWWHNSmsH8PcLKIfS8EPp+CHU/DjKcTBFHQ4BR1OQYdTqIMpuOEU3HAKbjSFtGV3vGsv9o/Hy4+frj5hdDnuH04He/n8fn789u7bv698hz99vV5eHg9P75cDnK6/f7U/v7R9S6ix3LXvfNqr9qVL9nf4DQtvtW+ZNTi89HjZVlKTv/vEwP4D", + "debug_symbols": "tZndTiM7EITfJddc2O3f5lVWCAUIq0hRQFk40hHi3dc17iJwMaPRWHtDfdmMaz013bY1+dg9HR7ef98fz88vf3a3vz52D5fj6XT8fX96edy/HV/O7V8/dg5/tO5u5WanOol3ztSbimkwjabJNO9uA7SYVlPt6p2pN21+ERpMo2kyzabFtJpqV3Gm3tT8xPzE/MT8xPzE/KT5Jah2Dc7Um4ppMI2myTSbNr8MrabaNTpTbyqmwbT5VWgyzabFtJpq1+RMvamYBlPzS+aXzC+ZXzK/ZH65+XkH8AQhNEvvAZGQCJlQCJWgBsUROKrgGhRJaddo0+pMvamYBtNomkyzaTGtpuan5qfmp+an5qfmp5gRnr5mQiFgjnigaACAoAM6eIIQAiESEsF8BIXuMwCjKiAQIgGjFJAJhVAJaoCK7+AJQqAPqlocAG3cshfUdQdPEEIgREIiZEIhwDkA1AAV3sEThBAIkZAIcI6AQqgENUCtd/AEIQQCnBEvCr5DJhRCJagBqr6DJwghEOic6ZzpnOmc6ZzpjKoXPNPiCUKAM55OiYREyIRCqAQ1QLN0oA/aIeApox+kACpBDdASHTxBCIEQCYmQCXRWOqs5B+cIniCE5hwEEAmJgDkHQCFUghpMe8QEniCEQKAP+iK0Sgjoi5ABniAEjMLEsBt0SIRMKIRKUAP0Tgf6oC9CBWCUAipBDdAXHTxBCIEQCYnAaaAdogOoAdqhA/Y6DxBCIGC7Qyxoh2mGiVNFO0yQGS+KPyI6FH+HQIBPAiRCJmDnxAxR/FPymY8Axd/BSjSg1CP+U5R6h0yAz3RNJagBSj3hdrAxoMIDdoYOgWBLZUDxJ5QWir+DGqD4E+4Uxd9BCNjPcTtT8cNwKv4JMsG2gIhSTxngCUKATwFEQiLgaKCA0reAOG0KE6jBtCl4AM4DDhAJidB88nRNIVQCThntduK0KQjAE+Asn583O57x7t8uhwOOeN8Ofe0o+Lq/HM5vu9vz++l0s/tvf3qfLvrzuj9P+ra/tG/bRA7np6bN8Pl4OoA+b66j3fzQdqZSG92OT/plkH46+HmHgoKZDEouG8a3U2vkDJzkTQ4uXx38JodSvhzqtjnkenWYzWHpSUj9yqGtu3MOZXgOCw6tF82glejceF0az1JM0W8Y3456nEA77H1zWG+gLAX5UUxrE4iB7RCrm62DMBjBksG6DJYdRkPQ8nUP8yGU0RDKcAhlNIS1/Zjclo5umx0dYkhzDiJLFjleLfIWi1yZQ3F+011cp9C28dkppOGFacli1cokoyUpwyUpwyW5lMKq1Sn4wRSWDNalsOwwnMKa5Smk0RTScArpXy5P61aGpTnI9dzU3p+EDXfRhpXrXaRNDt/nMJdDXFjfSglc32reUI8rU/DDKfjhFPJYCktr07oUlh3WpLB+DnN3kdxYCn44BT+cgh9PIQ6mEIZTCMMphOEU6lgKOhqCjmagoxHkLUvjXfuwfzxefvzE9Amjy3H/cDrYx+f38+O3b9/+f+U3/Inq9fLyeHh6vxzgdP2dqv35FdubspjqXXtX0z61NyLF3+G3JnzVdvcYHD56fGwvYmL2d5+Y2F8=", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_0.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_0.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_0.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_0.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index a9aa1d4642e..65cc4d0f4de 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_assign/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -20,7 +20,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1YwY7TMBCdtHHbNFSt4EcS0pIekKgEEleQuHFAaVe9cAGJA+JCTkjw1dRlhrxOptmixOKylio79vi9mTfOxLsRNS3iPqYeTUB+cZ9wP4L18em34+esX8sTxTsk/jZbrxMjvgH9LxLGjMLgZ4IfSP9syjiv6gYfYxHe2emXwnhBzfkIFb/kL2T8TzpilrPzsg7CXaWs5UelpfDTgHEuwH+CWJE3DqPxPlJ8BH7gmvDPla9D15xI8Yk/Wh/Jg2jnDF9XxhqeVVxDHmfwPGA9YP0vrAW1a090pRcePad5dM32bUl2rfEtMfwbstaLXhPGi6mtF/o2UvY4Jt6Dczn3vqZ/hj3Xak3cod3Y8Gdh7Oubo648BKq/f+80kzD4G8GfQtzDYOd7wZ6F8T2XHEdGXrxez2Ee1xw15wrzLXcXp+zfAuYLHi8NbrwLWe/0bpi4y65aZvmzpPYZxb24zxm2U7Umtq9VvKFq0WPA1f5beYhVXFY9uVUnXT9u0cnKP9HwtVm4Y8M/5Ne+vlF+BrrLmnkTrpTa7yV+Y3DP5Eoc77j36x94bOVQ51efU9QiCaSFxDQ3YkVO8W2k7HGMWsjce+6t7+m/3nmsOtH1DbxVf/k7eFy3MUSDWK3teD7r1/Zely/gh9bAAS/mhKhbM51XtE+UjW8raud1quzGBha+DzOFhb44FeN938aQupfbP+f+HAfjO7qMjxS/U/af+Bn1kj7u4eexrPJjUR2rTXV3tz5Uulb5JrqmAfirstgenq4P5X5TVMWze/mXPJ7UzTq+R75N+Vlqi7bH7wHafxXb0+8bj+VddQaft/vZYRdd6c8YxlxcX84lddt+XLfthXtet32UtRTW8B337RE/o16IJX44Zf+DnyUnM9gj+1cG/0zxX/htzOn7Q2rYp4a9z893weMeYx/6/0NnToWPc9o3OTv+XP8G7wvr2pUXAAA=", - "debug_symbols": "pZTLboMwEEX/xWsWtmf8yq9UUUQSp0JCJKJQqYr494650CaLShXZ+DAM99iyjO/qnI/j+6HpLtcPtXu7q2PftG3zfmivp3porp28vStdBsNqZyplHOCBAEQgzbAaMIAFCIDFwmJhsbBYWCwsBAvBQrAQLAQLwUKwECwEC8HCsDAsDAvDwrAwLAwLw8KwMCwOFgeLg8XB4qVnBVKRQJwscIAHxOkEEUgzggYMIE4vIEAsQeAADwQgAmlGlHgUMOAADwQgAmlG0gByyQIEIJ4kngQBiECaYbReaBbahbRQVpKmqVLrCToMfc7lAD0cKTlot7rP3aB23di2lfqs23H+6ONWdzOHupeurlTuzkIRXpo2l6ep+k3rv6PeL1kffsLu32lj16mNNRvy5NOSpxC35BMvedbptbyhDXnmdfvYx9fygbfsP7l1/9ltyad1fqvtU34vVX1q+qcrbiqmvqmPbV7Ky9idHrrD123trFfkrb+e8nnsczH93pMyvBnjK0NhX/6HUupQGWNLaeYuSen2U1nMNw==", + "debug_symbols": "pZTbbuowEEX/xc95sD3jG79SIRTAVJGigNLkSEco/95xdtzLQ6UqfcmaYdgLNBg/1TWf59dTN9zub+rw8lTnsev77vXU3y/t1N0HefWpdHkYVgfTKOMADwQgAmmF1YABLEAALBYWC4uFxcJiYSFYCBaChWAhWAgWgoVgIVgIFoaFYWFYGBaGhWFhWBgWhoVhcbA4WBwsDhYvMyuQjgTiZIEDPCBOJ4hAWhE0YABxegEBYgkCB3ggABFIK6LEo4ABB3ggABFIK5IGkEsWIEDiSVA2oYVhY9yYQKN1LUwtbC2oFmW5elkaVY/SaRpzLifpy9mSE/doxzxM6jDMfd+of20/r296e7TDyqkdZSrKPFyFIrx1fS7V0nym9c9R77esDx9h9+u0sfWjjTU78uTTlqcQ9+QTb3nW6W95QzvyzHV97OPf8oH37J9c3T+7HXmra97qXb9/8h95+y1/lK69dOO3u3IpprFrz33e2ts8XL5Mp/+POql37WO8X/J1HnMxfV648ngxxjeGwrH8oUqrQ2OMLa1ZpyStOy7ly7wD", "file_map": { "50": { "source": "global N: u32 = 10;\n\nunconstrained fn main() {\n let mut arr = [0; N];\n let mut mid_change = arr;\n\n for i in 0..N {\n if i == N / 2 {\n mid_change = arr;\n }\n arr[i] = 27;\n }\n\n // Expect:\n // arr = [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]\n // mid_change = [27, 27, 27, 27, 27, 0, 0, 0, 0, 0]\n let modified_i = N / 2 + 1;\n assert_eq(arr[modified_i], 27);\n\n // Fail here!\n assert(mid_change[modified_i] != 27);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 8c05f1cdf21..293967ebbc5 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_0.snap index d8e5549b258..cbc3f08883f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_0.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZ3drh010obvZR/noP1XLnMrCKEAYRQpCigDn/QJ5d7Hb9n1egfNWiTVmhP6Idn7KdvL1V22e8FfL7+8++nPf/34/uOvv/375bvv/3r56dP7Dx/e/+vHD7/9/PaP9799nH/618uFf6RcXr5Lb+a17mvbV9nXvq+6r2Ndy7WvaV/zvm5f2b6yfWX7yvaV7SvbV7evbl/dvrp9dfvq9tXtq9tXt69uX9u+tn1t+9r2te1r29e2r21f2762fbJ9sn2yfbJ9sn2yfbJ9sn2yfbJ9ffv69vXt69vXt69vX9++vn19+/r26fbp9un26fbp9un26fbp9un26fTleR3XvqZ9zfs6f6/gOn+uvnnJ1/y5hmva17yvZV/rvs44Mq9p/nzHdf684pr3texr3de2rzPOmNeM/lwAdCgBqkNzEIfuoBtsmmYAfqsA8Fvogc1Mg+6gDmODzU50w6anQXYoDtUBZvTR5qhBd1CHscHmqUFyyA7FYZoz+o7JukAcuoM6jA2YsQuSQ3YoDm4WN4ubxc3iZnFzd3N3c3dzdzPmb8bIYwIvEIfuoA5jA2bxguSQHYqDm9XN6mZ1s7pZ3TzcPNw83DzcPNw83DzcPNw83Dy2uSADcgEkh+xQHKpDcxCH7qAOY0Nyc3JzcnNyc3JzcnNyc3JzcnNyc3ZzdjOSKFcAfrgB8MMzZQtu9QuSQ3YoDtWhOYhDd1AHN1c3VzdXN1c3VzdXNyOtcgfArAB1GBuQVguSQ3YoDtWhOYiDm5ubm5vFzeJmcbO4WdwsbhY3i5vFzeLm7ubu5u7m7mZLqwFoDuLQHdRhbLC0MkgO2aE4THO5AM0Bty8MuD0jDNRhmgsmP9JqQXLIDsWhOjQHcZjmkgHqMBZUpNUCmAsgOxQHmCugOYhDd1CHsQFptQDmBsgOxaE6wCwAcegOMHfA2IC0WpAcskNxqA7NAWYFdAd1GBuQgwvgGYD5W/UCzN+qCaAOYwPya0FymNErRhW5UzGGyJ2K0UDuGCB3FiSH7DCjVwwLcmdBcxAHmDE+yJ0FYwNyZ0FyyA7FoTo0B3Fws7hZ3Nzd3N3c3dzd3N2MvKgYeUz1ilHFxK4YVUzshlHFxF6QHLJDcagOzUEcZlMbxhkTewHMc8CbVUwVkBxgboDiALMAYO4AcYBZAeowNmBiL4B5ALLDNMsFmGZJgOYwzZIB3UEdxgZMbEHjMbEXTLOg8ZjYgjZjYi+AGY3HxF7QHdQBZnQHE3sBzGg8Hi6CNmOqL5jmjsbj4bJAHLrDNHd0B5PfAJO/o/GY/B1txsNlwTR3NB7psKA5iAPM6A4SZAHMaDwSpKPNSJAFMKPxSJAF1aE5wIzuIEEWTLOi8UgQRZuRIAuSQ3ZAgYzuIEEWNIdpVvQLCaJoPBJE0WYkiAESZAHM6AUSRNF4JIiihUiQBc1BHGBGm/FwWTA24OEy0As8XAaaiofLQMPwcFlQHZrDNA+0GQ+XBeqAkh+9QA4OtBk5ONBm5OCC4lAdYEZ3kIMLugPM6AVycMw2C3IwXRcokTKpkFDTXwnUSELCc/HKIDwYrwJCYX/N1ku6SImUSRajgSqpkSyGgCxGB1kMBQ2nfJESyWKgl7ZUWmRrJfRoLZbQ+rVaMuokJSEGVkxiK/1FiYQYWEaJrfexRhJbWWEBJLa0WiQki4Ee2eoK6xqx5VVCm219tSiRMslioB+2xlrUSIiBNYfYMgs1udg6K6OlttAyspXWokRCDNS/YoutRZWEGCiKxXYHUBWL7Q+gDBXbIVg0nGyXYJHFQC9tp2BRIVkM9M32C1CAie0YoPAS2zNYpKThZDsHqJ7E9g4WZRJioG4S20FAmSS2h4CKR2wXYVEnKclioJe2m7AokSwG+mZ7CihdxHYVUJeI7SssElInWQz0UofTuEiIgVpGkN8JhYogwTdVUiPZmh29HJ2kJFu2z553y3NULt3yHPVJtzxfVEgWQ0AWo4MshoI6SUnDyfIcxUO3PF+USbY9cIFsfyCBEANFQbc8X9RJSkIM1Azd8nxRItkOBPpmeY66oVueo3DolueLhNRJFgO9tDw3sjxfZDHQN8tzFBDd8hwVRLc8X9RIQrK1Anppeb5oOFmeo6LolueoJLrlOUqJbnm+qJIayWKgl5bni5RkMdA3y3OUFN3yHDVFtzxfVEiVZDHQS8vzRbZlgx5ZnqOi6JbnRpbnixLJ9m3QUsvzRZXUSLYrhJZani9S0nCyPF+USJlUSJXUSIzRGaMzRmcMZQxlDGUMZQxlDGUMZQxlDGUMZYzBGIMxBmMMxhiMMRhjMMZgjMEYw2PodZESKZMKqZIaSUidpCTGSIyRGCMxRmKMxBiJMRJjJMZIjJEYIzNGZozMGJkxMmNkxsiMkRkjM0ZmjMIYhTEKYxTGKIxhmYw6Vy1rUc2qZS2qWLWsRRmrlrUoVtWyFrWpWtaiOFXLWlSnalmLYlQta1GNqmXtokTKpEKqpEYSUiep08pVtN5yVY3MjH5Yri6qpEYSUicpyVqPMbBcXZRIiIHCWC1XURmr5SrqX7VcRbmrlquod3XlKswrV42GE/KyGpgOw2dpuaiRhAQdamO1tFw0nCwtUQyrpeWiTCqkSmokIXWSbROju7YzigJ52NbookTKJNtzzqC9/B620Wl/ZDudqKiHbXUuqqRGsv3qCuokJQ0n2/FclEh5h0ViLagOzUEcuoM3FillgIxaUNbGwrDtUFTyw/ZDFwnJWqogJQ0n2xRdlEiZVEiVZDHQANsIRZ0/bN8Tlfywbc71Z7atjdG1jc5FnaQk29rG6Npm56JEyqRCqqTmcW3Lc1EnKWk42bbnIrbZNj4XFZKsrauBNFlgNnyS6wABtE4QjBLJbBj5dYhgVEmNJKRO0rVPNpA5BkicBckhOxSH6tAcxGGsDby5wLxI1lQxzAfLwXrQmtsN5WA/qAcH0c4SNqa1czgpkwqpkhpJSJ2kpOGEhMJ6aZK1XQ3rwXYQbccabGI/iLZj7TURbV8yO4DA6msiRirbQNghRLYe2THExnqwHbRoFtiSb6MeHETLv43pYD5YDtaD7eCJVk+0eqLVE62daO1EaydaO9Esk7PNGEvljXKwH9SDg2j5vDEdzAfLwRNNTjTLavsoLKsXKWk4WVYvSqRMKqRKaiTG6IzRGaMzhjKGMoYyhjKGMoYyhjKGMoYyhjKGPRJtbtojcZGdudmMt5PCjXKwH7Szt2Q4HNM6M1yYDuaD5eA+sZ7USELqJCUNJ6tZFyVSJjU7W58gDtbwbGgNXz83iOvgcGE6aA2vhuVgPdgOysF+UA8OoiX+xnTwRLPEx+5EshdOHNtBOdgP6sFBtMTHBkeyt1Ac88Fy0KJ1w3ZQDtq+nZGShpNVu4sSKZMKqZIaSe1NimSvphhYVmOfJdnrKY75YDloDbcP27J6oxzsB/XgIPb1BkeyV1cWZIfiUB2agzh0B92A5LVphNxdgPbaI8XeW3FsB+Ug2lstUyx/Nw6infxvTAfzwWKvskyoDs1BHLqDOqwXYJK9AbMAz9XPn9+8+GtWP/7x6d07vGX16r2r7/96+f3tp3cf/3j57uOfHz68efm/tx/+tB/69+9vP9r1j7ef5t/Ozr37+Mu8TuGv7z+8A31+c377evyr80Bb929PHBS0rzcMLJiWYZZZIcNwwzzBjbRhHvNeNEgNGU4b5m0lYrAtvm2QmEHZi1mNRgwZG5Pb0HvIMGgoJdSGWmioofkwj46LG+YpUMQgWLQtwzyoCBlwB9uGXiKGjpXrMsztz5AB25/bMK6IQTN7MTdVHhmwWnikmPtHPpRz2yhTkfTrFdUHYi6tH7ZBHwvm3d4TY97Zz8c57xVfKMZjxVxN+0jkWdqGFHa2sRTzqRVS5EpFSfmRAguchzfLS3i7nQVSqBWlJLai5JhieIrOZ2usFZXTYo5KCilap0KCYyElU1FbTNE5FvN85b7iYUee3ivOfVtfGb7lXtGOIXa3Gco73nykhwznGRqrJdrF21Wbi+CQgRVRu3rMkNNpQ+TO3+xofxnmUiJk4LOjzRo5ZBgcyRx6hrYsNJQSmVGt1EFDjxk4J1tNoc+iNs/N1nKKGFrpNMR6IayIJobmZM/8LOaxZ8Ag1+V5IXMXLWKwTcVlKFfkHjWLMu+F1FgbKus6qT0/MuDs/XE1kjKrkccFzdcrelCRqHg8JZ4r2mmFXPcVwY6005Ee7Eg69WFvMcVgR+ZZ1H1FcCwGx2Kk22MxUmwsRjkdqdd9RQ8qzli0+2PRgmPRT0f0uq8IjkU/YzHuj8UIjcXctWKtfMVufF8qelDBov8qd8diKoJj0fJ/W0+GFcGxaGcsHu9SfPVYxG6/8zz5KIbeVcza925H0uPq4mkr0lkMptiN70tFDyr4oabYjW8WWqcVet1XBDtyludpBDtSzocavGvlc8vJj+v3r1doUMGxyMFbzquxmEdLsVZwLZNfb+aFFSOoOMPZ5fZY9NjszFxLzPPXcluRrqCiHEW/OxYlxWZnOVubpdbbipaCijOcTW+PRYvNztKFCm23FSMHFWc4x/2xGLGxqImtmGdLtxUl3e1ILbHhrK1TIXJbEau1poLzogYfy3X4LkxusUXmF4oU/FB5Wppb8JlaWzuK2IfauJeTW9XbitgKcSrOcEq+PRYSm1qNZ8cTx23FiOVI6xxOucrdsZinuCGF5HMsVK77ih5UXOdkqd4eixqbnSLnfKun+woNKs5wBp+pr8dCY7OzX+eULeX7ihFU5HPWd3sseg6ORT2tCJZrXyj0dkeC5VpXFo19lLsKje39TkU5itj9QjPHIrih/4WipqDijEXwmdo1H0XsQ1VhoRTc0P9CoTmoOMOp4/ZYjNjUGhdrrZHktiKXoILDOcp1dyxGcCVw3g/Io/XbCqlBxRnO4DP19VjEjiHzUNZaI7hCPIpyxXZdp4Lvj17RZyrHYipCs7Oc9z8njtuKKjFFPsPZ7o9FC46FnFbEyrUvFMFy7XVHNHTW//qk/rHBtqkfdsS+ILRakR/fchLevnrkmHd+z/aJr14+1G9wjOx3Tx2v3zL7u6N97dMoBdvRL7aj55BjnPO3+Vh50penn8t56zw/3gj5JwdfhMyPTxf+wcHPtpTH5fxXtyPsKJU3n/J4D+EfHMyXUnowXwrX77NF6XY7njqezlNlzo1XRf03ztPKefrqtPobHfk40n1HibaDm+vjquV+3r7aj/g2B4unmfvRvrB6enb/ePZkSDzplRR6x1Muzq9paHcNjw/vE+4vDx2D3xCQ8ers5++jOZ68Gv+Vr+c/fSuPB72SHx9WPDVwBzRsuPiJ5utuG8oV+kQLF8/y5ADr6TuWfAGsac53DY/3APIlt2dVvvr/cla1cd5gfrJqfWZQftFh4ggZuK/TRuz949e9CH0rbAbmm7sj9P26VvldplZD3wqbv8Y32msNjcN5c3ee1fSQgS+1tPw4u55/56Sf42ENfm2lvTrbffhVjfzMUYTfWymiD78GlPOT0VBuAb/+rsZM1i8N6dnqiC9Cv1omfpOBL8aLatDgN+1+PW7D07HswvWZXin2efRTf8cd/J7BM8fzqVXPixwt9i2geo1z2j4eKZ5+a/F8Y1B65Ak0f43fAhINfYu18PvAtWioDUX0rkHPd1BDT59a+E29WkLfn6mV3zisNfZd3Hq+T9VSpCKpmcdVNadQL86dv+bY94EvvjBWLwm14Xzlsf59O+qH+W9vf37/6Yv/X8lnuD69f/vTh3f7X3/98+PPr/72j///3f/G/38nv3/67ed3v/z56R1M5396Mv/xfcJ/TifNx88Pb14K/n3evVPKP+A/1GF/PR/Q8x8Df5DsD+YTYv6j/PAZDfwP", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 5ad72a83899..b2ffb7f621a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 8c05f1cdf21..293967ebbc5 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_0.snap index d8e5549b258..cbc3f08883f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_0.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "tZ3djh23jkbfpa99UfojqbxKEARO4hwYMJzAJxlgEOTdRx8lkt0Hs3dsFs6NayXuXpS0xSpKqp389fLLh5/+/NePHz//+tu/X777/q+Xn758/PTp479+/PTbz+//+Pjb5/Vv/3q58Eep7eW78m5d+7mOc6Vz5XOVc5372q5zLedaz/X42vG142vH146vHV87vn58/fj68fXj68fXj68fXz++fnz9+MbxjeMbxzeObxzfOL5xfOP4xvGN46Pjo+Oj46Pjo+Oj46Pjo+Oj46Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+OT45Pjk+OT45Pjk+OT45Pjk+OT5avrOq9zLedaz3X9XsN1/Vx/91Kv9XMD13Ku9VzbufZzXXFoXcv6ecZ1/bzgWs+1nWs/13GuK85c14r+XAB0qAC6wTAgAzaQAzpNKwC/1QD4LfRAZ6YCG4jBPKCzE93Q6alQDZoBzOiaTlEFMmADMZgHdJ4qFINqsMwVXcZc3TAMyIANxGAewIzdUAyqgZnJzGRmMjOZmcxMZmYzs5nZzJi+FQOO+bthGJABG4jBPIBZvKEYVAMzi5nFzGJmMbOYWcw8zTzNPM08zTzNPM08zTzNPM2MBKhrIjVkwIZiUA2aQTcYBmTABmJg5mLmYuZi5mLmYuZi5mLmYuZi5mLmamYkUe0A/PAA4IcJMA/gVr+hGFSDZtANhgEZsIGZm5m7mbuZu5m7mbuZkVaVATALgA3EYB5AWm0oBtWgGXSDYWDmYeZh5mFmMjOZmcxMZiYzk5nJzGRmMjOZmc3MZmYza1pNQDcYBmTABmIwD2haKRSDarDM7QJ0A9y+MOD6iFBgAzGYB5BWrQCKQTVoBt1gGJDBMrcKEIO5oSOtNsDcANWgGcDcAcOADNhADOYBpNUGmAegGjSDbjAMyIANYCbAPIC02lAMqkEz6AbDAGYGsIEYzAPIwQ3wCAC/NQHrt/oFEIN5APm1oRis6L0A8FsYXuROx2AidxSQOxuKQTVY0TuGDrmzYRiQAcwYH+TOhnkAubOhGFSDZtANhgEZmJnMTGZmM7OZ2cxsZjYz8qJj5DHVO0YVE7tjVDGxO0YVE3tDMagGzaAbDAMyWE0dGGdM7A3LPNaAD62YGqAYoGbqgGaAqmkAlnkQgAxgZoAYzAOY2BtgFkA1gHkClpkuwDBYZioANhCDeQATm9B4TOwNy0xoPCY2oc2Y2BtgRuMxsTewgRjAjO5gYm+AGY3Hw4XQZkz1DTCj8Xi4bCADNlhmRncw+RUw+RmNx+RntBkPlw3LzGg80mHDMCCDZWZ0BwmyAWY0HgnCaDMSZAPMaDwSZEM3GAYwoztIkA0wo/FIEEGbkSAbikE1QIGM7iBBNgyDZRb0CwkiaDwSRNBmJIgCEmQDzOgFEkTQeCSIoIVIkA3DgAxgRpvxcNkwD+DhIugFHi4TTcXDZaJheLhs6AbDYJkn2oyHywYxQMmPXiAHJ9qMHJxoM3JwQzPoBjCjO8jBDWwAM3qBHJyrzYQcnBNQDKpBM0A9f12g4UROeCZeBYSH4lVBeCpeq+WETDxUnKoTlgxXB3Wn4aQxBkhjEEhjMGga1cupOGkM9FCXSZs0Bnq0F0po/V4pKbGTOCEGlk2kq/xNxQkxsJYiXetjMUW6qsJKiXRZtYmcNAZ6pCsrFA6kSyssc0jXVpuKU3XSGOiHrq82DSeNgb7pEgtLENI1Fkp00kWWkq6yNhUnxKjoh+4JbOpOiIESmXRnADUy6d4AimTS3YFN00h3CDZpDPRSdwk2NSeNgb7pXgHqO9LdAtRjpPsFm8RpGumuAao00n2DTdUJMVBXke4eoHoi3T9AsUS6g7CJncQJMVAVke4kbCpOGgN90/0ElC2kOwqoSUgrxk3kxE4aA73UqlFpXk4aA31DbhcUKYTkPtSdhpOu19HLyU7ipEv21XNGjhdULYwkL6hN+KpOzUljDJDGIJDGYBA7idM00jxH4cCa55uqk8aYIMQYFwgxUBCw5vkmdhInxEC9wJrnm4qT7j6gb5rnqBlY8xxFA2uebyIndtIY6KXmuZLm+SaNgb5pnqN4YM1zVA+seb5pOJGTrhPQS83zTdNI8xzVBGueo4pgzXOUEax5vqk7DSddiqCXmuebxEljoG+a5ygnWPMc9QRrnm9qTt1JY6CXmuebNAZ6pHmOaoI1z5U0zzcVJ92zQUs1zzd1p+GkO0Joqeb5JnGaRprnm4pTdWpO3Wk4eQz2GOwx2GOIxxCPIR5DPIZ4DPEY4jHEY4jHEI8xPcb0GNNjTI8xPcb0GNNjTI8xPca0GHJdTsWpOjWn7jScyImdxMljFI9RPEbxGMVjFI9RPEbxGMVjFI9RPEb1GNVjVI9RPUb1GNVjVI9RPUb1GNVjNI/RPEbzGM1jNI+hmYwaVzRrUcmKZi0qWNGsRQkrmrUoVEWzFnWpaNaiMBXNWlSmolmLQlQ0a1GJimbtpuJUnZpTdxpO5MROYrRzFa3XXBUlNaMfmqubutNwIid2EidtPcZAc3VTcdIYGBfNVVTFormK2lc0V1HqiuYqal3ZuQrzzlWlaYS87Aqqw/BpWm4aTuQEHepi0bTcNI00LVEIi6blpurUnLrTcCIndtIY6K7uiqJAnrotuqk4VSfdby6gs/SeusmJOnrqLuem5tSd9FcbiJzYSZymke52bipO9YRFYm3oBsOADNjAGouUUkBGbWh7U2HqVigq+al7oZvISVvKIHGaRrohuqk4Vafm1J00Bhqgm6Co86fueaKSn7rFiap96h7nJnJiJ93VxujqPqeSbnRuKk7VqTl1p2FxdbtzEzuJ0zTSLc9N3mbd9NzUnNSHz20fHiiJ0zTa5wdK6sOI7xMEpebUnYYTObGT7F2yqftCAN0XUigG1aAZdINhQAba1JWDaxV5BZbAGtgCtb2kOAIpkAMlcDrqWcLBsncOF1Wn5tSdhhM5sZM4TaOqjWfFFtgD0XisvhZSIBqPVddCNB7LroVoPNZda9GMxlcdCT2DqNoPPYU42AJ7oA6VKGo0bYNm4EEJnI6ahAdLYA1sgT1wBEa0HtF6ROsRbUS0EdFGRNPziqq90HQ+OAIpkAMlcDpqUh8sgTUwolFEo4imqV3149bcPiiB01HT+2AJrIEtsAeOwIjGEY0jGkc0iWgS0SSiSUSTiCYRTSKaRDSJaBLR9PgQy+6FLbAHjkAK1EM5nfZ6lHhwGpZ9nLixBNbAFngOsxcNJ3JiJ3GaRlrSbipO1UkbXxUpkAMlcDruc8WNJbAGtsAeqNE0sN4WsOdQ9NUTQwmcjnpbOFgCa6BGG4o9cARSIAdK4HTU2wJ2Poq+pGJYA1tgDxyBFKhbe0riNI20IN5UnKpTc+pOw0kbz4rTUfP+YAmsgdp4UeyBI5ACOVACpyPvlzyKvt2yoRo0g24wDMiADeSA5rM+Y/TFFsMW2ANHINrcdVg0nw9K4HTUFwQOlsAa2PSNlwXdYBiQARuIwX5PpuiLMhtQOPz997sXexvrxz++fPiAl7FevZ71/V8vv7//8uHzHy/fff7z06d3L//z/tOf+kP//v39Z73+8f7L+tvVtA+ff1nXJfz146cPoL/fxW9fj391nXvL+e2F0wXj6w0Tq5NtWPVYyjDNsA56M21Yp8GXG6inDNGGdXvJGHS/7xgoZxDvxSo9M4aK1ccxMKcM0w2tpdrQmxt6aj6sE+ZmhnVYlDEQ1lnbsM40UgbcPY6BW8bAWNpuw9opTRmwP3oM88oYpHov1v7LIwOWBI8Ua6vJhnLtMFVXFPl6RbeBWKvwh22Qx4J1v7fEWHf2+DjXveKNYj5W1GvYSNRVAKcUevixFevJlVLU7opW6iMFlkEPb5YX+e12FUqpVrRWvBWtphTdbxN1XLlWdJ8Wa1RKSkF+y63r0CynaNUVfeQUbLeruo5i7iseDufTe0Xct+WV4VvuFSMMubvNFL/jrUd6yhDP0FwtMS6/XY21VE4ZaglD5r499OR+G9aCIGXwO/9YFW7KMH0cauoJOCq5obXMfBitTzdwzuAzavSS+iz6sMwao5aMYTR2Q64X5PXMwtSc5OqfxTrfTBjouiyzaO2UZQy6fbcN7crcYVZJZb2gnmtD96qMOtdHhnE9qyVK9VricTny9QpOKoorHk+J54oRraDrviLZkREd4WRHSlR3PHKK6R1Zh073FcmxmD4Ws9wei1lyYzFbdKRf9xWcVMRYjPtjMZJjwdERue4rkmPBMRbz/ljM1FisPSevdK/cje+tgpMKr/qvdncsliI5FqP+f6vBtCI5FiPG4vEew1ePRe72u46LQzHlrmLVvnc7Uh5XF09bUWIpV3I3vrcKTir8Qy25G98qtKIVct1XJDvC0ZGZ7EiLDzV516pxy6mP6/evV0hS4WNRk7ecV2Oxzn9yrfC1TH29FZdWzKQihpPp9lhwbnZWX0usQ9V2W1GupKKFgu+ORSu52dliY7L1flsxSlIRwznk9liM3Oxs7BuTTcZtxaxJRQznvD8WMzcWvXgr1snQbUUrdzvSW244+2BXEN1W5GqtpfB50ZOP5T4lts35tqIkP1Q/66wj+UztY4Qi96EO38upo8ttRW6FuBQxnFRvjwXlptbwk9+F87Zi5nJksA8nXe3uWKwz2JSCfP99Hc5c9xWcVFxxLtRvj0XPzU6iOJ3icl8hSUUMZ/KZ+nosJDc7+YozslLvK2ZSUeOk7vZYcE2ORY9WJMu1Nwq53ZFkucbiRSPPdlchub3fpWihyN0vpPpYJDf03yh6SSpiLJLPVJYaityHKuSFUnJD/41CalIRwynz9ljM3NSal9das9BtRW1JhQ/nbNfdsZjJlUCc7tc5+LaCelIRw5l8pr4ei9wxZJ3itdZMrhBD0a7crutS+NufV/aZ6mOxFKnZ2eLtzYXztqJTTlFjOMf9sRjJsaBoRa5ce6NIlmuvOyKps/7XJ/WPDbrH/LAj+iWg3Yr6+JajW92PHOvOb9m+8NWrg/INjlnt7inz9Tti/+noX/s0Ksl28OXt4JpyzDh/W4+VJ315+rnEO+P18UbIPzn8Ncb6+HThHxz+2bb2uJz/6nakHa37zac93kP4B4fnS2uczJfm6/fVonK7HU8dT+epeM7NV0X9N87T7vP01Wn1NzpqOMp9R8u2wzfX59Xb/bx9tR/xbQ4vnlbuZ/vi1dOz+8ezJ0Pxk14qqTc06fL5tQzjruHx4X2ZT95qp+nv99N8dfbzn6OJe9TDTPm6l+uf9aT6QS/Vx4cVTw2+A5o2XP6J1itlaL70pSfHT1/Zi3al3hRlfwFsSK13DY/3ACreDr45q+pF/81ZNWa8wfxk1frMIP41hYUzZfB9nTFz7x/PeO92pr7b9mYcUt8KG73YvBy9p3rR/btMS5Z6e7j6KymjprJrxLu/67Tnyf3y6ZFoHA9L7ksnbbw62334RYv67KtEjfxbJ42kP3Y8aYf4FvDrb1qsZH1jqE9XR/4i9Ktl4jcZ/MV4Ekka7KbN1+M2PB1LJl+fyVVynwdH/Z13+PcMnjmeT60eL3KM3Hd4+jXjtH3mWhGvk/Qr9TUg8ncXOknqS6hxXrRkmcdgbxJfAE09PHrzrxT3Jrk2kNw1+Ff1ekt9Bad3/8ph78kv4/ptt9fcl3Grn3gtWaoX8X3DfuW+jHv5O2dL9rYNP6x/ev/zxy9v/q8kf8P15eP7nz59OP/465+ff371t3/87+/2N/Z/Nfn9y28/f/jlzy8fYIr/tcn64/uC/+RNWc+fH969NPzzun2XUn/Af3ND/3o9X9cfE/+i6L9Yj4j1R/vhbzTw/wA=", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 5ad72a83899..b2ffb7f621a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_cow_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -157,8 +157,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index ec8ed146962..95c8f9256ec 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZndbts4EEbfxde5EMkZDtlXKYoiTd0igJEEbrLAIsi7L0ejoyQL2PDKe5PvuDaPZJHDn/p193P/4+X39/uHX49/dl++vu5+HO8Ph/vf3w+Pd7fP948P419fd5P/KXn3Jd/sSomQCI2oERbRIvocMkWkiLBIWCQsEhYJi4RFhqWM6HPoFJEickSJkAiNqBEWERYNSw1LHRYdkSNKhERoRI2wiBbR57ApIiwWFguLhcXCYmGxsFhYLCwtLC0sLSxtWOoIidCIGmERLaLP0aeIFJEjhsVGSIRG1IhhaSNaRJ8jTdOSw5MmhwwUQAAFKmBAA/oCaQIwJ8wJc8KcMCfMCXPCnDBnzBlzdnNyKIAAClTAgAb0BcoEJABzwVwwF8wFc8FcMBfMglkwC2bBLJgFs2AWzILZqyONEZ28PgISkIECCKBAXcALI4mDf1gd/MPVQYEKGNCAvoCXRkACMlAAzIbZMBtmw2yYG+aG2UsmmYObffR62QQoUAEDGtAX8BIKSEAGMHfMHXPH3DF3zH0x52kCEpCBAgigQAUMaADmuay6QwIyUAABFKiAAQ3oC3hZ5ckhAT5lJ4cCCKCAT93ZwYAG9AW8rALcXBwy4GZxcLM6uNkcKmBAA/oC8xIzQwIy4GZ/YvNSM4MCFTCgAX0BL6uABPjS449lXnxmEECBChjQgL7AvBTNkADMXoPFn6rXYIACFTCgAX0Br8GABGTAzf7AvQYDFKiAAQ3oC3gNBiTAzd5xXoMBAihQAQMa0BfwGgxwc3XIQAEEUKACBjTAzWMAFK/BgARkoAACKFABAxrg5jESitdgQAIyIDGdFi+90h0qYMAQyuTQF/DSC0hABgoggALDLMnBgAb0Bbz0AhKQgQIIoADmgrlgLpgFs2AWzILZS0/mPaMCFTCgAX0BL72ABGSgAJgV87yiqYMBDegLzIvdDAnIQAEEUABzxVwxV8yG2TAbZsNsmA2zYTbMhtkwe6WIjyivlIAEZKAAAihQAX/gLvRKkergZvN9+gQkIAPeqjk0oC/gVRCQgAwUQAAFKuDm7tCAvsBcDjMkIC+gXEu5lnIt5VrKtZRrKd9C+RbKt6h8i8q1KtfyIREggAJ1gflEMDkkwPfzycHPBfOpxk8G+e3tZsfZ6vvzcb/3o9WHw9Y4gj3dHvcPz7svDy+Hw83ur9vDy/yhP0+3D3M+3x7Hu+Mi+4efI4fw1/1h7/R28956Ot107DWXxmOrsjbXz+3TmfZauPrYStpqSP1yg+9iFkPeZmgVQ9VyyiCnDWOOt8UwJu665R6q9vUeup4ynOmJsWtbBPnDHejFPZmFjhi7kC3tbX0EH3rhX+37mfbT+gTGtnU69QTOGcYBCsM4GWwxZFkNoyNP9mO+eiicu4ni+6vlJkreZOhU5ejVTfcgst7DmCG3GNRWQ932HGpZR3QV3WSw9TlYLlcb6oayLOsEObYIG8pqrOi072VDe+k8RJ3Sde2TbmivmXJQmba0V9rXdHJayvXqFea84qIl5rziojUm96tnlrN3cfUqU9furO3kcCr56u44r7ioO84rLuoOX0+u7I6zd/F/dsfp2eHsSmGyrjVt21qj9d2waY59nyKHbJNhHCHW1Sr3LbN0Xde7cRQ7uXXwGz2laBMTZfs4Guw/TPTrStGmtOVL2DpXbjZIv84wjkEMqHHI+bCLq9sMZYOhCoJPpX1xT4yZbZ3j2qb2zHA2fb7+t/Hq9u7++OknsTc3He9vfxz2y8tfLw93H959/vuJd/hJ7en4eLf/+XLcu+n9d7Xx56uM/1oU6d/8l5PxclT1TWnmL9P8rt5Itm9vfjP/AA==", + "bytecode": "H4sIAAAAAAAA/+1cSY7jyhFNaqqWapBq6P5n8I5zkl4V4Or2eAlOeQyDgH0DA954Y8ArA14Y3nhnwL6Dt15486/xxSqG9BQMUdQvZlc30Al0c4hkDC8iI0eVo17KfPvPae9n7XWhuoXqPLZX93XFG5GXa1NP5yvRc/KV6Dn9SvScfSV6zi3peZAEGqWbAGuc1wAzV8cLGfi/9mbZPk+APmIQeEsmd0z+iRuWS8G+EfUPli3PCzv8Y+L/zg5/l/T+eb3nj7aQ3Ov22QEs6RuiTYD2C0abAu2XjDYD2q8YDWP114yGMf6bltboe6v29x/a+yXT30acIQZj++le0H8CtjXlZ/Uej4FyvVNyifdTbcWuXfv/aIe/T/w/2eEfXLZx9tvWMRSb7/au2PmMYmRpJ0YCh8lTat/ukEbyV8pqbvEcJo/04fhQHBN2K0HXjUBz2P1KkLMS5Ei8sC01z5d2MCnIxivVLUS7PmIjL1P2jHo3+P4eYpLX4zIxJq8ZDXG6ae+Xgq4j4lRdM3lK0HkNsjHv8iLhRHqfixPGxZrRroC2YbRrgS9heAPvR8QwGpoPSP5KWfXpLh/cMH04PjwfrAVdNwINYxhpKGctyJF4rUbkdTkiL4ox3pc05bG9uklQ6dTzyiSI3FTHfmq2I0kdBZ4pvKjITKnTLEnzqiryIE3dwMRppP0iDmITZlG2VN3cSby9TJuoMllWahNsmflRlnqJCdyiSEodBIEpiizXW3KRusYLyyrx8qKI/MSkaRCVUn490P2VZam6+XXHOwqzLIkzHRR5kgVh5EdVlOdVGVdhkGeelyZVErsmMkEauX6cGO2VJoxSLy+r8GUsweOXePtuWhYmN/72v0ib1MRuuEUzLLWXFbHJTKL9rXhT6NDVhRtWeex7WewnusgKz495rCM2JHcD70dsl3poniD5K9WNSxt5YsP0OdZOCLtbQdeNQON54laQcyvIkXitRuR1OSKvqxF53ViwcSnQxoshz6eYuFPdQrR7kM378gegYX/IizS2wPnnH88YW6DP7hkNffDAaJgX3jMZJHcuyJgxGtXN2qtdH7nuHfBVqhtHqO9cwGF+xLaK6W9pPCPqf81k4/rFWHKlOYTzeWwe3FeQ/JXqxp2NvuKa6cPx4X3FjaDrRh2Psb6x640g5xuv8Xj1zaGGxKMkB9sHH1Nfse8f26v7uuJJc1rebi3l2mxouyX5K9X1h412K40lpPjg/Tl+uxFoPA7vBDl3ghzbvK6+UL2+2fjjbOzri39sbkL8qC2sVbc90pjV9jiN4zVT3XE/6jZRXbwQ1zl796f22oyX/+rsv+G5YEj/Ia0VWV5n243HLgTZzR7Vn5Vs0xxsugCbPtbqACeq/1Nnz/Mv7bu1IJuPQS2t74d96yHu64pPNkzrve4XYFdTZrUVu3SD199arKV1mTnIbf4NXafo6/NwDkf+6puLW953jiT8Md80ZVZbkS3ij/tFHH8pR0j7S33+wtxAmG5U1zdzRsNxJMlcq25/w8eY2N4f26tfmiRPQ7eKktStwsoLtK7cKNCByao4zbxSR+F2rTaIqu0iZuLmcRynoQ6367p+URal5blfLMXEHOxqyqy2IjuTYgL9zmNCWmOX+o0hbRgxlWIC8xJiosB+vyrKJCm9KI11XkRBniTbdWW/cksvTuLY264NF3mcZYVfBiaJKn+7LqyryuR+4aXbBX3L7V1LvsVc05RZbUW26Fuc6w3xrbR/NNS3Q9o79+3IGCQS/tiPN2VWW5Et4o/5aUi+xfoc/762KOVUae9MGhuTTOmsUGuOOKcfcwzkMHlkI75D+StlNY528+or1cVc8pHlPiM9t48mfSztLcV9OWEu6NOMvRaqG0OIlzQnQxkYD9xuSfZT/XKVxvb8XBFfA8e6C0ajuv9vr7bPFkrr46f0XwBtBvf4PBO+x1wxZ/W/Z/YuPqO9CyYbzzqOJDfhWEwAMyXIRZqE44TRJke+Jfwk+0bG9uxzU+eeByK9zz0PhFjwc1PY7m8YbSLwtYzh4POBJH+lulja6KtmTB+OD18Dngu6bgSaw+7nghwp50u8pkwH3n6aslRdv7/FWIPerZTcXh/H0Wfnv6mAqyPgys9747cbgcbPaUhxMhPkSLxWI/LiZxgs9SdaGotT4esiiLl0pvPcfEg2Nfz/c0Y+xHjkvx2QfCu1afIVP1PflMf26r6q+LnlsU/KfaAErKTzx0P9Q3qf219hrK4YDceOl4zW119ZwnBwf0XyP1d/JY3f+/qrpaDrRqChb3jsTIV3kx5e5Mv1Ed5KWV9DdjleuG8kzVMmqhtPB+u+7N1PWkOkfaOFgN2iBztH0Iefgx0Zn5yfKccinQnj+f01412y6dz8jnHE90DRb3wsjLHJzz+QHGkOOGU0qpu2N7yPGDuGpTkdyboEnaT1hL49iFN7QLz94hoDfUu231mx3Qv4OUks0jlJ1JEXKQZJ73P7MMSJn4XEvTI6CylhyH9jQ7pMVP+e7Buuk4v7YuibeX1o0wPQpkJ9HpPvhfroX8Jow+pzn/A2Lp2teKr3djzXqfffk45vgSe2Y46ndF4E63M8H3owQIw2qos1P9uE8XoM62Ox+6k+rC/lnr79asluaU96Leh3p07Lxlh5qg/r35+pa1/Mo/y1oN+DOi0bdf3IdH1/pq4fhPrYpu6ZrqjfB0ZDG7FffuZdd3m+xZ4S4sPbVh8WTeHYfSfU/wB1eNv6Dmj42zyOz/s3xKdvP7vvzIKEjxS72C55fsH44W1Wko3t+Kne2/Fcp95//5Z7yKjjkFwu/YalD0/Eif/eCPF8YDQc098yOaf2Vp9qdWDjqTNnNnHXycsc71nXlj+daeNlBnSs/7uWAc6x6PqaP+JidOaZIDNZlJVlWGR8HN8UHMfjb/gtr8NH0n41FWme5Qi6Uzm1l/FfaBO8HpeJMb9gNFx3uTgij76nv0OB39Ez36OfCHz4M5/7IR++1/cH5sO32OuT9ob4mhCfrzbl2N+S4BiifZZidPBeA98rsrT30btXJLVpy+d1ducIpHWmSY8+ltbaQtJHWpucCvrguYZj++nYdqQzCPxcw+SE7Kf65bpWx9tHn5+R10fGS8ojjurmHInXJ8ZLwkPKg1Svabdj91+ZDpLCDwudR0EWxCf7L5pnLGqwtT785qJ9pnVYXp/4zVn9v7cMmnj4B+Sm57qCvKbev3vqOUeuzzyEd7P68N2y7taf1t36u98g1l0diXYJNBwjNuWqfUa8kBfpMWf1/9UyIJ+8g2/o+40g/x2Tf6C38I6v+V4K9S+F+o1//snGXWj72Hn7WSbjj++4bhQ73/rDfly/oP4w+ML6Q/9bf7j//i36Q2y3U6Guw3hO1fFxsRLeOeo4Zvxv/TXlsb16QeC5bqk9U5og0qmfe3EQxyY0Ok7C0kRhVurKC7PATyvtGi+pKh0FhY5NWhax4bZOemw7dx6A+P0AQmTJgeFXAAA=", + "debug_symbols": "rZndbts4EEbfxde5EMkZDtlXKYoiTd0igJEEbrLAIsi7L0ejoyQL2PDKe5PvuDYPZVHDn/p193P/4+X39/uHX49/dl++vu5+HO8Ph/vf3w+Pd7fP948P419fd5P/KXn3Jd/sSomQCI2oERbRIvocMkWkiLBIWCQsEhYJi4RFhqWM6HPoFJEickSJkAiNqBEWERYNSw1LHRYdkSNKhERoRI2wiBbR57ApIiwWFguLhcXCYmGxsFhYLCwtLC0sLSxtWOoIidCIGmERLaLP0aeIFJEjhsVGSIRG1IhhaSNaRJ8jTdOSw5MmhwwUQAAFKmBAA/oCaQIwJ8wJc8KcMCfMCXPCnDBnzBlzdnNyKIAAClTAgAb0BcoEJABzwVwwF8wFc8FcMBfMglkwC2bBLJgFs2AWzILZqyONJzp5fQQkIAMFEECBuoAXRhIH/7A6+IergwIVMKABfQEvjYAEZKAAmA2zYTbMhtkwN8wNs5dMMgc3+9PrZROgQAUMaEBfwEsoIAEZwNwxd8wdc8fcMffFnKcJSEAGCiCAAhUwoAGY57LqDgnIQAEEUKACBjSgL+BllSeHBPiUnRwKIIACPnVnBwMa0Bfwsgpwc3HIgJvFwc3q4GZzqIABDegLzEvMDAnIgJv9js1LzQwKVMCABvQFvKwCEuBLj9+WefGZQQAFKmBAA/oC81I0QwIwew0Wv6tegwEKVMCABvQFvAYDEpABN/sN9xoMUKACBjSgL+A1GJAAN/vAeQ0GCKBABQxoQF/AazDAzdUhAwUQQIEKGNAAN48HoHgNBiQgAwUQQIEKGNAAN48noXgNBiQgAy7sDgpUYAhlcmhAX8BLLyABGSiAAAoMsyQHAxrQF/DSC0hABgoggAKYC+aCuWAWzIJZMHvpybxVFECBChjQgL6Al15AAjKAWTErZi89KQ4GNKAv4KUXkIAMFEAABTBXzBVzxWyYDbNhNsyG2TAbZsNsmA2zV4qob6onIAEZKIAAClTAu6gO3oU/z14p0nyfPgEJyIC36g4N6At4FQQkIAMFEECBCvjWeHJoQF/AyyEgAXkBpS+lL6UvpS+lL6Uv5Vso30L5FpVvUemr0td8PJhBAAXqAvOJIDkkwJvPhxlv7ueY+WRQ3t5udpytvj8f93s/Wn04bI0j2NPtcf/wvPvy8HI43Oz+uj28zB/683T7MOfz7XG8O7rdP/wcOYS/7g97p7eb99bT6abJn6i58diqrM31c/t0pr0Weh9bSVsNqV9u8F3MYsjbDK1iqOO2njDIacOY420xjIm7brmGqn29hq6nDGdGYuzaFkH+cAV68UhmYSDGLmRLe1tvwYdR+Ff7fqb9tN6BsW2dTt2Bc4ZxgMIwTgZbDFlWwxjIk+OYr34Uzl1E8f3VchElbzFIr+tYTpuuQWS9hjFDbjFUoSzHTtM2Gcr6RFfRTQZjdhr71nK1oW4oy7JOkGOLsKGsxopO+142tJfOTdQpXdc+6Yb2mikHlWlLe6V9TSenpVyvXmHOKy5aYs4rLlpjcr96Zjl7FVevMnUdztpOPk4lXz0c5xUXDcd5xUXD4evJlcNx9ir+z+E4PTucXWtM1rWmbVprxjHp3bBpjn2fIodsk2EcIdbVKvdN19DXa5Bp0zxf1xVzHOZObj7kzC6yTUy17ePzZP9hqVjXmjalLV/C1tl2s0H6dYZxkOKRHMekD/vAus1QNhiqIPg0OVw8EmNuXGfJtqk9c6RNn/v/Nl7d3t0fP/2o9uam4/3tj8N+efnr5eHuw7vPfz/xDj/KPR0f7/Y/X457N73/Mjf+fJXxn5Mi/Zv/9jJejnnhpjTzl2l+V28k27c3v5h/AA==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_0.snap index ede8e840b2b..78879d8f89d 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_0.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZndbttIDEbfxde5EGc4f32Voijc1CkMGE7gJgssgrz7DkUdJVlAgiv3Jt9x7DlRJFIcwa+7n4cfL7++H88Pj793X76+7n5cjqfT8df30+P9/vn4eO6/fd0N9iO03Zdwt4uDh3gEj+ihHskjexSP6uEWdYu6Rd2iblG3aLfEHtmjeFSPNkYaPMQjeEQP9XBLcktyS+qW1KONkQcP8Qge0UM9kkf2KB5uyW4pbiluKW4pbiluKW4pbiluKW4pbqndUnqIR/CIHuqRPLJH8agebYzWLbWHeASP6KEeyaNbWo/iUT3aGDJ0jQwGAgQgAl0nwSABGShABdoEMgACBCACmAWzYBbMglkwB8wBc8AcMAfMwczRIAMFqECbwArfQYAAREABzBFzxBwxR8yKWTErZsWsmBWzYlbMilkxJ8wJszWJJIMIKJCADBSgAm0CawzJBvaZYmCfqQZtAmsJBwECEAEFEpCBAmAumCvmirlirpgr5orZWkassK1pglWvtY1Dm8Bax0GAAERAgQRkAHPD3CZzGAZAgABEQIEEZKAAFcAsmAWzYBbM1k1BDBKQgQJUoE1g3eQgQAAiYOZgkAAzR4MCVKBNMI4RNRAgABFQwMzJIANmzgZmLgZm7hc3jKNlBAECEAEFEpABGxF2xsZRM0KbYBw3IwgQgAgokAAbPXZaxuEzQgXaBDaCHAQIQAQUSABm68FoJ8p60KFNYD3oIEAAIqBAAjJgZjvh1oMOZrYTbj3oIEAAIqBAAjJQADNXgzaB9aCDAAGIgAIJyEA3q51560GH5hCtBx0ECEAEFOhmHXc8GShABdoE1oMOAgQgAgqYORpkwMxqUIE2gfWgQ/BbbrTW02SgQAJMOH6mABVoE1jrOQgQgAiYuRgkIAMFqECbwFrPQYAARACzYlbMilkxK+aEOWG21tNqEAEFEpCBAlSgTWCt5yAA5ox5HHb2R631HDJQgAq0CcbxN4IAAYgA5oK5YC6YC+aCuWKumCvmirlirpgr5orZOiWJQQVsGzruz207aztt6xQH29KqgW1qk4Fta7NBAjJg5vz2drfjQeL78+VwsOeID08W/XnjaX85nJ93X84vp9Pd7p/96WX80O+n/XnM5/2lv9vb8XD+2bMLH46ng9Hb3fvqYXmpWH+Ni/sonpenz+tlZX2K/PW+QyqzQdr1Btt9TIawzVAzhpzikkGXDf0eViZDvzHlLceQU5uPoaUlQ142aGo6GTTr+6WUvM0Qlwwr1RBs3z8KwoezkK6upqAUQ5/0W9aX+TJ8qIT/V+PKZeg7Qy5D3xsOixdyTSE2yF3R99+bFEFnRa+nRcVfqMi1o+gTbD6KGLYpGreHfmm3HYXqfBSaZJMilVmRN56LHOfKzpq2Kcp8LkqItysW/5GVBonz7boP5A0N1ucn61vcsF4bpzENctt6SRvWp0BXpA+3yD9Yn1ifZfEGFerN825dcdXAW1dcNfGi3HyDWT2K62ZejDcPvesVW6Zenosq18WijvnmolhXXFUU64rriqLdXBSrR3FdUajcXBTXK24siuU75frsLDqP37px/Kb8rtg2ct4nRrdtU+gw76k0tC1TK897gP4guLil0pXKrAODo36sy/JJkNaup3I1PvXGHwiqzHeJuk3ATaIMi0ewPrvn4V8H2XIdyjz+Nhu0LRm+9Vf7++Pl05djb+a6HPc/Tofp5cPL+f7Du8//PvEOX649XR7vDz9fLgczvX/D1n981b5n1pi+2bcl/WVsw11s40sZ35U7lfjtzQ7mPw==", + "bytecode": "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", + "debug_symbols": "rZndbts4EEbfxde50JDDv75KURRu6hQGDCdwkwUWQd59ORodJVlAgiv3Jt9xbJ4wEodDwa+7n4cfL7++H88Pj793X76+7n5cjqfT8df30+P9/vn4eO6/fd0N9iO03Zdwt4uDh3gEj+ihHskjexSP6uEWdYu6Rd2iblG3aLfEHtmjeFSPNkYaPMQjeEQP9XBLcktyS+qW1KONkQcP8Qge0UM9kkf2KB5uyW4pbiluKW4pbiluKW4pbiluKW4pbqndUnqIR/CIHuqRPLJH8agebYzWLbWHeASP6KEeyaNbWo/iUT3aGDJ0jQwGAgQgAl0nwSABGShABdoEMgACBCACmAWzYBbMglkwB8wBc8AcMAfMwczRIAMFqECbwBa+gwABiIACmCPmiDlijpgVs2JWzIpZMStmxayYFbNiTpgTZisSSQYRUCABGShABdoEVhiSDewzxcA+Uw3aBFYSDgIEIAIKJCADBcBcMFfMFXPFXDFXzBWzlYzYwraiCbZ6rWwc2gRWOg4CBCACCiQgA5gb5jaZwzAAAgQgAgokIAMFqABmwSyYBbNgtmoKYpCADBSgAm0CqyYHAQIQATMHgwSYORoUoAJtgrGNqIEAAYiAAmZOBhkwczYwczEwc7+5YWwtIwgQgAgokIAMWIuwKza2mhHaBGO7GUGAAERAgQRY67HLMjafESrQJrAW5CBAACKgQAIwWw1Gu1BWgw5tAqtBBwECEAEFEpABM9sFtxp0MLNdcKtBBwECEAEFEpCBApi5GrQJrAYdBAhABBRIQAa6We3KWw06NIdoNeggQAAioEA363jiyUABKtAmsBp0ECAAEVDAzNEgA2ZWgwq0CawGHUyYDCKggAmzQQYKUIE2gZWegwABiICZi0ECMlCACrQJrPQcBAhABDArZsWsmBWzYk6YrfS0GgQgAgokIAMFqECbwErPAXPGnDFb6WkzSEAGClCBNoGVnoMAAYgA5oK5YC6YC+aCuWKumCvmirlirpgr5orZKiWNh/IK2DHUDthWKUkNBLAjbTKwQ202sGNtMUhABsxc3t7udjxIfH++HA72HPHhyaI/bzztL4fz8+7L+eV0utv9sz+9jB/6/bQ/j/m8v/R3ezkezj97duHD8XQwert7Hz0sDxWrr3Fwb8Xz8PR5vKyMT5G/3k9IZTZIu95gp4/JELYZasaQU1wy6LKh72FlMvSNKW+ZQ05tnkNLS4a8bNDUdDJo1vdbKXmbIS4ZVlZDsHP/KAgfrkK6ejUFZTH0Tr9lfJlvw4eV8P/VuHIb+smQ29DPhsPijVxTiDVyV/Tz9yZF0FnR19Oi4i+syLVZ9A42zyKGTQpteb6hw7ZZqM6z0CSbFFnZIfqhrmxTxHllZ03bFIWtsh8S4+2Kxcu5UiBx3q57Q95QYL1/Mr7FDeO1cRnTILeNl7RhfApURfqwRf7B+MT4LIsbVKg397t1xVUNb11xVceLcvMGszqL63pejDc3vesVW7penhdVrouLOuabF8W64qpFsa64blG0mxfF6iyuWxQqNy+K6xU3LorlnXK9/Rad22/d1n5jyu+KbS3nvWN02zaFDvOZSkPbNos2z0KHTY0vz8eI/iy5eCpLK4o60Hvqx6VdPgtW/ous3NBP5fUHgirzRlO3CdhnyrA4g/X2P58f6iBb7kOZO+hmg7Ylw7f+an9/vHz6fu3NXJfj/sfpML18eDnff3j3+d8n3uH7uafL4/3h58vlYKb3L+n6j6/aj90a0zf7wqW/jG24i218KeO7cqcSv73ZZP4D", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 305c41cf4c0..43bdb8411aa 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZnNbts6EIXfxessNOQMf/oqRVGkqVsYMJzATS5wUeTd7xyNjpIsJDjS3WQ+1+EXiuQMx/Xfw8/jj5ff30+XX49/Dl++/j38uJ7O59Pv7+fHh/vn0+PF//XvYcCP1A9f0t0hDxEkQoqQI2gEi1Ai1AgtQlg0LBoWDYuGRcOiYTF/L3vwV+ahRKgRWoQ+hjJEkAgpQo6gEcJSwlLCUsJSwlLDUsNSw1LDUsNSw1LDUt2iHtxSPfQxtCGCREgRcgSNYBFKhBrBLc1DH0MfIkgEt3QPOYJGsAhukcFjnWKbYo8og6skAYSQCJmgBCMUQiU0Qp9AaBaahWahWWgWmoVmoVloFpoTzBkghETIBCUYoRAqoRH6BJnmTHOmOdOcac40Z5ozzZnmTLPSrDQrzUqz0qw0K80KswEaoU9gA0EIiZAJSsDw4oBskArALzdAJijBCIVQCY3QJ0B+BAiB5kpzpbnSXGmuNFeaK83IGekAVAUcWuRNQCYowQiFUAmN0CdAHgXQ3GnuNHeaO82d5k5zp7lP5jQMBCEkQiYowQiFUAkwC6BPgLQKEEIiZIISjFAIlQBzAvQJkFYpA4SQCJkAswKMUAiV0Agw+6lL490wAswFAHMFuDnjryOtAtyc8beQVhkepFUeh7s5j8PdnDEcaRUghESAuQGUYIRCqIRG6BMgrQKE4GbFpiCtApRghEKohEboE+A+ChACzchBxSIgBwOMUAiV0Ah9AuRggBASAWasKnIwAGYsJnIwoBIaoU+AHAwQQiLAjAVHDgYYoRAqoUf9SUg9xaoi9QISAZcq5ozUC8DFijkj9QxHAqlnOBJIPRuFuKYr+pCBIIREgLkBlGCEQqiERugTIPUChJAINAvNQrPQLDQLzUJzohmpZx2QCJmgBCMUQiU0Qp8AqRdAc6Z5vNGwLOONNoIRCqESGqFPMN5oIwghEWhWmpVmpVlpVpqVZqPZaDaajWaj2Wg2mpFoGW2ma8oAEEIiuKYoQAmuKQZwTSkAn2CBD3lWsDnIs4KVQ54FCCER0MvhTyDPAoxQCJXQCH2CsT8cQQiJQHOjudHcaG40N5obzX00v77eHdjCf3++Ho/o4N/19N7pP91fj5fnw5fLy/l8d/jn/vwy/tKfp/vLGJ/vr/6uK4+Xnx5d+Ot0PoJe795GD8tDBeVnHOz35TzcPo6XlfH+mBT4g84G6TcbFH1kGFTyFoO1QkOxRYMuG7zi8Cm8jJQtcyhI42kO3ZYMZdmg1nUyaNG3rZSyzZCXDCunIc1bkd6tgt18mpLyKPp1vGV8nbch1cXTuLIN3r5xG7yBGxY3ck0haG9C4U3yJoV3N1T4eVpU/A8ncm0Wfs3Ms8hpm6KzPPjWbpuF6jwLNdmksDorysa1KHk+2UVtm6LOa1FT3q9YfJCVBMlzufaLdEOC+b3H8T1vGK+dy2iD7BsvtmG8JWaFvSuRnxhvHF9ksUCltnbXZJY4cdnSFqa+sgdlzghvZxYLTF55jDZwGdv7Y1Q/ClZOYlHeFB8uzE8IGp+hvL/1PyPgOtZhcQary1jLnAttkE07UefjsF2h/RbF6pHC/6xMRyrVbYqbOqDcd184q7O4rQdS2d0E3a7Y0gWVucj4KV8qEqr7G1LbvR23PcVyqV+//KvO/UPb2D9YeVMsL8T+aml7q6XtrZa2t1ra3mqp+6ul7q+Wur9arh+puQXy07WtDdNh/pCgqW/6xKlvJds2fV68rY8osjszStqZGTg4uzJjVXBLZqwLbsiM1WW8LTPWFTdlxrritszY1kZ881f3D6frh2+MX+G6nu5/nI/Ty18vl4d37z7/+8R3+I3z0/Xx4fjz5XqE6e1rZ//xVf0sacrf8LWjv8Qnx9wbXsr4st/pIN9eMZn/AA==", + "bytecode": "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", + "debug_symbols": "rZnNbts6EIXfxessNOQMf/oqRVGkqVsYMJzATS5wUeTd7xyNjpIsJDjS3WQ+1+FnSuIhJ/Xfw8/jj5ff30+XX49/Dl++/j38uJ7O59Pv7+fHh/vn0+PF//XvYcCP1A9f0t0hD1EkSoqSo2gUi1Ki1CgtSlg0LBoWDYuGRcOiYTF/L3vxV+alRKlRWpQ+ljJEkSgpSo6iUcJSwlLCUsJSwlLDUsNSw1LDUsNSw1LDUt2iXtxSvfSxtCGKRElRchSNYlFKlBrFLc1LH0sfokgUt3QvOYpGsShukcFrnWqbao8qg6skAYSQCJmgBCMUQiU0Qp9AaBaahWahWWgWmoVmoVloFpoTzBkghETIBCUYoRAqoRH6BJnmTHOmOdOcac40Z5ozzZnmTLPSrDQrzUqz0qw0K80KswEaoU9gA0EIiZAJSsDw4oA0SAXglxsgE5RghEKohEboEyAfAUKgudJcaa40V5orzZXmSjMyIx2AXQGLFrkJyAQlGKEQKqER+gTIUQDNneZOc6e509xp7jR3mvtkTsNAEEIiZIISjFAIlQCzAPoEiFWAEBIhE5RghEKoBJgToE+AWKUMEEIiZALMCjBCIVRCI8Dsqy6NZ8MIMBcAzBXg5oxPR6wC3JzxWYhVhgexyuNwN+dxuJszhiNWAUJIBJgbQAlGKIRKaIQ+AWIVIAQ3Kx4KYhWgBCMUQiU0Qp8A51GAEGhGBhU3ARkMMEIhVEIj9AmQwQAhJALMuKvIYADMuJnIYEAlNEKfABkMEEIiwIwbjgwGGKEQKgFC3ExEL0AIOFIxVUQvAMcqporoGVYComdYCYie4dMRPYMZ0QNkRC9ACJhqB8DcAEowQiFUQiP0CRC9ACEkAs1Cs9AsNAvNQrPQjOgZZojoBSRCJijBCIVQCY3QJ8g0Z5ozzYheGQBKMEIhVEIj9AkQvQAhJALNSrPSrDQrzUqz0mw0G81Gs9FsNBvNRjOCVgR95kAQAjwGyAR4CgAerBYEreChIGgFNwpBqzAjaCMgaAFCgHnsatHM4bMQtAAjFEIlNEKfYGwQRxBCItDcaG40N5obzY3mRnMfza+vdwf28N+fr8cjWvh3Tb23+k/31+Pl+fDl8nI+3x3+uT+/jL/05+n+Mtbn+6u/6xd9vPz06sJfp/MR9Hr3NnpYHirYf8bBfmDOw+3jeFkZ75dJgV/obJB+s0HRSIZBJW8xWCs0FFs06LLBtxxehe8jZcscCnI8zaHbkqEsG9S6TgYt+vYopWwz5CXDympI86NI7+6C3byaknIp+nm8ZXydH0Oqi6tx5TF4/8bH4B3csPgg1xSC/iYU3iVvUnh7Q4Wvp0XF/7Ai12bh58w8i5w2KbSX+YEO22ahOs9CTTYpCpqSUJRStynyvLKL2jZF5VbprVzer1i8nSsByfN27QfphoD5ucfxPW8Yr5230QbZN15sw3hLTIW92yI/Md44vsjiBpXa2lmTucWJy5YeYeorz6DMifB2ZnGDySuX0QbexvZ+GdWPgpWVWJQnxYcD8xOCxmso70/9zwh4H+uwOIPV21jLnIU2yKYnUeflsF2h/RbF6pKSNi+pVLcpbuqAct994KzO4rYeSGV3E3S7YksXVOZNxlf50iahur8htd2P47arWN7q1/uHqnP/0Lb1D9nKm2L5RuzfLW3vbml7d0vbu1va3t1S9++Wun+31P275fqSmlsgX13b2jAd5j8SNPVts+jzLHTY9Aej6duub9sMN7Ui+J+QneHC0tkVrqI7w7UquCVc64IbwrV6G28L17ripnCtK24L17ZO5Ju/un84XT986/wK1/V0/+N8nF7+erk8vHv3+d8nvsNvrZ+ujw/Hny/XI0xvX137j6/qa0lT/oavLv0lMpZ7w0sZX/Y7HeTbKybzHw==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index ec8ed146962..95c8f9256ec 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZndbts4EEbfxde5EMkZDtlXKYoiTd0igJEEbrLAIsi7L0ejoyQL2PDKe5PvuDaPZJHDn/p193P/4+X39/uHX49/dl++vu5+HO8Ph/vf3w+Pd7fP948P419fd5P/KXn3Jd/sSomQCI2oERbRIvocMkWkiLBIWCQsEhYJi4RFhqWM6HPoFJEickSJkAiNqBEWERYNSw1LHRYdkSNKhERoRI2wiBbR57ApIiwWFguLhcXCYmGxsFhYLCwtLC0sLSxtWOoIidCIGmERLaLP0aeIFJEjhsVGSIRG1IhhaSNaRJ8jTdOSw5MmhwwUQAAFKmBAA/oCaQIwJ8wJc8KcMCfMCXPCnDBnzBlzdnNyKIAAClTAgAb0BcoEJABzwVwwF8wFc8FcMBfMglkwC2bBLJgFs2AWzILZqyONEZ28PgISkIECCKBAXcALI4mDf1gd/MPVQYEKGNCAvoCXRkACMlAAzIbZMBtmw2yYG+aG2UsmmYObffR62QQoUAEDGtAX8BIKSEAGMHfMHXPH3DF3zH0x52kCEpCBAgigQAUMaADmuay6QwIyUAABFKiAAQ3oC3hZ5ckhAT5lJ4cCCKCAT93ZwYAG9AW8rALcXBwy4GZxcLM6uNkcKmBAA/oC8xIzQwIy4GZ/YvNSM4MCFTCgAX0BL6uABPjS449lXnxmEECBChjQgL7AvBTNkADMXoPFn6rXYIACFTCgAX0Br8GABGTAzf7AvQYDFKiAAQ3oC3gNBiTAzd5xXoMBAihQAQMa0BfwGgxwc3XIQAEEUKACBjTAzWMAFK/BgARkoAACKFABAxrg5jESitdgQAIyIDGdFi+90h0qYMAQyuTQF/DSC0hABgoggALDLMnBgAb0Bbz0AhKQgQIIoADmgrlgLpgFs2AWzILZS0/mPaMCFTCgAX0BL72ABGSgAJgV87yiqYMBDegLzIvdDAnIQAEEUABzxVwxV8yG2TAbZsNsmA2zYTbMhtkwe6WIjyivlIAEZKAAAihQAX/gLvRKkergZvN9+gQkIAPeqjk0oC/gVRCQgAwUQAAFKuDm7tCAvsBcDjMkIC+gXEu5lnIt5VrKtZRrKd9C+RbKt6h8i8q1KtfyIREggAJ1gflEMDkkwPfzycHPBfOpxk8G+e3tZsfZ6vvzcb/3o9WHw9Y4gj3dHvcPz7svDy+Hw83ur9vDy/yhP0+3D3M+3x7Hu+Mi+4efI4fw1/1h7/R28956Ot107DWXxmOrsjbXz+3TmfZauPrYStpqSP1yg+9iFkPeZmgVQ9VyyiCnDWOOt8UwJu665R6q9vUeup4ynOmJsWtbBPnDHejFPZmFjhi7kC3tbX0EH3rhX+37mfbT+gTGtnU69QTOGcYBCsM4GWwxZFkNoyNP9mO+eiicu4ni+6vlJkreZOhU5ejVTfcgst7DmCG3GNRWQ932HGpZR3QV3WSw9TlYLlcb6oayLOsEObYIG8pqrOi072VDe+k8RJ3Sde2TbmivmXJQmba0V9rXdHJayvXqFea84qIl5rziojUm96tnlrN3cfUqU9furO3kcCr56u44r7ioO84rLuoOX0+u7I6zd/F/dsfp2eHsSmGyrjVt21qj9d2waY59nyKHbJNhHCHW1Sr3LbN0Xde7cRQ7uXXwGz2laBMTZfs4Guw/TPTrStGmtOVL2DpXbjZIv84wjkEMqHHI+bCLq9sMZYOhCoJPpX1xT4yZbZ3j2qb2zHA2fb7+t/Hq9u7++OknsTc3He9vfxz2y8tfLw93H959/vuJd/hJ7en4eLf/+XLcu+n9d7Xx56uM/1oU6d/8l5PxclT1TWnmL9P8rt5Itm9vfjP/AA==", + "bytecode": "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", + "debug_symbols": "rZndbts4EEbfxde5EMkZDtlXKYoiTd0igJEEbrLAIsi7L0ejoyQL2PDKe5PvuDYPZVHDn/p193P/4+X39/uHX49/dl++vu5+HO8Ph/vf3w+Pd7fP948P419fd5P/KXn3Jd/sSomQCI2oERbRIvocMkWkiLBIWCQsEhYJi4RFhqWM6HPoFJEickSJkAiNqBEWERYNSw1LHRYdkSNKhERoRI2wiBbR57ApIiwWFguLhcXCYmGxsFhYLCwtLC0sLSxtWOoIidCIGmERLaLP0aeIFJEjhsVGSIRG1IhhaSNaRJ8jTdOSw5MmhwwUQAAFKmBAA/oCaQIwJ8wJc8KcMCfMCXPCnDBnzBlzdnNyKIAAClTAgAb0BcoEJABzwVwwF8wFc8FcMBfMglkwC2bBLJgFs2AWzILZqyONJzp5fQQkIAMFEECBuoAXRhIH/7A6+IergwIVMKABfQEvjYAEZKAAmA2zYTbMhtkwN8wNs5dMMgc3+9PrZROgQAUMaEBfwEsoIAEZwNwxd8wdc8fcMffFnKcJSEAGCiCAAhUwoAGY57LqDgnIQAEEUKACBjSgL+BllSeHBPiUnRwKIIACPnVnBwMa0Bfwsgpwc3HIgJvFwc3q4GZzqIABDegLzEvMDAnIgJv9js1LzQwKVMCABvQFvKwCEuBLj9+WefGZQQAFKmBAA/oC81I0QwIwew0Wv6tegwEKVMCABvQFvAYDEpABN/sN9xoMUKACBjSgL+A1GJAAN/vAeQ0GCKBABQxoQF/AazDAzdUhAwUQQIEKGNAAN48HoHgNBiQgAwUQQIEKGNAAN48noXgNBiQgAy7sDgpUYAhlcmhAX8BLLyABGSiAAAoMsyQHAxrQF/DSC0hABgoggAKYC+aCuWAWzIJZMHvpybxVFECBChjQgL6Al15AAjKAWTErZi89KQ4GNKAv4KUXkIAMFEAABTBXzBVzxWyYDbNhNsyG2TAbZsNsmA2zV4qob6onIAEZKIAAClTAu6gO3oU/z14p0nyfPgEJyIC36g4N6At4FQQkIAMFEECBCvjWeHJoQF/AyyEgAXkBpS+lL6UvpS+lL6Uv5Vso30L5FpVvUemr0td8PJhBAAXqAvOJIDkkwJvPhxlv7ueY+WRQ3t5udpytvj8f93s/Wn04bI0j2NPtcf/wvPvy8HI43Oz+uj28zB/683T7MOfz7XG8O7rdP/wcOYS/7g97p7eb99bT6abJn6i58diqrM31c/t0pr0Weh9bSVsNqV9u8F3MYsjbDK1iqOO2njDIacOY420xjIm7brmGqn29hq6nDGdGYuzaFkH+cAV68UhmYSDGLmRLe1tvwYdR+Ff7fqb9tN6BsW2dTt2Bc4ZxgMIwTgZbDFlWwxjIk+OYr34Uzl1E8f3VchElbzFIr+tYTpuuQWS9hjFDbjFUoSzHTtM2Gcr6RFfRTQZjdhr71nK1oW4oy7JOkGOLsKGsxopO+142tJfOTdQpXdc+6Yb2mikHlWlLe6V9TSenpVyvXmHOKy5aYs4rLlpjcr96Zjl7FVevMnUdztpOPk4lXz0c5xUXDcd5xUXD4evJlcNx9ir+z+E4PTucXWtM1rWmbVprxjHp3bBpjn2fIodsk2EcIdbVKvdN19DXa5Bp0zxf1xVzHOZObj7kzC6yTUy17ePzZP9hqVjXmjalLV/C1tl2s0H6dYZxkOKRHMekD/vAus1QNhiqIPg0OVw8EmNuXGfJtqk9c6RNn/v/Nl7d3t0fP/2o9uam4/3tj8N+efnr5eHuw7vPfz/xDj/KPR0f7/Y/X457N73/Mjf+fJXxn5Mi/Zv/9jJejnnhpjTzl2l+V28k27c3v5h/AA==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_0.snap index ede8e840b2b..78879d8f89d 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_0.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZndbttIDEbfxde5EGc4f32Voijc1CkMGE7gJgssgrz7DkUdJVlAgiv3Jt9x7DlRJFIcwa+7n4cfL7++H88Pj793X76+7n5cjqfT8df30+P9/vn4eO6/fd0N9iO03Zdwt4uDh3gEj+ihHskjexSP6uEWdYu6Rd2iblG3aLfEHtmjeFSPNkYaPMQjeEQP9XBLcktyS+qW1KONkQcP8Qge0UM9kkf2KB5uyW4pbiluKW4pbiluKW4pbiluKW4pbqndUnqIR/CIHuqRPLJH8agebYzWLbWHeASP6KEeyaNbWo/iUT3aGDJ0jQwGAgQgAl0nwSABGShABdoEMgACBCACmAWzYBbMglkwB8wBc8AcMAfMwczRIAMFqECbwArfQYAAREABzBFzxBwxR8yKWTErZsWsmBWzYlbMilkxJ8wJszWJJIMIKJCADBSgAm0CawzJBvaZYmCfqQZtAmsJBwECEAEFEpCBAmAumCvmirlirpgr5orZWkassK1pglWvtY1Dm8Bax0GAAERAgQRkAHPD3CZzGAZAgABEQIEEZKAAFcAsmAWzYBbM1k1BDBKQgQJUoE1g3eQgQAAiYOZgkAAzR4MCVKBNMI4RNRAgABFQwMzJIANmzgZmLgZm7hc3jKNlBAECEAEFEpABGxF2xsZRM0KbYBw3IwgQgAgokAAbPXZaxuEzQgXaBDaCHAQIQAQUSABm68FoJ8p60KFNYD3oIEAAIqBAAjJgZjvh1oMOZrYTbj3oIEAAIqBAAjJQADNXgzaB9aCDAAGIgAIJyEA3q51560GH5hCtBx0ECEAEFOhmHXc8GShABdoE1oMOAgQgAgqYORpkwMxqUIE2gfWgQ/BbbrTW02SgQAJMOH6mABVoE1jrOQgQgAiYuRgkIAMFqECbwFrPQYAARACzYlbMilkxK+aEOWG21tNqEAEFEpCBAlSgTWCt5yAA5ox5HHb2R631HDJQgAq0CcbxN4IAAYgA5oK5YC6YC+aCuWKumCvmirlirpgr5orZOiWJQQVsGzruz207aztt6xQH29KqgW1qk4Fta7NBAjJg5vz2drfjQeL78+VwsOeID08W/XnjaX85nJ93X84vp9Pd7p/96WX80O+n/XnM5/2lv9vb8XD+2bMLH46ng9Hb3fvqYXmpWH+Ni/sonpenz+tlZX2K/PW+QyqzQdr1Btt9TIawzVAzhpzikkGXDf0eViZDvzHlLceQU5uPoaUlQ142aGo6GTTr+6WUvM0Qlwwr1RBs3z8KwoezkK6upqAUQ5/0W9aX+TJ8qIT/V+PKZeg7Qy5D3xsOixdyTSE2yF3R99+bFEFnRa+nRcVfqMi1o+gTbD6KGLYpGreHfmm3HYXqfBSaZJMilVmRN56LHOfKzpq2Kcp8LkqItysW/5GVBonz7boP5A0N1ucn61vcsF4bpzENctt6SRvWp0BXpA+3yD9Yn1ifZfEGFerN825dcdXAW1dcNfGi3HyDWT2K62ZejDcPvesVW6Zenosq18WijvnmolhXXFUU64rriqLdXBSrR3FdUajcXBTXK24siuU75frsLDqP37px/Kb8rtg2ct4nRrdtU+gw76k0tC1TK897gP4guLil0pXKrAODo36sy/JJkNaup3I1PvXGHwiqzHeJuk3ATaIMi0ewPrvn4V8H2XIdyjz+Nhu0LRm+9Vf7++Pl05djb+a6HPc/Tofp5cPL+f7Du8//PvEOX649XR7vDz9fLgczvX/D1n981b5n1pi+2bcl/WVsw11s40sZ35U7lfjtzQ7mPw==", + "bytecode": "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", + "debug_symbols": "rZndbts4EEbfxde50JDDv75KURRu6hQGDCdwkwUWQd59ORodJVlAgiv3Jt9xbJ4wEodDwa+7n4cfL7++H88Pj793X76+7n5cjqfT8df30+P9/vn4eO6/fd0N9iO03Zdwt4uDh3gEj+ihHskjexSP6uEWdYu6Rd2iblG3aLfEHtmjeFSPNkYaPMQjeEQP9XBLcktyS+qW1KONkQcP8Qge0UM9kkf2KB5uyW4pbiluKW4pbiluKW4pbiluKW4pbqndUnqIR/CIHuqRPLJH8agebYzWLbWHeASP6KEeyaNbWo/iUT3aGDJ0jQwGAgQgAl0nwSABGShABdoEMgACBCACmAWzYBbMglkwB8wBc8AcMAfMwczRIAMFqECbwBa+gwABiIACmCPmiDlijpgVs2JWzIpZMStmxayYFbNiTpgTZisSSQYRUCABGShABdoEVhiSDewzxcA+Uw3aBFYSDgIEIAIKJCADBcBcMFfMFXPFXDFXzBWzlYzYwraiCbZ6rWwc2gRWOg4CBCACCiQgA5gb5jaZwzAAAgQgAgokIAMFqABmwSyYBbNgtmoKYpCADBSgAm0CqyYHAQIQATMHgwSYORoUoAJtgrGNqIEAAYiAAmZOBhkwczYwczEwc7+5YWwtIwgQgAgokIAMWIuwKza2mhHaBGO7GUGAAERAgQRY67HLMjafESrQJrAW5CBAACKgQAIwWw1Gu1BWgw5tAqtBBwECEAEFEpABM9sFtxp0MLNdcKtBBwECEAEFEpCBApi5GrQJrAYdBAhABBRIQAa6We3KWw06NIdoNeggQAAioEA363jiyUABKtAmsBp0ECAAEVDAzNEgA2ZWgwq0CawGHUyYDCKggAmzQQYKUIE2gZWegwABiICZi0ECMlCACrQJrPQcBAhABDArZsWsmBWzYk6YrfS0GgQgAgokIAMFqECbwErPAXPGnDFb6WkzSEAGClCBNoGVnoMAAYgA5oK5YC6YC+aCuWKumCvmirlirpgr5orZKiWNh/IK2DHUDthWKUkNBLAjbTKwQ202sGNtMUhABsxc3t7udjxIfH++HA72HPHhyaI/bzztL4fz8+7L+eV0utv9sz+9jB/6/bQ/j/m8v/R3ezkezj97duHD8XQwert7Hz0sDxWrr3Fwb8Xz8PR5vKyMT5G/3k9IZTZIu95gp4/JELYZasaQU1wy6LKh72FlMvSNKW+ZQ05tnkNLS4a8bNDUdDJo1vdbKXmbIS4ZVlZDsHP/KAgfrkK6ejUFZTH0Tr9lfJlvw4eV8P/VuHIb+smQ29DPhsPijVxTiDVyV/Tz9yZF0FnR19Oi4i+syLVZ9A42zyKGTQpteb6hw7ZZqM6z0CSbFFnZIfqhrmxTxHllZ03bFIWtsh8S4+2Kxcu5UiBx3q57Q95QYL1/Mr7FDeO1cRnTILeNl7RhfApURfqwRf7B+MT4LIsbVKg397t1xVUNb11xVceLcvMGszqL63pejDc3vesVW7penhdVrouLOuabF8W64qpFsa64blG0mxfF6iyuWxQqNy+K6xU3LorlnXK9/Rad22/d1n5jyu+KbS3nvWN02zaFDvOZSkPbNos2z0KHTY0vz8eI/iy5eCpLK4o60Hvqx6VdPgtW/ous3NBP5fUHgirzRlO3CdhnyrA4g/X2P58f6iBb7kOZO+hmg7Ylw7f+an9/vHz6fu3NXJfj/sfpML18eDnff3j3+d8n3uH7uafL4/3h58vlYKb3L+n6j6/aj90a0zf7wqW/jG24i218KeO7cqcSv73ZZP4D", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 305c41cf4c0..43bdb8411aa 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_pedersen/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "rZnNbts6EIXfxessNOQMf/oqRVGkqVsYMJzATS5wUeTd7xyNjpIsJDjS3WQ+1+EXiuQMx/Xfw8/jj5ff30+XX49/Dl++/j38uJ7O59Pv7+fHh/vn0+PF//XvYcCP1A9f0t0hDxEkQoqQI2gEi1Ai1AgtQlg0LBoWDYuGRcOiYTF/L3vwV+ahRKgRWoQ+hjJEkAgpQo6gEcJSwlLCUsJSwlLDUsNSw1LDUsNSw1LDUt2iHtxSPfQxtCGCREgRcgSNYBFKhBrBLc1DH0MfIkgEt3QPOYJGsAhukcFjnWKbYo8og6skAYSQCJmgBCMUQiU0Qp9AaBaahWahWWgWmoVmoVloFpoTzBkghETIBCUYoRAqoRH6BJnmTHOmOdOcac40Z5ozzZnmTLPSrDQrzUqz0qw0K80KswEaoU9gA0EIiZAJSsDw4oBskArALzdAJijBCIVQCY3QJ0B+BAiB5kpzpbnSXGmuNFeaK83IGekAVAUcWuRNQCYowQiFUAmN0CdAHgXQ3GnuNHeaO82d5k5zp7lP5jQMBCEkQiYowQiFUAkwC6BPgLQKEEIiZIISjFAIlQBzAvQJkFYpA4SQCJkAswKMUAiV0Agw+6lL490wAswFAHMFuDnjryOtAtyc8beQVhkepFUeh7s5j8PdnDEcaRUghESAuQGUYIRCqIRG6BMgrQKE4GbFpiCtApRghEKohEboE+A+ChACzchBxSIgBwOMUAiV0Ah9AuRggBASAWasKnIwAGYsJnIwoBIaoU+AHAwQQiLAjAVHDgYYoRAqoUf9SUg9xaoi9QISAZcq5ozUC8DFijkj9QxHAqlnOBJIPRuFuKYr+pCBIIREgLkBlGCEQqiERugTIPUChJAINAvNQrPQLDQLzUJzohmpZx2QCJmgBCMUQiU0Qp8AqRdAc6Z5vNGwLOONNoIRCqESGqFPMN5oIwghEWhWmpVmpVlpVpqVZqPZaDaajWaj2Wg2mpFoGW2ma8oAEEIiuKYoQAmuKQZwTSkAn2CBD3lWsDnIs4KVQ54FCCER0MvhTyDPAoxQCJXQCH2CsT8cQQiJQHOjudHcaG40N5obzX00v77eHdjCf3++Ho/o4N/19N7pP91fj5fnw5fLy/l8d/jn/vwy/tKfp/vLGJ/vr/6uK4+Xnx5d+Ot0PoJe795GD8tDBeVnHOz35TzcPo6XlfH+mBT4g84G6TcbFH1kGFTyFoO1QkOxRYMuG7zi8Cm8jJQtcyhI42kO3ZYMZdmg1nUyaNG3rZSyzZCXDCunIc1bkd6tgt18mpLyKPp1vGV8nbch1cXTuLIN3r5xG7yBGxY3ck0haG9C4U3yJoV3N1T4eVpU/A8ncm0Wfs3Ms8hpm6KzPPjWbpuF6jwLNdmksDorysa1KHk+2UVtm6LOa1FT3q9YfJCVBMlzufaLdEOC+b3H8T1vGK+dy2iD7BsvtmG8JWaFvSuRnxhvHF9ksUCltnbXZJY4cdnSFqa+sgdlzghvZxYLTF55jDZwGdv7Y1Q/ClZOYlHeFB8uzE8IGp+hvL/1PyPgOtZhcQary1jLnAttkE07UefjsF2h/RbF6pHC/6xMRyrVbYqbOqDcd184q7O4rQdS2d0E3a7Y0gWVucj4KV8qEqr7G1LbvR23PcVyqV+//KvO/UPb2D9YeVMsL8T+aml7q6XtrZa2t1ra3mqp+6ul7q+Wur9arh+puQXy07WtDdNh/pCgqW/6xKlvJds2fV68rY8osjszStqZGTg4uzJjVXBLZqwLbsiM1WW8LTPWFTdlxrritszY1kZ881f3D6frh2+MX+G6nu5/nI/Ty18vl4d37z7/+8R3+I3z0/Xx4fjz5XqE6e1rZ//xVf0sacrf8LWjv8Qnx9wbXsr4st/pIN9eMZn/AA==", + "bytecode": "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", + "debug_symbols": "rZnNbts6EIXfxessNOQMf/oqRVGkqVsYMJzATS5wUeTd7xyNjpIsJDjS3WQ+1+FnSuIhJ/Xfw8/jj5ff30+XX49/Dl++/j38uJ7O59Pv7+fHh/vn0+PF//XvYcCP1A9f0t0hD1EkSoqSo2gUi1Ki1CgtSlg0LBoWDYuGRcOiYTF/L3vxV+alRKlRWpQ+ljJEkSgpSo6iUcJSwlLCUsJSwlLDUsNSw1LDUsNSw1LDUt2iXtxSvfSxtCGKRElRchSNYlFKlBrFLc1LH0sfokgUt3QvOYpGsShukcFrnWqbao8qg6skAYSQCJmgBCMUQiU0Qp9AaBaahWahWWgWmoVmoVloFpoTzBkghETIBCUYoRAqoRH6BJnmTHOmOdOcac40Z5ozzZnmTLPSrDQrzUqz0qw0K80KswEaoU9gA0EIiZAJSsDw4oA0SAXglxsgE5RghEKohEboEyAfAUKgudJcaa40V5orzZXmSjMyIx2AXQGLFrkJyAQlGKEQKqER+gTIUQDNneZOc6e509xp7jR3mvtkTsNAEEIiZIISjFAIlQCzAPoEiFWAEBIhE5RghEKoBJgToE+AWKUMEEIiZALMCjBCIVRCI8Dsqy6NZ8MIMBcAzBXg5oxPR6wC3JzxWYhVhgexyuNwN+dxuJszhiNWAUJIBJgbQAlGKIRKaIQ+AWIVIAQ3Kx4KYhWgBCMUQiU0Qp8A51GAEGhGBhU3ARkMMEIhVEIj9AmQwQAhJALMuKvIYADMuJnIYEAlNEKfABkMEEIiwIwbjgwGGKEQKgFC3ExEL0AIOFIxVUQvAMcqporoGVYComdYCYie4dMRPYMZ0QNkRC9ACJhqB8DcAEowQiFUQiP0CRC9ACEkAs1Cs9AsNAvNQrPQjOgZZojoBSRCJijBCIVQCY3QJ8g0Z5ozzYheGQBKMEIhVEIj9AkQvQAhJALNSrPSrDQrzUqz0mw0G81Gs9FsNBvNRjOCVgR95kAQAjwGyAR4CgAerBYEreChIGgFNwpBqzAjaCMgaAFCgHnsatHM4bMQtAAjFEIlNEKfYGwQRxBCItDcaG40N5obzY3mRnMfza+vdwf28N+fr8cjWvh3Tb23+k/31+Pl+fDl8nI+3x3+uT+/jL/05+n+Mtbn+6u/6xd9vPz06sJfp/MR9Hr3NnpYHirYf8bBfmDOw+3jeFkZ75dJgV/obJB+s0HRSIZBJW8xWCs0FFs06LLBtxxehe8jZcscCnI8zaHbkqEsG9S6TgYt+vYopWwz5CXDympI86NI7+6C3byaknIp+nm8ZXydH0Oqi6tx5TF4/8bH4B3csPgg1xSC/iYU3iVvUnh7Q4Wvp0XF/7Ai12bh58w8i5w2KbSX+YEO22ahOs9CTTYpCpqSUJRStynyvLKL2jZF5VbprVzer1i8nSsByfN27QfphoD5ucfxPW8Yr5230QbZN15sw3hLTIW92yI/Md44vsjiBpXa2lmTucWJy5YeYeorz6DMifB2ZnGDySuX0QbexvZ+GdWPgpWVWJQnxYcD8xOCxmso70/9zwh4H+uwOIPV21jLnIU2yKYnUeflsF2h/RbF6pKSNi+pVLcpbuqAct994KzO4rYeSGV3E3S7YksXVOZNxlf50iahur8htd2P47arWN7q1/uHqnP/0Lb1D9nKm2L5RuzfLW3vbml7d0vbu1va3t1S9++Wun+31P275fqSmlsgX13b2jAd5j8SNPVts+jzLHTY9Aej6duub9sMN7Ui+J+QneHC0tkVrqI7w7UquCVc64IbwrV6G28L17ripnCtK24L17ZO5Ju/un84XT986/wK1/V0/+N8nF7+erk8vHv3+d8nvsNvrZ+ujw/Hny/XI0xvX137j6/qa0lT/oavLv0lMpZ7w0sZX/Y7HeTbKybzHw==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index e230f490dc1..c2e5b76b703 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -32,7 +32,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/8VZzYoTQRDu+ekkk7gk6BP4Bvnd2b0J6+rRi4LX2fyg4MGzIAx48iEET94FwYN48SYo+Eim167Nl28qk+hOuwWhZ7pq6q+/rq6ZRGZDkR9Tcw0SJb/8mPkxBn6y/t3z98Pr0Sgju03qPxlO80yJr0H/J5nXGYXRPxT9gfI/bHs9D8uNfoxF7HbWvx5cD8wGH6Hil/ULGf+dmpgFO2dluLV1dB/0G9P83joP4/+V/gdh9I97HmuPjI61BnM1PKK1x/XIILYAcU4ismfIliH7XRN0T4wisif+cH7kWnKXKr4OFF5E16liJ1Xs1Onqm/p9HHD9hhxHCnEkiq+xEgfGa2nurh/dXnhC+hgzPMe5ixV/jpTnoh2j2DF77GjrwDhpwg7qkjotdmyDdmxNPHGDdmIlHsFvC55vEL+5xNE2VRJeB2wzbrCHS4nXBZ4lXg94nNNb4AOeL0wJ3WOenM9PQS/LCfXN7r3RN9X1lxjrsK7VKlujk2tVoLW+qlWy1lirWoqvMckzTizNnflRq1W4HxNlrq5WWcpPoLPvv+wFR+flNq8HPOw3mTS8Y4/+GmyynFAP/EzLDb+pPOYnf3B26a/Xb03Vd7RvSf6xv8f6IWN6DT9XeTFaTYpVMSsWi+m8uE36HcWQp6btF/nkZD6ezvOL2aSYHO+1j/2v1A3ci1ynEJsx8RCbokP2E8YZot4IvrHeoE38zsBnA+4NS3OFH7V6g+/+iTLH9aat+CP7swXPyf50c0uymYCfifKsnGWW5J+bjc5n/rp3oF6sj6z3Beh9tcNXAzoRPy2ST0GXJp+QDyL/0o9O9h3Z094ZHAXu2U+5XiNpvQvX+UN6F46PSavlMudy9R70spzQoeuKGOSzh3sN0bsEX7gGWbKJPNTHPZXsMcQx+sv7Q+TfgC+fSGfHVOPV+oq6uqDhWKu32Q7bGE9aE4/Iv62JJ/vLeLqKvNaHaGeEPCsYk/OXey5HKfCa/P7h/PkMfnAObHl4vFp+eoo8n3eOBqa6tzvgF+cnu8H8JDX50frspCY/dfsH8TMwVfy0iReZ7RwgD+1KjQjRY01nRT4v8tHodDpaTkezf+mx6r4xae9tEcWF9QDXg+uByH/wo/Plp7/WMCd+3QTm8AxhzOH7knbmHII5rLOSMw1z/E1NO+8w5+fkq9bHWEU/9zEf/Yh9jIb7FvFiRXcI3M9nxxfzNfiHy5G7He/DfV/yUG74iDVHbX8vfTvLiz5L8l9Edv376q8Fz1ax5+R+1MhFO8ZLHcpcWm7PZWVVPimr8mK7W1Z9FF4PeLgPHN3y95gv1CV+WJL/7u9lTTrwjDw/UOx3yP6W38ocYpF1JcqcyLv1+Sb6/IixN/3/w6VN0o9z7JtgJ8h5sv5ocLzKh7PxYrocL/a+s/8Gwzcq8pUfAAA=", - "debug_symbols": "tZbdTuMwEIXfJde58PhnbPMqCKFSAooUpVVoV1qhvvvO5HiAXhQtWe1Nvy9N58SJx27eu+fh6fz6OM4vh7fu7v69e1rGaRpfH6fDfncaD7N8+945/aDc3fm+owLUFd4BBHggABFIAAOSEgUFqCuCAwjwQAAiIClBwEAGClBXRAcQ4IEARAApESlRUpKgAHVFcgABHghABBLAAFISUpKkcN+xAwjwQAAikAAGMlAAScl9lx1AgAcCEIEEMJBXFCkvfVcdIOVV4IEARCABDGSgrCBHjfIjcipygkilNiFnQiZyGdIGIbkQRZVokkzYJJsUk9pEOwuigUFFq5JKNikmtYl2EkTHwyreJJhEk2TCJpqcVYpJbaLdRUWFTLxJMIkmyYRN8joXpM22ElNEyTVSo28MjbExgdpRpJOiPQXR1aazo30FSSa65nRStLsgxaQ20R6DkIk30WSdSu01SDJhk2yiyf5y6TvbOh5PyzDozvFlL5Ed5rhbhvnU3c3naeq7X7vpvP7o7bibV552i5yV4Q/zs1ACX8ZpULv0n9XudmlxtRUXzx/l6bqebtf77HwL8FluyRL4rwcQbfQl5VsDCP9zAMytvjp/awDf1FddyaiPbkO97AZ2A7Lo44aE7OwOss8b6n2K9gTLljvwtbT6QFuuH9haIGTeUp+sh0PZVB/s+YVUbq6Bb3owFruB5GhTC9RkLeBD2pDA3qaQ45Yp4GyPMLstLcAp2PU3TeG/PkEuHz3MJdPPdwGuzqaA65dV9IOA+DGCmq4CHuRgtx+Xq/fEi0Yt4+5pGtrhy3nefzl7+n20M/aeeVwO++H5vAya9PmyKR/3VELvXXzQ9w05lOks64H8T917uTXv8sNFh/IH", + "debug_symbols": "tZbRTuMwEEX/Jc95sMf22OZXEEKlBBQpSqvQrrRC/fedyfUUeOhqyYqXnhPSuXUyE5P37nl4Or8+jvPL4a27u3/vnpZxmsbXx+mw353Gwyx/fe+cfvjc3VHf+QLUFeQADxAQgAgkgAFJiYIC1BXBAR4gIAARkJQgYCADBagrogM8QEAAIoCUiJQoKUlQgLoiOcADBAQgAglgQFJYUABJyX3HDvAAAQGIQAIYyEABJKX0XXaABwgIQAQSwEBeUaS89l11gJR7J6TG0BgbUyM35sYCeudN9JteRU/pFLjaxDsTb6I/F1T095JKNEkmbJJNikltoiMG0cCoolWskk2KSW2iIwXR9WQVMgkm0SSZsIkmF5ViUpvomPmq4k3IJJhEk2TCJnltitepW4le+eQafSM1hsbYmEAdLdKm6HBB9LHT7uiAQZKJPnzaFB0zSDGpTXTYIN6ETDRZW6lDB0kmbJJNNDlcLn1ne8jjaRkG3UI+bSqy1Rx3yzCfurv5PE1992s3ndcvvR1388rTbpGzcmXD/CyUwJdxGtQu/Ue1u11aXG3Fhfhanr7W+9v1lB21AMpE1wT+5wVEW31J+dYCwk8ugLnVV0e3FvCX+hqD1ce0pV53i1bvNtTLbmI3QDaNuCEhO7sDmfKGekrROlC2XAHV0uqD3/L7gW2EQuYt9cmegVA21Qe7fyGVm89QvB0Qi11Acn7TCNRkI0BhyxAyWQs5bmkBZ7uF2W0ZAU72EPGmFv7vHeRynWEu2X9/F+HqrAVcPz1F3wiI1xXU9CXgQQ52+3H58sJ50ahl3D1NQzt8Oc/7T2dPv492xl5Yj8thPzyfl0GTPt5a5ePel9CTiw/6viKH0s6yHsj/uXuSSyOXHy66lD8=", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index e230f490dc1..c2e5b76b703 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/brillig_rc_regression_6123/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -32,7 +32,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/8VZzYoTQRDu+ekkk7gk6BP4Bvnd2b0J6+rRi4LX2fyg4MGzIAx48iEET94FwYN48SYo+Eim167Nl28qk+hOuwWhZ7pq6q+/rq6ZRGZDkR9Tcw0SJb/8mPkxBn6y/t3z98Pr0Sgju03qPxlO80yJr0H/J5nXGYXRPxT9gfI/bHs9D8uNfoxF7HbWvx5cD8wGH6Hil/ULGf+dmpgFO2dluLV1dB/0G9P83joP4/+V/gdh9I97HmuPjI61BnM1PKK1x/XIILYAcU4ismfIliH7XRN0T4wisif+cH7kWnKXKr4OFF5E16liJ1Xs1Onqm/p9HHD9hhxHCnEkiq+xEgfGa2nurh/dXnhC+hgzPMe5ixV/jpTnoh2j2DF77GjrwDhpwg7qkjotdmyDdmxNPHGDdmIlHsFvC55vEL+5xNE2VRJeB2wzbrCHS4nXBZ4lXg94nNNb4AOeL0wJ3WOenM9PQS/LCfXN7r3RN9X1lxjrsK7VKlujk2tVoLW+qlWy1lirWoqvMckzTizNnflRq1W4HxNlrq5WWcpPoLPvv+wFR+flNq8HPOw3mTS8Y4/+GmyynFAP/EzLDb+pPOYnf3B26a/Xb03Vd7RvSf6xv8f6IWN6DT9XeTFaTYpVMSsWi+m8uE36HcWQp6btF/nkZD6ezvOL2aSYHO+1j/2v1A3ci1ynEJsx8RCbokP2E8YZot4IvrHeoE38zsBnA+4NS3OFH7V6g+/+iTLH9aat+CP7swXPyf50c0uymYCfifKsnGWW5J+bjc5n/rp3oF6sj6z3Beh9tcNXAzoRPy2ST0GXJp+QDyL/0o9O9h3Z094ZHAXu2U+5XiNpvQvX+UN6F46PSavlMudy9R70spzQoeuKGOSzh3sN0bsEX7gGWbKJPNTHPZXsMcQx+sv7Q+TfgC+fSGfHVOPV+oq6uqDhWKu32Q7bGE9aE4/Iv62JJ/vLeLqKvNaHaGeEPCsYk/OXey5HKfCa/P7h/PkMfnAObHl4vFp+eoo8n3eOBqa6tzvgF+cnu8H8JDX50frspCY/dfsH8TMwVfy0iReZ7RwgD+1KjQjRY01nRT4v8tHodDpaTkezf+mx6r4xae9tEcWF9QDXg+uByH/wo/Plp7/WMCd+3QTm8AxhzOH7knbmHII5rLOSMw1z/E1NO+8w5+fkq9bHWEU/9zEf/Yh9jIb7FvFiRXcI3M9nxxfzNfiHy5G7He/DfV/yUG74iDVHbX8vfTvLiz5L8l9Edv376q8Fz1ax5+R+1MhFO8ZLHcpcWm7PZWVVPimr8mK7W1Z9FF4PeLgPHN3y95gv1CV+WJL/7u9lTTrwjDw/UOx3yP6W38ocYpF1JcqcyLv1+Sb6/IixN/3/w6VN0o9z7JtgJ8h5sv5ocLzKh7PxYrocL/a+s/8Gwzcq8pUfAAA=", - "debug_symbols": "tZbdTuMwEIXfJde58PhnbPMqCKFSAooUpVVoV1qhvvvO5HiAXhQtWe1Nvy9N58SJx27eu+fh6fz6OM4vh7fu7v69e1rGaRpfH6fDfncaD7N8+945/aDc3fm+owLUFd4BBHggABFIAAOSEgUFqCuCAwjwQAAiIClBwEAGClBXRAcQ4IEARAApESlRUpKgAHVFcgABHghABBLAAFISUpKkcN+xAwjwQAAikAAGMlAAScl9lx1AgAcCEIEEMJBXFCkvfVcdIOVV4IEARCABDGSgrCBHjfIjcipygkilNiFnQiZyGdIGIbkQRZVokkzYJJsUk9pEOwuigUFFq5JKNikmtYl2EkTHwyreJJhEk2TCJpqcVYpJbaLdRUWFTLxJMIkmyYRN8joXpM22ElNEyTVSo28MjbExgdpRpJOiPQXR1aazo30FSSa65nRStLsgxaQ20R6DkIk30WSdSu01SDJhk2yiyf5y6TvbOh5PyzDozvFlL5Ed5rhbhvnU3c3naeq7X7vpvP7o7bibV552i5yV4Q/zs1ACX8ZpULv0n9XudmlxtRUXzx/l6bqebtf77HwL8FluyRL4rwcQbfQl5VsDCP9zAMytvjp/awDf1FddyaiPbkO97AZ2A7Lo44aE7OwOss8b6n2K9gTLljvwtbT6QFuuH9haIGTeUp+sh0PZVB/s+YVUbq6Bb3owFruB5GhTC9RkLeBD2pDA3qaQ45Yp4GyPMLstLcAp2PU3TeG/PkEuHz3MJdPPdwGuzqaA65dV9IOA+DGCmq4CHuRgtx+Xq/fEi0Yt4+5pGtrhy3nefzl7+n20M/aeeVwO++H5vAya9PmyKR/3VELvXXzQ9w05lOks64H8T917uTXv8sNFh/IH", + "debug_symbols": "tZbRTuMwEEX/Jc95sMf22OZXEEKlBBQpSqvQrrRC/fedyfUUeOhqyYqXnhPSuXUyE5P37nl4Or8+jvPL4a27u3/vnpZxmsbXx+mw353Gwyx/fe+cfvjc3VHf+QLUFeQADxAQgAgkgAFJiYIC1BXBAR4gIAARkJQgYCADBagrogM8QEAAIoCUiJQoKUlQgLoiOcADBAQgAglgQFJYUABJyX3HDvAAAQGIQAIYyEABJKX0XXaABwgIQAQSwEBeUaS89l11gJR7J6TG0BgbUyM35sYCeudN9JteRU/pFLjaxDsTb6I/F1T095JKNEkmbJJNikltoiMG0cCoolWskk2KSW2iIwXR9WQVMgkm0SSZsIkmF5ViUpvomPmq4k3IJJhEk2TCJnltitepW4le+eQafSM1hsbYmEAdLdKm6HBB9LHT7uiAQZKJPnzaFB0zSDGpTXTYIN6ETDRZW6lDB0kmbJJNNDlcLn1ne8jjaRkG3UI+bSqy1Rx3yzCfurv5PE1992s3ndcvvR1388rTbpGzcmXD/CyUwJdxGtQu/Ue1u11aXG3Fhfhanr7W+9v1lB21AMpE1wT+5wVEW31J+dYCwk8ugLnVV0e3FvCX+hqD1ce0pV53i1bvNtTLbmI3QDaNuCEhO7sDmfKGekrROlC2XAHV0uqD3/L7gW2EQuYt9cmegVA21Qe7fyGVm89QvB0Qi11Acn7TCNRkI0BhyxAyWQs5bmkBZ7uF2W0ZAU72EPGmFv7vHeRynWEu2X9/F+HqrAVcPz1F3wiI1xXU9CXgQQ52+3H58sJ50ahl3D1NQzt8Oc/7T2dPv492xl5Yj8thPzyfl0GTPt5a5ePel9CTiw/6viKH0s6yHsj/uXuSSyOXHy66lD8=", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 3751a7a25f8..5367017248a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_0.snap index 3751a7a25f8..5367017248a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_0.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 3751a7a25f8..5367017248a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -69,7 +69,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "pZ3LjiTHkUX/pddcxL3+1q8MBgIltQQCBEVQpICBwH+fyoh7rKQFBSG1cie708IjK055uNtx6398+dPXP/zyl99/98Of//q3L7/7n398+cNP333//Xd/+f33f/3jtz9/99cfPv7vP3795gv/+fuff/r69eN/ffmnP//41I/f/vT1h5+//O6HX77//psvf//2+1/uv/S3H7/94W5//vanjz+9vvny9Yc/fbQfAf/83fdfX71fv/n89PXbHx1Xz4eHen18/OefX4PP7/XO56f4/PIbn5995vNz7Hc+f1Y+v653xr8aX/5q73x/++LzW+2dz5vx7zbe+PzRyedP+837P7/9eW2ur6N3rr+4/7PmG5/XJTOAS+9F6K0i/PYzpPbbIbwYg9d+awinhvBxF+9EUHGsj/5/O4b3IsinIrTzVoQxK8Js/3WEt34W2rsinHd+JcijmPB6L4I/I7S3vgcffq+qXW/9NNvnGJrf+ibbKDTbfOupbn39txHW5xjWbz6T3v/mN1Q9Dtdbn/+PfkP+2wCTKVbzvRG0YqK/9ygcfwZ468fQe32LffS3Inx+jf28hcT4nCmG3ovweRejv/ULbqp+TU+NtyKMzwjv/Yqcq+5irvfu4pOJdb3101ynHsl9vfU9bNf3sNtb8/7+5Gqvf32q//fjv77943c//cvb+pfePv7qN196f5rxNPPL7z5G0tfT7Kc5H3G++TKup9HT+Gk+onzc/OhPM55mPs16mv00527m9TR6Gj/NE2U+UeYTZT5R5keUj0d9PmOZ527W9TR6Gj9Ne5r+NONp5j3OtZ5mP81zR/uJsp8o+4mynyi735fdT5T9fC/7+V72M5b9jOU8Uc4T5TxRzhPlPGM5477eecZynrGcZyznGYuuJ8zHG1Nap21pnwF9vNXlv2falXanfUb18daTNvGUeEo89bSJp8TTM7qPN4e0GZ+vtEqbeE48J54Tz/N+oj5eGtLutOe5j3alVdrEa4nXEq8lXsv4Wu635X5b7rfnfnvutydeT7yeeD3x+vPDUM/99txvT7yReCPjG4k3Em8k3ki8kfGNjG9kfCPxZuLNjG8m3ky8mXjzeVY0M76Z8QUAhQAFAa2MLxAoFCgYKBxoZXwr41uJtxIvMCg0KDgoPGgn3s74dsa3M76d72/neQkWChcKGAoZCho6Gd/J+E7GdzK+84zP4cPhw+HD4cNXT/uMz9dMu9LutIkXPhw+HD6s5/ei1dOOtPP+nq2VdqdNPCeeEy98OHw4fDh82DPtSrvTJl5LvJZ44cPhw+HDLffbcr8t9xs+HD7cH94cPhw+HD4cPhw+nKnAmQucycDhw+HDI/HCh8OHX3y8xjEyvpHxjYwvfDh8OHw4fDh8OHw4fHhmfDPjmxlf+HD4cPhw5giHD4cPr4xvZXyZKJyZwuHD4cPhw+HD4cPhw+HDmTGcKcOZM5xJw5k1HD4cPhw+HD58Mr7MHc7k4cweDh8OHy18tPDRXnzo1ba0Pe24n4N2zbQr7c7nEi98tPDRwkfL/NEyf7TMHy3zR9NKm3jho4WPFj5a+Gjho/m53+aRdqZdaRMvfLTw0cJHCx8tfLTw0TJ/tMwfLfNHCx8tfLTMHy18tPDRwkfrGV/P+DJ/tMwfLXy08NHCRwsfLXy08NEyf7TMHy3zR8v80cJHCx8tfLTw0cJHCx8tfLTMHy3zR8v80eZOm3jho4WPFj5a+GiZP1rmj5b5o2X+aOGjhY8WPlr4aOGjhY8WPlr4aJk/WuaPlvmjZf5o4aOFjxY+WvhoJ8/zGWln2owvfLTw0cNHDx8980fP/NEzf/S8X/W8X/W8X/Xw0cNHDx89fPTw0V98jFfb0460iRc+evjo4aOHjx4+evjo4aNn/uiZP3rmj575o4ePHj56+Ojho7fnhb23jK9lfOGjh48ePnr46OGjh48ePnr46OGjZ/7omT86SwnWEiwmwkcPHz3riZ4FRR8ZX/jo4aOHjx4+evjo4aOHjx4+evjo4aOHj575o2f+6Jk/euaPHj76et53+8r4VsYXPnr46OGjr+f562ul3WkTL3z08NHDRw8fPXz08NEzf/TNWizjy/zRw0cPHz189PDR837VM3/0zB8980c/LO6eeCN8jPAxwscIHyN8jPAxwscIHyN8jPAxwscIHyN8jMwfI3yM8DE00yZe+BjhY4SPET5G+BjhY4SPET5G+BjhY4SPET5G+BjhY2T+GOFjhI+R96sRPkb4GOFjhI8RPkb4GOFjhI8RPkb4GOFjhI8RPkb4GOFjZP4YLLjDx8j71QgfI3yM8DHG8/yNFx+v9sXH3SZe+BjhY4SPET5G+BjhY4SPET5G5o+R+WNk/hjhY4SPET5G5o+R96uRpfjIWnyEjxE+RvgY4WOEjxE+RvgY4WOEjxE+RvgY4WOEjxE+RvgYWX+M8DHCx8jyfISPGT5m+JjhY4aPGT5m+JjhY4aPGT5m+JjhY4aPGT5m+Jh5v5rhY4aPmfX5DB8zfMzwMcPHDB8zfMzwMcPHDB8zfMzwMcPHDB8zfMzwMfN+NcPHDB8z648ZPmb4mOFj9uf5my8+7tZpEy98zPAxw8cMHzN8zPAxw8cMHzPvVzPvVzPzxwwfM3zM8DEzf8zxPH9zXmmVNvHCxwwfM3zM8DHDx2SDKnzM8DHDxwwfM3zM8DHDxwwfM+9XM3zM8DF3xhc+ZviY4WOGjxk+ZviY4WOGjxk+ZviY4WOGjxk+ZviY4WNmfT7DxwwfM/tXK3ys8LHCxwofK3ys8LHCxwofK3ys8LHEFl/ihY8VPlb4WFl/rPCxwsfK/tUKHyt8LLNn+Dx/yy1tT5t44WOFjxU+VvhY4WOFj9XYhMz4sv5Yeb9amT9W+FjhY4WPlflj9ef5W91pW9rECx8rfKzwscLHCh8rfKzwscLHCh9rsE2aeOFjhY8VPlber1b4WOFjzYwvfKzwsSb7rokXPlb4WOzgsoXLHi6buOziso3LPm74WOFjZf2xwscKH2tnfOFjhY8VPlb4WOFjhY8VPlb4WOFjhY8VPlb4WOFjhY8VPlbWH+uw1cxe85U2u83hY4ePnfX5vkbamTZ7zuFjh48tNq8TL3zs8LHDxw4fO+uPnfernfljh48dPrbZDU88P8/fzvp8Z32+w8cOHzt87PCxw8cOH7uxvZ7xhY8dPnb42OFjh48dPnb42Hm/2uFjh4+d9fkOHzt87PCxw8cOHzt87PCxw8cOHzt87PCxw8cOHzt87PCxs/7Y4WOHjz0zvvCxJxmFxAsfO3zs8LHDxw4fO3zs8LHDxw4fe5GiSLzwsbP+2OFjh4+9Mz7yHeFjk/HYef72SrvTJl742OFjh48dPnb42OFjh48dPvYhiUIWJWmU8HHCxwkfJ/PHyf7uyf7uyf7uCR8nfByRlkm88HHCxwkfJ3yc8HHCxwkfJ3yc8HFMnifx8n51wscJHyf7Vyd8nPBxwscJHyd8nEbiKPHCxwkfJ3yc8HHCxwkfJ3yc8HGy/jjh44SPk/2rEz5O+Djh44SPEz5O+Djh44SPM0htZXzh44SPEz5O+Djh42T9ccLHCR9nZnzh44SPEz7OfJ6/M5/1zFlX2sQLHyd8nPBxwscJHyd8nPBxwsfJ+uPk/epk/jjh44SPEz5O5o+zyeYlnZf9q0NakLwgiUEyg6QGw8cJHyd8nPBxwsdHfpAEYWUIK0VYOcJA8tEhSxhMPjqLzqZDZFXqkcgkCy+yhRfpwot84UXC8BIZSJGCFJFNZFdWk8jkDS8Sh1fI+egwZjNmE9lEbkRuRG6VMCUyKcSLHOJFEvEii3iRRrzII14kEi8yiRepxKtXLrZnYJ0xk068OpE7kckoXuN5ZD86omM6RCateJFXvEgsXmQWL1KLF7nFi+TiRXbxIr14kV+8SDBeszLIRJ5EJsl4TbLS2Qb76IgOkck0XqQaL3KN16rkNJFJN17kGy8SjhcZx4uU40XO8SLpeG0ibyLvynvzPJN5vA5jJvd4kXy8yD5epB8v8o8XCciLDOR1KqVeOXWS6jBYafrK0wsGK1NfqXrBoGDwztbfnc90PZErYV8Z+0rZV86+kvYwKBgUDAoG5TIBiAyDlbyv7L1gUDB4J/CfDpFhUDB4J/F1dxqdTofIMFiZ/ErlVy6/kvmVza90fuXzK6FfGX11IsOgYLCy+pXWV/adpWysSdlZU6X2K7dfyf3K7ld6v/L7leCvDH+l+CvHX0l+zbIuiAyDleivTL9gUDCoxZhhsNL9le+vhH9l/CvlXzn/SvpX1r/S/pX3r8S/YFAwKBjUJjIMCgbv/P/TITIMlgJQDkBJAGUBlAaAByBEAGECCBVAuABCBpBh0DBofBmEABkGbyXg6RAZBg2DaAHCC9AtBjwdIsMgboCQA4QdIJc+U/5MCTRl0Jgxm8jMg1gCQhMQnoAQBeTsZMvZqhOugAyDhkF0AeELyDCIMSCUAeEMCGlAWANCGxDegBAHhDkg1AHhDsgwaBhEH5Bh0DBoGEQhEA6BkAiERSA0AuERCJFAmARCJRAugZAJhE0gdAIZBg2Dt1HwdIgMg4ZBwyBagfAKhFggzAKhFgi3QMgFwi4QeoHwC4RgIAwDGQYNg7dk8HSIDIOGQR+e57PobDqJjGwgbAM1GGww2GCwwWCDwQaDSAfCOhDagfAOhHggzAOhHqhlb1wtm39q2GvoB8I/EAKCMBCEgiAcBDUYbDDYYLDBICKCMBGEiiBcBLVPmY3IMNhgsDXGXEZbKW0wiJQgrAShJQgvQQ0GGww2GGwwiJwg7AShJwg/QQgKajDYYLANxgyDWApCUxCeghAVhKkgVAXhKghZQQ0GGww2GGwwiLEglAXhLKjBYIPBthgzDCIuCHNBLalZ3e7C3dkXHSLDIP6CEBiEwaAGgw0GGww2GERjEB6DEBmEyaAGgw0GG/NgOzzP2U5UwxdFaBBGg1AahNMgpAZhNQitQXgNQmwQZoNQG4TbIOQGdRjsMNh5F+0w2GGwo5DiOAjJQVgOQnMQnoMQHYTpIFQH4ToI2UHYDkJ3EL6DOgx2GOysBzsMdhjsjTHDYC+vtMTSMktLLf10S4lcdikM4j8IAUIYEEKBUIfBDoOd9WCHwQ6DfTBmGESFEC6EepK9um2Ip2M6RIZBjAihRAgnQkgRwopQh8EOg531IGaEUCOEG6EOgx0GO/NgXzzP2aBUzw6lUCSEIyEkCWFJCE1CeBJClBCmhFAlhCshZAlhSwhdQh0GOwx23kU7DHYYHNnUF9aE0CaENyHECWFOCHVCuBNCnhD2hNAnhD8hBAphUGjA4IDBwXpwwOCAwYHHjUghTAqhUgiXQsgUwqYQOoXwKYRQIYwKoVQIp0JIFRowOGBwsB4cMDhg8FYrng6RYRC7QiPpY42cY9DISQZhWAjFQjgWQrLQKMu7NG8YHCV6l+n9qXoTuWTvsr1L94bBwTw4khHQyJanRvY8hXQhrAuhXQjvQogXwrwQ6oVwL4R8IewLoV8I/0IIGBowOGBw8C46YHDA4NiMGQYRMYSJIVQM4WIIGUPYGELHED6GEDKEkSGUDOFkaMDggMHBenDA4ITB28x4OomMmyHkDGFnCD1D+BlC0BCGhlA0hKMhJA1haQhNQxMGJwxO1oMTBicMTg5TYGsIXUP4GppJSOs2Np7OpENkGMTaENqG8DaEuCHMDU0YnDA4WQ9ibwh9Q/gbmjA4YXAyD87kGDTZF53si6JxCI9DiBzC5BAqh3A5hMwhbA6hcwifQwgdwugQSodmnbmoQxd16gIGJwzOyZhhELVDuB2adfgCBtE7hN8hBA9heAjFQzgeQvIQlocmDE4YnKwHJwxOGLxdj6dDZBhE9xC+hxA+hPEhlA/hfAjpQ1gfQvsQ3ocQPzRhcMLgZD24YHDB4K1/PJ3G3+l0Bp08z7cD8nQ2HSLDIB6IEEGECSJUEOGCaMHggsHFehAfRAghwgjRgsEFg4t5cJGbWOyLLvZFEUOEGSLUEOGGCDlE2CFCDxF+iBBEhCEiFBHhiAhJRAsGFwwu3kUXDC4YXOQmcEWELCJsEaGLCF9ECCPCGBHKiHBGhDQirBGhjQhvRAsGFwwu1oMLBhcMLk4/oY8If0QIJFp1AqqOQMHgqkNQdQqqjkHVOajPg1BErqNQMLhgcLEeXDC4YPAWSp4OkWEQp0Rr8zzvrDRvreTpEBkGMUuEWiLcEiGXCLtECwYXDG7WgxgmQjERjok2DG4Y3MyDm9zEZl90sy+KaiJcEyGbCNtE6CbCNxHCiTBOhHIinBMhnQjrRGgn2jC4YXDzLrphcMPgJjeBfSL0E+GfCAFFGChCQREOipBQhIUiNBThoQgRRZgo2jC4YXCzHtwwuGFwc94QIUUYKUJJEU6KkFKElSK0FOGlCDFFmClCTRFuipBTtGFww+BmPbhhcMPg5ggijoqQVISlop00vG5P5emYDpFhEFdFyCrCVhG6inadR6wDiXUisY4k1pnEOpQIgxsGNwxu5sFNbmKzL7rZF0VeEfaK0FeEvyIEFmGwCIVFOCxCYhEWi9BYhMciRBYdGDwweHgXPTB4YPCQm8BnEUKLMFqE0iKcFiG1CKtFaC3CaxFiizBbhNoi3BYdGDwweFgPHhg8MHgbLncHBnFchOQiLBehuQjPRYguwnQRqotwXYTsImwXobvowOCBwcN68MDggcHDoV+sF6G9CO9Fhxz9bb48nU6HyDCI/SL0F+G/CAFGGDA6MHhg8LAexIIRGozwYHRg8MDgYR485CYO+6KHfVF0GOHDCCFGGDFCiRFOjJBihBUjtBjhxQgxRpgxQo3RgcEDg4d30QODBwYPuYlTJ4TriHCdEa5DwnVK+POY8BPZVx0UrpPCdVS4zgrXYeEw6CsM+gqDvrIe9BUGfYVB357M0yGyiCwii8gisogsInN2GE/GeDLGkzGejPFkfHGC+OII8cUZ4isM+jJjboyZc8R4MsaT8ZUcvW9P5ulMOkTmODGejPFkjCdjPBnjyfjiUPHFqeKLY8V4MsaTMZ6ML44WX5wtvjhcfCU34YvjxRfni/FkjCdjPBnjyRhPxngyxpMxnozxZIwnYzwZ48kYT8YXp40vjhtfnDe+wqCvxZg5cownYzwZ48kYT8Z4MsaTMZ6M8WSMJ2M8GePJGE/GeDK+OIB8cQL54gjydXieD2M+jPkQ+RD5EPkQmaPIeDLGkzGejPFkjCdjPBnjyRhPxtS0MEUtrDq1D4OCwduTeTpEhkE8GSs5et+ezNPZdIgMg3gyxpMxnozxZIwnY8GgYFAc5MeTMZ6M8WRMsQtT7cKUu7A4zy8O9IsT/XgyxpMxnozxZIwnYzwZ48kYT8Z4MsaTMZ6M8WSMJ2PBIAUwTAUMCwYFg+KQP56M8WSMJ2M8GePJGE/GeDLGkzGejPFkjCdjPBnjyZiSGBYMUhTDgkHBoDj3jydjPBnjyRhPxngyxpMxnozxZIwnYzwZ48kYT8Z4MhYMUibD1MmwYFAwKEoB4MkYT8Z4MtbheT7PStO3J/N0ErlKZlTNjCqagSdjPBnjydgwWJUzqnRG1c6o4hl4MjYMGgbNPOjkJuzsi9rZF/VnEY3PKhpErjoaVUijKmlUKY2qpVHFNGCwymlUPY0qqFEVNaqkhhuRYbCqargxZhjEk3FV1qjSGlVbo4prVHWNKq9R9TWqwEZV2KgSG1Vjo4psVJUNDyLDYBXaqEobVWqjam1UsY2qtlHlNqreRhXcqIobVXKjam5U0Y2qulFlN6ruRhXeqMobVXqjam9U8Q08GVf5jaq/4c3zvEXHdIgMg1WFo8pwVB2OKsRRlTiqFEfV4qhiHFWNA0/GeDI2DBoGqySHk5twy76oW/ZFjSdjPBnjyRhPxngyxpMxnozxZIwnYzwZ48kYT8Z4MqZGhynSYap0uMFgg8FmxgyDeDLGkzGejPFkjCdjPBnjybhVRZsqaVM1bT6L2hC5ytrAIIU73KqyDQzenszdgUE8GePJGE/GeDLGkzGejPFkjCdjPBnjyRhPxngyppKHKeVhanm4wWCDwduTeTpEhkE8Gbfk6H17Mk+n0yEyDOLJGE/GeDLGkzGejCnuYap7mPIexpMxnozxZEyJD1PjwxT5cNs8z9kXdcu+qPFkjCdjPBnjyRhPxngyxpMxnozxZIwnYzwZ48kYT8ZU/TBlP0zdD3cY7DDYk5swnozxZIwnYzwZ48kYT8Z4MsaTMZ6M8WSMJ2M8GePJmEIgphKIKQXiDoMdBrsZMwziyRhPxngyxpMxnozxZIwnYzwZ48kYT8Z4MsaTMbVBTHEQUx3EHQY7DN6ezNMhcpWY+qwxlee5p96gb0/m6RC5Ck3BIJ6M8WSMJ2M8GVMuxNQLMQVDjCdjPBnjyZiiIaZqiCkb4p7chHv2Rd2zL2o8GePJGE/GeDLGkzGejPFkjCdjPBnjyRhPxngyxpMxdURMIRFTScQdBjsM9s2YYRBPxngyvj2ZuyAYDOLJGE/GeDLGkzGejPFkjCdjPBlTWsTUFjHFRYwn4wGDtyfzdDqdwd+ZdBadjBlPxoP14GA9OFgPDhFZRKaW22A9OFgPUm7E1BsxnozxZIwnYzwZ48kYT8Z4MsaTMZ6M8WSMJ2M8GY/GmBtjbowZBilAYiqQ+PZk7m+Dd1E8GePJmDIkpg6JKURiPBnjyRhPxngyHlXtrcq9Vb23wZjZkxmfJd+IDIN4Mr49mXvMMDgmP8HJT3ASGQbxZDxgcCQ34ZH6Vh4pcOWRE4IeyU14JDfh25O5r/5i8Ol0OowZBvFkjCdjPBlTrMRUKzHlSownYzwZ48kYT8Z4Mh6bMSc34XH4NmAQT8a3J3MPFQYHteEoXmKql5jyJaZ+ifFkjCfjCYMTBvFkPKmiOCmjOKmjOCmkeHsy69V5MbjvjuiYzutNRnevV29U74Xhfb0Xh/PuvJ6P5w8/wvt1v7ct4/tKLxRfddl9+zLpter16n1cot1RXjymt+pPd/UOvbsc6dMTn2h1jVbXaHWNF5jpzerVNV5sJsqh96IzvbqPXtfodY1e1+h1jV7XeEGaKHWNXtcYdR+jrjHqGqOuMeoao64x6hqj7mPUNUZdY9Z9zLrGrGvMusasa8y6xqxrzLrGrJ/HrGususaqn8eL3tbu3sc12v2JF7/pjeq9OLvu3qrei+EnyguI+7m6KX56qp6r16rXqzeqN6v3usY9qvut9unVNU5d49Q1Tl3jnlbvT9xMP73XNV51qP/+7U/fffuH77/+7fnHVf78yw9//Kd/a+Xn//uRP+FfY/nxp7/+8euffvnp66vS8/1nv/7vr/8P", + "debug_symbols": "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", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index bf91a18a302..795ccc6f220 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZnNbhtJDITfRWcfpn/YP3mVIAgUR1kIEGRDsRdYBH73ZQ1ZreSwwIK6uD7JYk03m+xpjX4dvp++vf/19Xz98fLz8Onzr8O32/lyOf/19fLyfHw7v1z13V+HDX9SSodP6Uk1uxbX6iquzbW7DtdpmjdX98vul90vu192v+x+2f2y+2X3K+5X9HMZqu8X1arvV2hy1esItLhWV3FtrnqdBh2u01Q21+SaXYur+nWouDbX7jpcp2nbXJNrdi2u7tfcr7lfc7+mfgM6Tfvmmlyza3Gtruo3oc0Ved0AgzAdxkbAWiHJA4uDLA8hNEInDMJ0mBshEbDoWKVZCJUghEbohEGAsy5q3jYCnAUA5wYohEoQApw7oBMGYTokOA9AImRCIVSCEBqhE+A8AeqcNZkZDWCgzjkBMqEQKkEIjaCGOQOmAzrAIBEyoRAqAYYF0AidMAjTAT1kkAiZwBGifzKWAA1kAEOsBVrIYDqgiQxgiLVAGxkUAnywBOgcA4QjmegZg0TIhEKoBCE0AgyxFugdg+mArtmvhbYpWB30jYEaFswUnWPQCJ0wCNMBvWOQCJlQCHQedB50RjcVrBe6yWA6oJsMEiETCqES4Iz1QjcZwBnLhG4ymAYF3WQAZwFkQiHApwE6AeGauoKWMUiETCiEShBCI3QHNEgZgERA+ARoVN0AGlUToBN0OlWnXNAFtQAKQS9aMS8Uv0EjdALCMUEU/w77DQQTxB2jYmCo8IrxoMIrxoMKN5gOqHCD7FEobMGYcYcwEALuORg8Knx3RoUbZAI+jHlhgxdMZy9IaOcbOgrBJFB9O6D6DBIhEzAczA/VZyCERuiEQZgOqD5BVlB9BplQCJUgBDgjGag+g0GYBhXVZ5AImVAI8BkARGmaK4qubYBC0Ku3BJA9T3WvMGh3Ha52Uqh7vUGTa3atrt0vihIzwJlA16Ri6zVIhOwDQ/UZVIIQGqE77IcOXGs/dewwHfZzRgVoeBNAd0CxtAYQgjo3JApbncEgTAfUkUEi4BKYF/Y8g0qAM0aIPW+/KGpsfwc11pFw1JhBJuAMgyVAjRkIAccYJAo1ZjAI0wE1ZpAImVB8GKgxA6ZlcoST+UGNGUwDQY0ZiKVXUFEGnbAvwcfH04Gn4K9vt9MJh+DfjsV6WH493k7Xt8On6/vl8nT4+3h53z/08/V43fXteNP/aj5O1++qavjjfDmBPp7u0dt/h9ate7DW8gqX/x+PYrX4tgXie+Hge6mB+LExfmzjsfhUIvGZ+Rslkr+Jm+EeP2PxOPh5fI/EC+c/pT4YPyPxfcX3FohPG26/u0HaZIQc2lgOPYcc5n0Msz/okLYUcdBELIe0PTqGoMNo9zyEHFKeawxlhhxkjUG/5z7sEKmoOfpKwxYrKHyDdYcUagv9irwmMfPDDqGizmnlQb+jRhzK2l0VQw5Z7mPosVnMtMawhYq6yFrN0kLNXWp/1KHfx9BDjaWH8OUw24MONbbJ1bJqssa2h5bWNtlCBx59iCdrDC00Brl3t4QOHfogcOVBaiwPZY2hlVBnNblnUh52iG3Vra88tFhVt7kc+hY5AOlDz9WbvYby0OU+hlge+lh7VB+h3X7ktRajhLp73Pti9FB397luvCO20/7hEOluWacoSZFqkMqFkBpZB2mcgIRyKJ3FKKOF4mXF99D41/xDR+m2jgwtdGJolfmL7Ult8vp9i8y/r221l0gnN0kPjT+v27w+L46s31r+2B6wtsIZqd4+13f50LF7nZljh265f3l57PKx81W7H45id9N1K4ydSu630j/T90VfHZ/Ptz9+sf2A0+18/HY5+csf79fn3/779s8r/8NffF9vL8+n7++3E5zuP/vqn8+ivwFKSV/0Ya2+mtuTfnPSF3jy+rnq0/haBS8TPqpnQKnblw+M7F8=", + "bytecode": "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", + "debug_symbols": "pZnNbhs5EITfRWcf+Nf8yasEQaA4ciBAkA3FXmBh+N23a9jFiQ8LBK2L65OsriGb3Rxq9H74efrx9uv7+fr0/Pvw5ev74cftfLmcf32/PD8eX8/PV333/RDwJ8Z4+BIfVJNpNi2mYlpNm2k3HVNTMDW/ZH7J/JL5JfNL5pfML5lfMr9sflk/l6D6flYt+n6BRlO9jkCzaTEV02qq16nQbjqmSjCNpsk0m6pfg4ppNW2m3XRMrcE0mibTbGp+1fyq+VXzq+rXoWNqC6bRNJlm02KqfgNaTZHXAOiEYdADAWuFJHcsDrLchVAJjdAJw2AEAnywOAOLjlUZmVAIQqiERugEOOtipRAIcK4AODdAJhSCEODcAY3QCcMgwnkAIiERMqEQhFAJjaDOKQDUOWkOExpggjqnBEiETCgEIVQCDDNgGKADJkRCImQCDAsAhsjY1i8bNEInDAP00IRISASOEP2TkHk00AQYIs9ooQnDAE00AYbIM9poQibAB6lD50xASyOH6JkJkZAImVAIQqgENczIPHpnwjBA12zXQttkzAt9MwGGyCE6Z0IlNEInDAP0zoRISIRMoHOnc6czuiljvdBNE4YBumlCJCRCJhQCnLFe6KYJcMYyoZsmjAkZ3TQBzg2QCJkAnw5oBIRr6jJaZkIkJEImFIIQKqEZoEFKAESChpcI0KiSABpVMqARdDpFp5zRBUUAmaAXLZgXin9CJTQCwjFBFP8G2w0EE8Qdo2Bg2y0C40GFC8aDCp8wDFDhE5JFobAFY8YdYoIQYIjBo8I3Z1T4hETAhzEvbPCC6WwFCW18A6PAJFB9G6D6JkRCImRCIeAKmDGqb0IjdAKckQxU34RISIRMKAQhwBnJQPVN6IQxoaD6JkRCImSC+tQAwF1Z01xQdDUBMqEQZMtT2SoM2ky76TwpFNTbptE0mRbTZhdFiU3A1fEvbL0TIiHZwFB9EwpBCJXQDLZDRwF0wjDYzhkCQHgFNAMUS20AIcC5AxqhE4YB6mhCJOASSC/2vAmFgNMHpow9b7soamx7BzXWMHjU2IREwBkGS4AamyAEHGOQKNTYhE4YBqixCZGQCNmGgRqbwLQMjnAwP6ixCWOCoMYmyEyvbBW1QSNsS/Dx8XDgKfj76+10wiH4j2OxHpZfjrfT9fXw5fp2uTwc/jle3rYP/X45Xjd9Pd70v5qq0/Wnqho+nS8n0MfDHh3+P7SEZsFayytc/j4evTfja3DEt8zBt1wc8T0wvod+X3zMnvjE/PXsyd/ALXSLH754nAAtvnnihfMfUu6MH574tuJbdcTHgDvzZhCDdJdDk+XgHEPtu0NyOYx9FqPd6RBD9DhoKpdDDPeOwenQ654Hl0NMY40hD5eDrDHoN+W7HTw1OXpbaQi+glr7QgzJtxT4Om0O0dUW+jV9pWGkux1cbZHiyqR+T/Y45LXDK7ockuxjaL5ZjLjGEFyrmWWtZq6u7SGXdq9D28fQXK2pXwSWw6h3OhTfNlnyqsni22BqXBttdR269EHiumXpodvjIHt3i+vgow8jVx6k+PKQ1xhqdnVWlT2TcreDb7OvbeWh+qq6juXQgucQpg9eV2+24spDk30Mvjy0vvao1l27fU9rLXp2dXff+6I3V3e3sW7d3bfTfnLwdLesc5hETzVI4UJI8ayDNBaT9OqKlxXvudtJZQLFtYZS1/xdh/G6jgzVdWKoheP37Ul18PotePJXJd51/bRu0/rM2ZP/tfy+Hl5b2fCsfhvreYDr4L2fml2H5v2r5Ljv8r7zUd0PN7674bqV+U4V+63wc/q+6avj4/n26VffDzjdzscfl5O9fHq7Pv7x39d/X/gf/mr8cnt+PP18u53gtP90rH++iv6OKDl+0we++mqEB/3upC/w9PZr0Wf8pQheRnxUz3BSwrcPjOw/", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_0.snap index bf91a18a302..795ccc6f220 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_0.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZnNbhtJDITfRWcfpn/YP3mVIAgUR1kIEGRDsRdYBH73ZQ1ZreSwwIK6uD7JYk03m+xpjX4dvp++vf/19Xz98fLz8Onzr8O32/lyOf/19fLyfHw7v1z13V+HDX9SSodP6Uk1uxbX6iquzbW7DtdpmjdX98vul90vu192v+x+2f2y+2X3K+5X9HMZqu8X1arvV2hy1esItLhWV3FtrnqdBh2u01Q21+SaXYur+nWouDbX7jpcp2nbXJNrdi2u7tfcr7lfc7+mfgM6Tfvmmlyza3Gtruo3oc0Ved0AgzAdxkbAWiHJA4uDLA8hNEInDMJ0mBshEbDoWKVZCJUghEbohEGAsy5q3jYCnAUA5wYohEoQApw7oBMGYTokOA9AImRCIVSCEBqhE+A8AeqcNZkZDWCgzjkBMqEQKkEIjaCGOQOmAzrAIBEyoRAqAYYF0AidMAjTAT1kkAiZwBGifzKWAA1kAEOsBVrIYDqgiQxgiLVAGxkUAnywBOgcA4QjmegZg0TIhEKoBCE0AgyxFugdg+mArtmvhbYpWB30jYEaFswUnWPQCJ0wCNMBvWOQCJlQCHQedB50RjcVrBe6yWA6oJsMEiETCqES4Iz1QjcZwBnLhG4ymAYF3WQAZwFkQiHApwE6AeGauoKWMUiETCiEShBCI3QHNEgZgERA+ARoVN0AGlUToBN0OlWnXNAFtQAKQS9aMS8Uv0EjdALCMUEU/w77DQQTxB2jYmCo8IrxoMIrxoMKN5gOqHCD7FEobMGYcYcwEALuORg8Knx3RoUbZAI+jHlhgxdMZy9IaOcbOgrBJFB9O6D6DBIhEzAczA/VZyCERuiEQZgOqD5BVlB9BplQCJUgBDgjGag+g0GYBhXVZ5AImVAI8BkARGmaK4qubYBC0Ku3BJA9T3WvMGh3Ha52Uqh7vUGTa3atrt0vihIzwJlA16Ri6zVIhOwDQ/UZVIIQGqE77IcOXGs/dewwHfZzRgVoeBNAd0CxtAYQgjo3JApbncEgTAfUkUEi4BKYF/Y8g0qAM0aIPW+/KGpsfwc11pFw1JhBJuAMgyVAjRkIAccYJAo1ZjAI0wE1ZpAImVB8GKgxA6ZlcoST+UGNGUwDQY0ZiKVXUFEGnbAvwcfH04Gn4K9vt9MJh+DfjsV6WH493k7Xt8On6/vl8nT4+3h53z/08/V43fXteNP/aj5O1++qavjjfDmBPp7u0dt/h9ate7DW8gqX/x+PYrX4tgXie+Hge6mB+LExfmzjsfhUIvGZ+Rslkr+Jm+EeP2PxOPh5fI/EC+c/pT4YPyPxfcX3FohPG26/u0HaZIQc2lgOPYcc5n0Msz/okLYUcdBELIe0PTqGoMNo9zyEHFKeawxlhhxkjUG/5z7sEKmoOfpKwxYrKHyDdYcUagv9irwmMfPDDqGizmnlQb+jRhzK2l0VQw5Z7mPosVnMtMawhYq6yFrN0kLNXWp/1KHfx9BDjaWH8OUw24MONbbJ1bJqssa2h5bWNtlCBx59iCdrDC00Brl3t4QOHfogcOVBaiwPZY2hlVBnNblnUh52iG3Vra88tFhVt7kc+hY5AOlDz9WbvYby0OU+hlge+lh7VB+h3X7ktRajhLp73Pti9FB397luvCO20/7hEOluWacoSZFqkMqFkBpZB2mcgIRyKJ3FKKOF4mXF99D41/xDR+m2jgwtdGJolfmL7Ult8vp9i8y/r221l0gnN0kPjT+v27w+L46s31r+2B6wtsIZqd4+13f50LF7nZljh265f3l57PKx81W7H45id9N1K4ydSu630j/T90VfHZ/Ptz9+sf2A0+18/HY5+csf79fn3/779s8r/8NffF9vL8+n7++3E5zuP/vqn8+ivwFKSV/0Ya2+mtuTfnPSF3jy+rnq0/haBS8TPqpnQKnblw+M7F8=", + "bytecode": "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", + "debug_symbols": "pZnNbhs5EITfRWcf+Nf8yasEQaA4ciBAkA3FXmBh+N23a9jFiQ8LBK2L65OsriGb3Rxq9H74efrx9uv7+fr0/Pvw5ev74cftfLmcf32/PD8eX8/PV333/RDwJ8Z4+BIfVJNpNi2mYlpNm2k3HVNTMDW/ZH7J/JL5JfNL5pfML5lfMr9sflk/l6D6flYt+n6BRlO9jkCzaTEV02qq16nQbjqmSjCNpsk0m6pfg4ppNW2m3XRMrcE0mibTbGp+1fyq+VXzq+rXoWNqC6bRNJlm02KqfgNaTZHXAOiEYdADAWuFJHcsDrLchVAJjdAJw2AEAnywOAOLjlUZmVAIQqiERugEOOtipRAIcK4AODdAJhSCEODcAY3QCcMgwnkAIiERMqEQhFAJjaDOKQDUOWkOExpggjqnBEiETCgEIVQCDDNgGKADJkRCImQCDAsAhsjY1i8bNEInDAP00IRISASOEP2TkHk00AQYIs9ooQnDAE00AYbIM9poQibAB6lD50xASyOH6JkJkZAImVAIQqgENczIPHpnwjBA12zXQttkzAt9MwGGyCE6Z0IlNEInDAP0zoRISIRMoHOnc6czuiljvdBNE4YBumlCJCRCJhQCnLFe6KYJcMYyoZsmjAkZ3TQBzg2QCJkAnw5oBIRr6jJaZkIkJEImFIIQKqEZoEFKAESChpcI0KiSABpVMqARdDpFp5zRBUUAmaAXLZgXin9CJTQCwjFBFP8G2w0EE8Qdo2Bg2y0C40GFC8aDCp8wDFDhE5JFobAFY8YdYoIQYIjBo8I3Z1T4hETAhzEvbPCC6WwFCW18A6PAJFB9G6D6JkRCImRCIeAKmDGqb0IjdAKckQxU34RISIRMKAQhwBnJQPVN6IQxoaD6JkRCImSC+tQAwF1Z01xQdDUBMqEQZMtT2SoM2ky76TwpFNTbptE0mRbTZhdFiU3A1fEvbL0TIiHZwFB9EwpBCJXQDLZDRwF0wjDYzhkCQHgFNAMUS20AIcC5AxqhE4YB6mhCJOASSC/2vAmFgNMHpow9b7soamx7BzXWMHjU2IREwBkGS4AamyAEHGOQKNTYhE4YBqixCZGQCNmGgRqbwLQMjnAwP6ixCWOCoMYmyEyvbBW1QSNsS/Dx8XDgKfj76+10wiH4j2OxHpZfjrfT9fXw5fp2uTwc/jle3rYP/X45Xjd9Pd70v5qq0/Wnqho+nS8n0MfDHh3+P7SEZsFayytc/j4evTfja3DEt8zBt1wc8T0wvod+X3zMnvjE/PXsyd/ALXSLH754nAAtvnnihfMfUu6MH574tuJbdcTHgDvzZhCDdJdDk+XgHEPtu0NyOYx9FqPd6RBD9DhoKpdDDPeOwenQ654Hl0NMY40hD5eDrDHoN+W7HTw1OXpbaQi+glr7QgzJtxT4Om0O0dUW+jV9pWGkux1cbZHiyqR+T/Y45LXDK7ockuxjaL5ZjLjGEFyrmWWtZq6u7SGXdq9D28fQXK2pXwSWw6h3OhTfNlnyqsni22BqXBttdR269EHiumXpodvjIHt3i+vgow8jVx6k+PKQ1xhqdnVWlT2TcreDb7OvbeWh+qq6juXQgucQpg9eV2+24spDk30Mvjy0vvao1l27fU9rLXp2dXff+6I3V3e3sW7d3bfTfnLwdLesc5hETzVI4UJI8ayDNBaT9OqKlxXvudtJZQLFtYZS1/xdh/G6jgzVdWKoheP37Ul18PotePJXJd51/bRu0/rM2ZP/tfy+Hl5b2fCsfhvreYDr4L2fml2H5v2r5Ljv8r7zUd0PN7674bqV+U4V+63wc/q+6avj4/n26VffDzjdzscfl5O9fHq7Pv7x39d/X/gf/mr8cnt+PP18u53gtP90rH++iv6OKDl+0we++mqEB/3upC/w9PZr0Wf8pQheRnxUz3BSwrcPjOw/", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 019f81e0d23..7b57b86ee23 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/conditional_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZrNbhs7DIXfxess9EdR6qsUQeGmbmHAcAI3ucBFkXevzohnpl04KDib8rNdnqEokqNx/Ovw7fT17ceX8/X788/Dp8+/Dl9v58vl/OPL5fnp+Hp+vo53fx0C/omhHj7Fh2HVbDPbp43BbDSbzGazxayYNb1oetH0oukl00uml0wvmV4yvWR6yfTyeJ1gh16GHXpl2BLMDj2BTWaz2WJWzA69Cqtmm9k+rQSz0WwyO/QUtpgVs9Wsmm1m+7Q1mI1mk1nTq6ZXTa+aXh16HbaZ7dMq8hUASBAyo8gQUqNKQM6RJO0GLRAiATpIXIM7VtiU0AjdoAcC3JHGDnfE2TOhEIRQCUpoBCi3h0MKgQDlDhjKKQAyoRCEMJRTBCihEboBCjclQCQkQiYUghAqQQlQzgAoj4wllPAEKAsgETKhEIRQCRCsAAiObKQcCJGQCJlQCEKohGbK6ImEZKIpJkAQWUVbTMiEQhiCGVlFa0xQAzRDRjLRDROGe0Za0AcThFAJSmiEboBumABBZBX9MCETxK6FVsjIM3phAgSxUnTDAhoIkZAImVAIQqgEJVBZqdyojJbJyDNaZkImQAd5RqdkJBOdkrG56JSCHKJTJgyvgnWhUyYIoRJGPAX5QadM6BMy+qJkQCbAvQAqQQmN0A3QDhMiIREyAToCUALcx3IySr0oAF4NkAlYTgcMLwmAboDClgiIhETIBAxoLBCFPWGEIVgg6lkQ2DLUEc8y1RHPMtYXEEIlNHrBHTGjjCdEAgQRPKp3UUb1TmgGKEjBupY6XKDbO6i6igWi6iYkQiYUghBw68GSUXUTGgF3H6wdNTYBOkhCKwQhQAcLxMSe0AjQQfCowwmRkAiZUAhC4EpRhxMawSq8YGJPiIREyAQxQNXVCsjzblVQY/MdBK+ARugGGLATIiEREHwDFIIQoIyLovwWQPlpAERCIuD2i3hQfhOEgDtwAiihEboBBuyESEgErhQlOkEIlaCERugGqNUJiYDAxr6X5ShRAGU5AxXMxfkGAhRAN0CFToiERMDSsQOo0AlCqAQlNEI3wFxUbAXm4oREyIRCEAKUsUuo2QmN0A1QsxMiIREyATrYW9RjGzspqMcWAZkwrt4SQJY8CebjYtVsM9unRZUuNppNZotZnRcVlOoEXB0foVQnREKywFCqEwpBCJWggPf3hwOP5l9eb6cTTuZ/nNXHCf7leDtdXw+frm+Xy8Phv+PlbflPP1+O18W+Hm/j0yF5un4bdgh+P19OoPeHzTvcdy1BzblEWd3l3/0xTqd/DQ5/zQxec3H4t0D/Fto+/5g9/on5a9mTv44DzuLfff44PJu/3vNv9/0ThtfiP85CDn/cMhd3qQ7v8fBh7uMRw7N64e51KTv9u8dfV3+tDv8YcKKbCQhyN/949Nq1gR+GUNsagiaXQt8W0XWnQgyeQhhuZVWIYW8MToVWtzy4FGLqawy5uxRkjWF817BbwVNRfWvqEHwFFdOqEF19Nb7MWBfR024FV1GnuOZhfJvgUcjrzWWgSyHJFoP6VtHjGkNwFXWWdTdzdTV3LrpXQbcY9G5j4Ql+15z9SOAf7pQfue+9VY55sqWg150KxTelS16bqvjmW43rnK+uA+v4JljWGKorBtnGk7gOjePb5DUPUnx5yGsMNbtGQ5Utk7JbwXevqbrmoaovD31V0OA5AkbdhosWVx5Uthh8edC2DlltrttVS+tetOzq7rb1RVNXd2tfTw7Nd6v4S0E8Y1L7+jjocd+q6f7J5cMpHWQ7Au4MwOUfc91mtEtgK4Pqi2Drhpocz4T/sINt3wa2nfvX9m1f27l7befmtZ1790EDy/oUNr5E8/gXzkEprutX5k9cI0yU9wJp1eW/HvKauuJf1+96FK/rI0d1PXHUwvz5jgS18/oaPOvX9VSj2XMjrRLvxP84Xh2fzre/fgvxDqXb+fj1crKX39+uT398+vr/Cz/hbylebs9Pp29vtxOUth9UjH8+y+heEX0cfzYZr3p4GM+/j/hNxfJZeJAseBnxcvxVQ2p/fEdkvwE=", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn sort(mut a: [u32; 4]) -> [u32; 4] {\n for i in 1..4 {\n for j in 0..i {\n if a[i] < a[j] {\n let c = a[j];\n a[j] = a[i];\n a[i] = c;\n }\n }\n }\n a\n}\n\nfn must_be_zero(x: u8) {\n assert(x == 0);\n}\n\nfn main(a: u32, mut c: [u32; 4], x: [u8; 5], result: pub [u8; 32]) {\n //Test case for short-circuit\n let mut data = [0 as u32; 32];\n let mut ba = a;\n for i in 0..32 {\n let i_u32 = i as u32;\n if i_u32 == a {\n for j in 0..4 {\n data[i + j] = c[4 - 1 - j];\n for k in 0..4 {\n ba = ba + data[k];\n }\n if ba == 4864 {\n c[3] = ba;\n }\n }\n }\n }\n assert(data[31] == 0);\n assert(ba != 13);\n //Test case for conditional with arrays from function parameters\n let b = sort([1, 2, 3, 4]);\n assert(b[0] == 1);\n\n if a == 0 {\n must_be_zero(0);\n c[0] = 3;\n } else {\n must_be_zero(1);\n c[0] = 1;\n c[1] = c[2] / a + 11 % a;\n let f1 = a as Field;\n assert(10 / f1 != 0);\n }\n assert(c[0] == 3);\n\n let mut y = 0;\n if a == 0 {\n let digest = std::hash::blake3(x);\n y = digest[0];\n } else {\n y = 5;\n }\n assert(y == result[0]);\n c = sort(c);\n assert(c[0] == 0);\n //test 1\n let mut x: u32 = 0;\n if a == 0 {\n c[0] = 12;\n if a != 0 {\n x = 6;\n } else {\n x = 2;\n assert(x == 2);\n }\n } else {\n x = 5;\n assert(x == 5);\n }\n if c[0] == 0 {\n x = 3;\n }\n assert(x == 2);\n //test2: loops\n let mut x: u32 = 0;\n x = a - a;\n for i in 0..4 {\n if c[i] == 0 {\n x = i as u32 + 2;\n }\n }\n assert(x == 0);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index bd53f885283..384e7845040 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -71,7 +71,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1b207bQBAdO2mBUCDlfmnBQKFQClrHCThvrdT+RN9KCS996lf1R9qXfkc/pCzMqMvi+GXPWhkpI1mTzNqjs3M545WShB7k4u76xJ+Tu6vFun13ZZ7tWYXteYVtpsI2W2Gbq7B12NZmTCk9lYT1B9YmTHKEr9sHuamAG+o7lw9uLJZYd/3EdTmArrQiBqwwl/3+6Ko3yov8q+kNr8uB6Q+uL8u8zAfl4KZXFsWo7JdXw+vhlRnm/WKU3w6GvVv2tRTuq2BfphspkX7BheJcwuXCtDi/kmPbOLZRnzu4U2fdFRSGcXEyYZKTAowvkRiVst43whdXJests16RgAjrWUPmAZhk1lsmHJusREokmvWWCct6luWkYewrh33FsK8UHcZur5Tv8wWFY1ysTJioYL7VCBjvBd24QIp+tOnQhlgDBtAlQ+s3o8eCbuZ1wjazfV2RZl73Lisp3+MLCEM+Lk4mTFQ0MrIOG32FSQg2+Ro7uG2w3pSASNdaQ+YBQDOhG7DQV5gNwrHJZqREollvA5cLo/VQltDkY9yiKaM1dijbZr0jARFGs4bMAzDJjLZNOKbYiZRINKNtE5bRNB62NDDaqwgY7wXdkEDqfbTp0EJ/DQygS3LWb0Z6Dygaih+Zu0bHeUqwKdDYAWWX9Z4ERCrdGjIPAJo93ICFjvNdwrHHXqREosf5LmHHucYDSkqTjzGjKaM1dkDZZ30gARFGs4bMAzDJjLZPOKY4iJRINKPtE5bRNB5QNDDaYQSM94JuyCzSpkML/Q0wgC7JWb92z1oPKBqKH5m7Rsd5i/SN8yPWxxIQqXRryDwAaPZwAxY6zo8Ixx7HpGOcH9F0nLdo8jG+RWLUOnqmicKCjRYE5K9RYmE8iYCxEmgoRZ8CN621oE4VYHxHSgrqDAe0p7WgzhRgfE9KCuocB7TQWlDnCjBeUKSCSsFA54HFGWvOo/f8ArjnWKMIvecF4J5jsSV6z4vAPSMb2h6u2vT/V9+2B21N2hwtchwSb11E/tohPuQPb/7fQHzpVHxOqbv45df33+593Zq1VdZrfz9u/fjz87O7tlPzXFazdljj86TmufOaNVPjczDmORkAs6znWHecdeChuCf+5+P4NzP0VNwamPfWpPfaFc8lY76nnq6717e7toWKNfG5wtrFK/v4B5zzQy3KPQAA", - "debug_symbols": "pZRBboMwEEXv4nUWtmcMJlepqogQp0KyADlQqYpy9w7+QJNFpYpu/LDN/zPjsXxXl3CePk5td+1v6vh2V+fUxth+nGLf1GPbd7J6fxzUOj2NKQRZUk/7ohrqFLpRHbspxoP6rOOUf7oNdZc51kl29UGF7iIUw2sbw/z1OPyo9e9SolVMZDa5+7u+dKu+rHboWdOiZ71Lb+yqN/5/8XfpyVdb/npPfCpXPe85f+ZN7/bp3aa3u/LXW/6v+neZ1U2bXm68KtVRGubzWOXRaMDIYQosQAADDigA8WCBB8RFSrAaEJdCYAECOEewDigAZGJ99rRVBmkAuRByIcqBiHMEckCRrQkuhIIIFTEqYrgwXBgVMSpiVMRFtuYye7IHqmztxMULDGABAsRF7p0TFyPn74qF5UK/sAILvdAstDMfc1dTW59jWB6j69Q1T2/T+DWsO+vrNaS+CZcphbmreU/6/A0=", + "debug_symbols": "pZRBboMwEEXv4jUL4xmDyVWqKnKIEyFZgByIVEW5eyf+gSaLShXd8ADz/ngw+KaO4TCf911/Gi5q93FTh9TF2J33cWj91A293L3dC7Vc7qcUgtxSL+NijT6FflK7fo6xUFcf5/zQZfR95uSTjOpChf4olMBTF8Pj7F782Pp3lWiRicpVt3/3a7v4dbPBZ01Pn/UmvzSLX7r/1d/kk2vW+est9blefFtu8u3qmy3+uv7M7/6nXPm2S29frKrVTl64y8cmH0sNlPIyBAYggAELVIBksMABkiItGA1ISiUwAAGcKxgLVABmYlzONE0GaQBzIcyFKBcizhXIAlWOJqQQGiJ0xOiIkcJIYXTE6IjREVc5muucyQ5ocrSVFFlbWwIGIEBSnEBS5POxFVADDmgyKg2UgKQ8/pKrT50/xPDcRE5z377sKdPXuIwsu86YhjYc5xQeq5nHZH2/AQ==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap index bd53f885283..384e7845040 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_0.snap @@ -71,7 +71,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1b207bQBAdO2mBUCDlfmnBQKFQClrHCThvrdT+RN9KCS996lf1R9qXfkc/pCzMqMvi+GXPWhkpI1mTzNqjs3M545WShB7k4u76xJ+Tu6vFun13ZZ7tWYXteYVtpsI2W2Gbq7B12NZmTCk9lYT1B9YmTHKEr9sHuamAG+o7lw9uLJZYd/3EdTmArrQiBqwwl/3+6Ko3yov8q+kNr8uB6Q+uL8u8zAfl4KZXFsWo7JdXw+vhlRnm/WKU3w6GvVv2tRTuq2BfphspkX7BheJcwuXCtDi/kmPbOLZRnzu4U2fdFRSGcXEyYZKTAowvkRiVst43whdXJests16RgAjrWUPmAZhk1lsmHJusREokmvWWCct6luWkYewrh33FsK8UHcZur5Tv8wWFY1ysTJioYL7VCBjvBd24QIp+tOnQhlgDBtAlQ+s3o8eCbuZ1wjazfV2RZl73Lisp3+MLCEM+Lk4mTFQ0MrIOG32FSQg2+Ro7uG2w3pSASNdaQ+YBQDOhG7DQV5gNwrHJZqREollvA5cLo/VQltDkY9yiKaM1dijbZr0jARFGs4bMAzDJjLZNOKbYiZRINKNtE5bRNB62NDDaqwgY7wXdkEDqfbTp0EJ/DQygS3LWb0Z6Dygaih+Zu0bHeUqwKdDYAWWX9Z4ERCrdGjIPAJo93ICFjvNdwrHHXqREosf5LmHHucYDSkqTjzGjKaM1dkDZZ30gARFGs4bMAzDJjLZPOKY4iJRINKPtE5bRNB5QNDDaYQSM94JuyCzSpkML/Q0wgC7JWb92z1oPKBqKH5m7Rsd5i/SN8yPWxxIQqXRryDwAaPZwAxY6zo8Ixx7HpGOcH9F0nLdo8jG+RWLUOnqmicKCjRYE5K9RYmE8iYCxEmgoRZ8CN621oE4VYHxHSgrqDAe0p7WgzhRgfE9KCuocB7TQWlDnCjBeUKSCSsFA54HFGWvOo/f8ArjnWKMIvecF4J5jsSV6z4vAPSMb2h6u2vT/V9+2B21N2hwtchwSb11E/tohPuQPb/7fQHzpVHxOqbv45df33+593Zq1VdZrfz9u/fjz87O7tlPzXFazdljj86TmufOaNVPjczDmORkAs6znWHecdeChuCf+5+P4NzP0VNwamPfWpPfaFc8lY76nnq6717e7toWKNfG5wtrFK/v4B5zzQy3KPQAA", - "debug_symbols": "pZRBboMwEEXv4nUWtmcMJlepqogQp0KyADlQqYpy9w7+QJNFpYpu/LDN/zPjsXxXl3CePk5td+1v6vh2V+fUxth+nGLf1GPbd7J6fxzUOj2NKQRZUk/7ohrqFLpRHbspxoP6rOOUf7oNdZc51kl29UGF7iIUw2sbw/z1OPyo9e9SolVMZDa5+7u+dKu+rHboWdOiZ71Lb+yqN/5/8XfpyVdb/npPfCpXPe85f+ZN7/bp3aa3u/LXW/6v+neZ1U2bXm68KtVRGubzWOXRaMDIYQosQAADDigA8WCBB8RFSrAaEJdCYAECOEewDigAZGJ99rRVBmkAuRByIcqBiHMEckCRrQkuhIIIFTEqYrgwXBgVMSpiVMRFtuYye7IHqmztxMULDGABAsRF7p0TFyPn74qF5UK/sAILvdAstDMfc1dTW59jWB6j69Q1T2/T+DWsO+vrNaS+CZcphbmreU/6/A0=", + "debug_symbols": "pZRBboMwEEXv4jUL4xmDyVWqKnKIEyFZgByIVEW5eyf+gSaLShXd8ADz/ngw+KaO4TCf911/Gi5q93FTh9TF2J33cWj91A293L3dC7Vc7qcUgtxSL+NijT6FflK7fo6xUFcf5/zQZfR95uSTjOpChf4olMBTF8Pj7F782Pp3lWiRicpVt3/3a7v4dbPBZ01Pn/UmvzSLX7r/1d/kk2vW+est9blefFtu8u3qmy3+uv7M7/6nXPm2S29frKrVTl64y8cmH0sNlPIyBAYggAELVIBksMABkiItGA1ISiUwAAGcKxgLVABmYlzONE0GaQBzIcyFKBcizhXIAlWOJqQQGiJ0xOiIkcJIYXTE6IjREVc5muucyQ5ocrSVFFlbWwIGIEBSnEBS5POxFVADDmgyKg2UgKQ8/pKrT50/xPDcRE5z377sKdPXuIwsu86YhjYc5xQeq5nHZH2/AQ==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index bd53f885283..384e7845040 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -71,7 +71,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1b207bQBAdO2mBUCDlfmnBQKFQClrHCThvrdT+RN9KCS996lf1R9qXfkc/pCzMqMvi+GXPWhkpI1mTzNqjs3M545WShB7k4u76xJ+Tu6vFun13ZZ7tWYXteYVtpsI2W2Gbq7B12NZmTCk9lYT1B9YmTHKEr9sHuamAG+o7lw9uLJZYd/3EdTmArrQiBqwwl/3+6Ko3yov8q+kNr8uB6Q+uL8u8zAfl4KZXFsWo7JdXw+vhlRnm/WKU3w6GvVv2tRTuq2BfphspkX7BheJcwuXCtDi/kmPbOLZRnzu4U2fdFRSGcXEyYZKTAowvkRiVst43whdXJests16RgAjrWUPmAZhk1lsmHJusREokmvWWCct6luWkYewrh33FsK8UHcZur5Tv8wWFY1ysTJioYL7VCBjvBd24QIp+tOnQhlgDBtAlQ+s3o8eCbuZ1wjazfV2RZl73Lisp3+MLCEM+Lk4mTFQ0MrIOG32FSQg2+Ro7uG2w3pSASNdaQ+YBQDOhG7DQV5gNwrHJZqREollvA5cLo/VQltDkY9yiKaM1dijbZr0jARFGs4bMAzDJjLZNOKbYiZRINKNtE5bRNB62NDDaqwgY7wXdkEDqfbTp0EJ/DQygS3LWb0Z6Dygaih+Zu0bHeUqwKdDYAWWX9Z4ERCrdGjIPAJo93ICFjvNdwrHHXqREosf5LmHHucYDSkqTjzGjKaM1dkDZZ30gARFGs4bMAzDJjLZPOKY4iJRINKPtE5bRNB5QNDDaYQSM94JuyCzSpkML/Q0wgC7JWb92z1oPKBqKH5m7Rsd5i/SN8yPWxxIQqXRryDwAaPZwAxY6zo8Ixx7HpGOcH9F0nLdo8jG+RWLUOnqmicKCjRYE5K9RYmE8iYCxEmgoRZ8CN621oE4VYHxHSgrqDAe0p7WgzhRgfE9KCuocB7TQWlDnCjBeUKSCSsFA54HFGWvOo/f8ArjnWKMIvecF4J5jsSV6z4vAPSMb2h6u2vT/V9+2B21N2hwtchwSb11E/tohPuQPb/7fQHzpVHxOqbv45df33+593Zq1VdZrfz9u/fjz87O7tlPzXFazdljj86TmufOaNVPjczDmORkAs6znWHecdeChuCf+5+P4NzP0VNwamPfWpPfaFc8lY76nnq6717e7toWKNfG5wtrFK/v4B5zzQy3KPQAA", - "debug_symbols": "pZRBboMwEEXv4nUWtmcMJlepqogQp0KyADlQqYpy9w7+QJNFpYpu/LDN/zPjsXxXl3CePk5td+1v6vh2V+fUxth+nGLf1GPbd7J6fxzUOj2NKQRZUk/7ohrqFLpRHbspxoP6rOOUf7oNdZc51kl29UGF7iIUw2sbw/z1OPyo9e9SolVMZDa5+7u+dKu+rHboWdOiZ71Lb+yqN/5/8XfpyVdb/npPfCpXPe85f+ZN7/bp3aa3u/LXW/6v+neZ1U2bXm68KtVRGubzWOXRaMDIYQosQAADDigA8WCBB8RFSrAaEJdCYAECOEewDigAZGJ99rRVBmkAuRByIcqBiHMEckCRrQkuhIIIFTEqYrgwXBgVMSpiVMRFtuYye7IHqmztxMULDGABAsRF7p0TFyPn74qF5UK/sAILvdAstDMfc1dTW59jWB6j69Q1T2/T+DWsO+vrNaS+CZcphbmreU/6/A0=", + "debug_symbols": "pZRBboMwEEXv4jUL4xmDyVWqKnKIEyFZgByIVEW5eyf+gSaLShXd8ADz/ngw+KaO4TCf911/Gi5q93FTh9TF2J33cWj91A293L3dC7Vc7qcUgtxSL+NijT6FflK7fo6xUFcf5/zQZfR95uSTjOpChf4olMBTF8Pj7F782Pp3lWiRicpVt3/3a7v4dbPBZ01Pn/UmvzSLX7r/1d/kk2vW+est9blefFtu8u3qmy3+uv7M7/6nXPm2S29frKrVTl64y8cmH0sNlPIyBAYggAELVIBksMABkiItGA1ISiUwAAGcKxgLVABmYlzONE0GaQBzIcyFKBcizhXIAlWOJqQQGiJ0xOiIkcJIYXTE6IjREVc5muucyQ5ocrSVFFlbWwIGIEBSnEBS5POxFVADDmgyKg2UgKQ8/pKrT50/xPDcRE5z377sKdPXuIwsu86YhjYc5xQeq5nHZH2/AQ==", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index d4441d97a67..b55a09b2581 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -74,8 +74,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1ZzW7TQBDeje382PkTvEhMHVJurdT/v3dI00ZI3HgBfOPEjTsXkDggLtyQQOLNyLY7zZfxrJtQL2DEStHaO59nvpmd2V07Wt22/uKn7XVo+8D2GsYUjJm2Y/vRw1paoa6RL466BhwbNeAYVMhRQ5764hvWIKZRDTg2K55332tSqwYxbdeAY6cGHOOKc5M4Uo4mi1938eup2732bhAdMot3YB8yBW0KxiShmWQTxBjwpYohQD9s37F9A+QVLsRph9mtUv/2aLzVUautYv43+nHCKtZ/SfojP/pHLatnL1/qR1/IbsBw/JkAMPuA2XdgDgBz4MAcAubQgTkCzJEDcwyYYwfmBDAnDswpYE4dmDPAnDkw54A5d2AuAHPBMJQTfmomyzznXNZTxZcD8oVsN/3YHmtmT6nVFxbF7MfKa32nmtkjPjw+tP72CJMv+WgmC/OiHySLQEbza/aJXcDx3CIeNDc+9oJF3m17zrutP5h32b+Yd1wW5kU/Ns07zC2ed4GHWCzy7vL/elevvAuYLMyLfmyad9JHK4M7g+tzwGCuog9a8MFz/s49n0GzTWufzw/OAcZ2l8XH074y9xl/E5/HDv50bVorV3ctYPHEGFHM2ohnsg7IwnzVTmzvQ7CDuohHxPCn9n5g+yY8Q88PBftNZn+FtzCGMeK6AmGM8Kau9+x1Yn8mh97ZMarjaPmo0o4ebUn1OlTF/YCv1z7O3qaRH03BD7Ld8mN77b2C7MfK6951t1e0GB8eH1yLjKwtcB0KMs2u24KdtmCnjrooNhjLh9YH5iHNh+fzTNoRfPTxPYd/l6qaf+yHf+GsiTlg5uQ5GydZpIrnMIxzxPCvQOcLez1QxfxtMRmu/3x9xbU7EPAx0xWW6Grc41fM/CL8S9sbvz+swS+AsQbDS2dc5Bkyf/B5fo6V3vcpR0OQVbkfmBh8BB7c3yj/PfEZquKaUrYWBYyzFmTm/CDlK8+jrsBRl/jUE/BdwSeynYCsx2RSHXFemN+oi9ct4V/bXspviXujxNe+gO8BJmH+YBz6Dtsuf3i9Ev5NiT8Sv7J8HAj4fok/6OtgDdvof89hu+nA95n/hH+rlv5/t9d/25qBNcTXjLJ6MW2dOZJybqiK89JnMqypLrOjBTu4f+D6zGX0LO63PuM+2V7+eUhzTnXEWwhyxL+393guUeDbzi/ynE+m6XxrOp+Op1dX2Wz6iOk3jeY48WB/Nn56OcvG09F1am6f3Gdfev/FOjKN3qHxHRvxePZA/CfCLn6f7TX/RoL2DO5bCU47+hsdwliYr45J7974TYLwZDvOixxJloAMa9y0rr3HeKEu4hEx/Fd7T3OC3xHo+aFgv83sr/AWxvg3iUTAJwLezM8X0md79L3qd+Ebm0w/jnFulDs+6mpRUpPZdJKmz7L0OkvH99XVT8BUYUwxKAAA", - "debug_symbols": "pdTRqtswDAbgd/F1LmzLjq2+Siklbd1DIKQlJxmMknefVMk5Z4PByG7y2XV/RRjHL3Mrl+Xj3I/3x6c5HF/mMvXD0H+ch8e1m/vHSL++jOVHdubgGpO9AEIQotAKScgCvkErSBWUKihVUKqgVEGpglLFWVr0LM2BzSrVDaSzKlWOrFdBpXzLRrVVqV5is4qit6pTvQpqUJP05SmfWRTBqk71KqhBpX6QbdWkZhXFYFXeOcsDXwdQB7x/vFch1kFbB6kOdNsCitGqTvUqqEGNKlWEdW1MPRnneSqFD8a3o0IH6NlNZZzNYVyGoTE/umF5/+nz2Y1v526iVeq6jDeSCt77ofBobb7S9u9RgBoGcFs8/ns+Qs3HsCefUfPB2h35AKnmw57+Q9jycV8+bnm/q3+79b8nD6m+HxLueb+Fbf935Z2veZf/7/1/5E8066799NvluXKlqe8uQ9HpfRmv31bnn8+6Ui/f5/S4ltsyFa70dQPT4+ja3LiMp8bQd3psY5PiiS9DXorYuDbw1PEUbePQn1Zu7Bc=", + "bytecode": "H4sIAAAAAAAA/+1Zy27TQBSdie087KSJ4Edi6pCyK1Lfr39I00ZIrPgCvGLFjg9gAxILxIYdEkj8GZl2bnJyfcdJiUeVESNFY889c993Ho5W921n/tP2ObR9YHsNYwrGTNu3/XC7llbIa+hLR10DHRs10DGoUEcNeepL37AGPo1qoGOz4rj7XpNaNfBpuwY6dmqgY1xxbpKOlKPJ/Ned/3rqfq9dDKJBZvEO7CRT0KZgTBKaIBsnxoAvZQwO+m37ju0bQK9wIU47TG6V/PeGo92OWm0V63/HHwNWMf9r4h/54T9sWT4H+ZI/2kJyA4bjcwLAHALm0IE5AsyRA3MMmGMH5gQwJw7MKWBOHZgzwJw5MOeAOXdgLgBz4cBcAubSgbkCzBXDUE74qZks85xzWU8VLwdkC8lu+pE90kyeUqsXFsXkx8prfaeaySN9uH9o/e0RJl/qoxktzIt2EC0CGsXX7BMvAcdzi/Sg2PjYC+Z5t+c573YfMe+yfzHvOC3Mi3Y8NO8wt3jeBR58Mc+76//rXb3yLmC0MC/a8dC8kz5aGdwFPF8CBnMVbdCCDZ7zd+b5DJo9tPZ5fDAG6NuXzD+e9pWZT/8b/zx16E/PprVytWgB8yf6iHzWRjyjdYAW5qtyYvseghzkRXpEDH9u3/u2b8Icmj8Q5DeZ/BW9hTH0EecVCGOEN3V9YJ8T+zM59NGOUR1Hy6lKO3qUJdXrQBX3A75e+zh7m0Z2NAU7SHbLj+yN9wqSHyuve9dir2gxfbh/cC0ytLag60CgafbcFuS0BTl15EW+QV9uWx+YhxQPz+eZtCPY6ON7Dv8uVbX+sR/9C2dNzAETk1dsnGiRKp7D0M8Rw78Fnq/tc18V85evoXjGCwR8zHhJ94Ey3RsCL677G9sb2z5voF8AYw2GjwQ86tlg9ki+6TM5WFtl51/K0ZDR9u34cLs2Mv75Anpw/+C5bp0vlCr6TroDYL7w9abJ5iMN16KQ6awFmjk/bJKvXUFHXWJTT8B3BfkkOwFaj/GS8hvxrtp8Z3spvyV7GlvYkzB7dIk93TX28Hol/PsSeyT9yup1R8D3SuxBW3c2kI32dx2ymw784r7E8B/U0v5fTD+cX7ZmEO4x1gzMOb5mSPFAPI9fX8BjXCh+A4ZH/0prBo+VFuTguo7fGTiN5uJ+69Pv473ln4cUc6ox3kKgI/6TfcdziQLb9v9Sz9l4ks52J7PJaHJzk00nTxh/0yjGiQf509Hz62k2mgxvU/P6bJ186f6LdWQa3aHxjo144hcx/FfCzn/f7DP/RoLyDO5nCU47+jsewliYr45Jd2/8JkF4kh3nRR2JlgANa9y0rn1HfyEv0iNi+B/2nWKC3xFo/kCQ32byV/QWxvg3iUTAJwLexOc78bM92l71XfhOJuOPY1w3yh0fdTUvqfF0Mk7TF1l6m6WjdXX1B9ekZP8xKAAA", + "debug_symbols": "pdTfiuowEAbwd8l1LzL502R8FRGpGpdCqdJtDxyk735mnIm7Z2Fh6d74S4zf1xJiHuZSTsvbsR+vt3ez2z/MaeqHoX87DrdzN/e3kb59GMsfGcwOGpOd4IUgRKEVkpAFfIJWkBaUFpQWlBaUFpQWlBawtOhYmnuWagOLIlgVVKdSd2SDGtVWpb6WzSqKzqqgOtWrQU3yXo7yiUXRWxVUp3qV8pmNaqsmNasoBupDFlSn8t5ZHoQ6iHXQ1kGqgyybF1CMVgXVqV4NalSp0a9rY+q5OM5TKXwsPh0UOj73birjbHbjMgyN+dMNy/NH7/dufDp3E63SG5XxQlLhtR8Kj9bmI22/j3pfw97DKx5/no++5mPYks+o+WDthnwIqeYjbMrHV95tyb/2L4QteZ/q833CLc+3/rV/m/Lgah7y757/JX+gWXfup/+uvpWbpr47DUWn12U8f1qd/97rSr0679PtXC7LVLjp4/6kjz20uYGMh8bQ/2zfxibFA19lvBSxgTbwFHiKtgF0h5Vf7B8=", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_0.snap index d4441d97a67..b55a09b2581 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_0.snap @@ -74,8 +74,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1ZzW7TQBDeje382PkTvEhMHVJurdT/v3dI00ZI3HgBfOPEjTsXkDggLtyQQOLNyLY7zZfxrJtQL2DEStHaO59nvpmd2V07Wt22/uKn7XVo+8D2GsYUjJm2Y/vRw1paoa6RL466BhwbNeAYVMhRQ5764hvWIKZRDTg2K55332tSqwYxbdeAY6cGHOOKc5M4Uo4mi1938eup2732bhAdMot3YB8yBW0KxiShmWQTxBjwpYohQD9s37F9A+QVLsRph9mtUv/2aLzVUautYv43+nHCKtZ/SfojP/pHLatnL1/qR1/IbsBw/JkAMPuA2XdgDgBz4MAcAubQgTkCzJEDcwyYYwfmBDAnDswpYE4dmDPAnDkw54A5d2AuAHPBMJQTfmomyzznXNZTxZcD8oVsN/3YHmtmT6nVFxbF7MfKa32nmtkjPjw+tP72CJMv+WgmC/OiHySLQEbza/aJXcDx3CIeNDc+9oJF3m17zrutP5h32b+Yd1wW5kU/Ns07zC2ed4GHWCzy7vL/elevvAuYLMyLfmyad9JHK4M7g+tzwGCuog9a8MFz/s49n0GzTWufzw/OAcZ2l8XH074y9xl/E5/HDv50bVorV3ctYPHEGFHM2ohnsg7IwnzVTmzvQ7CDuohHxPCn9n5g+yY8Q88PBftNZn+FtzCGMeK6AmGM8Kau9+x1Yn8mh97ZMarjaPmo0o4ebUn1OlTF/YCv1z7O3qaRH03BD7Ld8mN77b2C7MfK6951t1e0GB8eH1yLjKwtcB0KMs2u24KdtmCnjrooNhjLh9YH5iHNh+fzTNoRfPTxPYd/l6qaf+yHf+GsiTlg5uQ5GydZpIrnMIxzxPCvQOcLez1QxfxtMRmu/3x9xbU7EPAx0xWW6Grc41fM/CL8S9sbvz+swS+AsQbDS2dc5Bkyf/B5fo6V3vcpR0OQVbkfmBh8BB7c3yj/PfEZquKaUrYWBYyzFmTm/CDlK8+jrsBRl/jUE/BdwSeynYCsx2RSHXFemN+oi9ct4V/bXspviXujxNe+gO8BJmH+YBz6Dtsuf3i9Ev5NiT8Sv7J8HAj4fok/6OtgDdvof89hu+nA95n/hH+rlv5/t9d/25qBNcTXjLJ6MW2dOZJybqiK89JnMqypLrOjBTu4f+D6zGX0LO63PuM+2V7+eUhzTnXEWwhyxL+393guUeDbzi/ynE+m6XxrOp+Op1dX2Wz6iOk3jeY48WB/Nn56OcvG09F1am6f3Gdfev/FOjKN3qHxHRvxePZA/CfCLn6f7TX/RoL2DO5bCU47+hsdwliYr45J7974TYLwZDvOixxJloAMa9y0rr3HeKEu4hEx/Fd7T3OC3xHo+aFgv83sr/AWxvg3iUTAJwLezM8X0md79L3qd+Ebm0w/jnFulDs+6mpRUpPZdJKmz7L0OkvH99XVT8BUYUwxKAAA", - "debug_symbols": "pdTRqtswDAbgd/F1LmzLjq2+Siklbd1DIKQlJxmMknefVMk5Z4PByG7y2XV/RRjHL3Mrl+Xj3I/3x6c5HF/mMvXD0H+ch8e1m/vHSL++jOVHdubgGpO9AEIQotAKScgCvkErSBWUKihVUKqgVEGpglLFWVr0LM2BzSrVDaSzKlWOrFdBpXzLRrVVqV5is4qit6pTvQpqUJP05SmfWRTBqk71KqhBpX6QbdWkZhXFYFXeOcsDXwdQB7x/vFch1kFbB6kOdNsCitGqTvUqqEGNKlWEdW1MPRnneSqFD8a3o0IH6NlNZZzNYVyGoTE/umF5/+nz2Y1v526iVeq6jDeSCt77ofBobb7S9u9RgBoGcFs8/ns+Qs3HsCefUfPB2h35AKnmw57+Q9jycV8+bnm/q3+79b8nD6m+HxLueb+Fbf935Z2veZf/7/1/5E8066799NvluXKlqe8uQ9HpfRmv31bnn8+6Ui/f5/S4ltsyFa70dQPT4+ja3LiMp8bQd3psY5PiiS9DXorYuDbw1PEUbePQn1Zu7Bc=", + "bytecode": "H4sIAAAAAAAA/+1Zy27TQBSdie087KSJ4Edi6pCyK1Lfr39I00ZIrPgCvGLFjg9gAxILxIYdEkj8GZl2bnJyfcdJiUeVESNFY889c993Ho5W921n/tP2ObR9YHsNYwrGTNu3/XC7llbIa+hLR10DHRs10DGoUEcNeepL37AGPo1qoGOz4rj7XpNaNfBpuwY6dmqgY1xxbpKOlKPJ/Ned/3rqfq9dDKJBZvEO7CRT0KZgTBKaIBsnxoAvZQwO+m37ju0bQK9wIU47TG6V/PeGo92OWm0V63/HHwNWMf9r4h/54T9sWT4H+ZI/2kJyA4bjcwLAHALm0IE5AsyRA3MMmGMH5gQwJw7MKWBOHZgzwJw5MOeAOXdgLgBz4cBcAubSgbkCzBXDUE74qZks85xzWU8VLwdkC8lu+pE90kyeUqsXFsXkx8prfaeaySN9uH9o/e0RJl/qoxktzIt2EC0CGsXX7BMvAcdzi/Sg2PjYC+Z5t+c573YfMe+yfzHvOC3Mi3Y8NO8wt3jeBR58Mc+76//rXb3yLmC0MC/a8dC8kz5aGdwFPF8CBnMVbdCCDZ7zd+b5DJo9tPZ5fDAG6NuXzD+e9pWZT/8b/zx16E/PprVytWgB8yf6iHzWRjyjdYAW5qtyYvseghzkRXpEDH9u3/u2b8Icmj8Q5DeZ/BW9hTH0EecVCGOEN3V9YJ8T+zM59NGOUR1Hy6lKO3qUJdXrQBX3A75e+zh7m0Z2NAU7SHbLj+yN9wqSHyuve9dir2gxfbh/cC0ytLag60CgafbcFuS0BTl15EW+QV9uWx+YhxQPz+eZtCPY6ON7Dv8uVbX+sR/9C2dNzAETk1dsnGiRKp7D0M8Rw78Fnq/tc18V85evoXjGCwR8zHhJ94Ey3RsCL677G9sb2z5voF8AYw2GjwQ86tlg9ki+6TM5WFtl51/K0ZDR9u34cLs2Mv75Anpw/+C5bp0vlCr6TroDYL7w9abJ5iMN16KQ6awFmjk/bJKvXUFHXWJTT8B3BfkkOwFaj/GS8hvxrtp8Z3spvyV7GlvYkzB7dIk93TX28Hol/PsSeyT9yup1R8D3SuxBW3c2kI32dx2ymw784r7E8B/U0v5fTD+cX7ZmEO4x1gzMOb5mSPFAPI9fX8BjXCh+A4ZH/0prBo+VFuTguo7fGTiN5uJ+69Pv473ln4cUc6ox3kKgI/6TfcdziQLb9v9Sz9l4ks52J7PJaHJzk00nTxh/0yjGiQf509Hz62k2mgxvU/P6bJ186f6LdWQa3aHxjo144hcx/FfCzn/f7DP/RoLyDO5nCU47+jsewliYr45Jd2/8JkF4kh3nRR2JlgANa9y0rn1HfyEv0iNi+B/2nWKC3xFo/kCQ32byV/QWxvg3iUTAJwLexOc78bM92l71XfhOJuOPY1w3yh0fdTUvqfF0Mk7TF1l6m6WjdXX1B9ekZP8xKAAA", + "debug_symbols": "pdTfiuowEAbwd8l1LzL502R8FRGpGpdCqdJtDxyk735mnIm7Z2Fh6d74S4zf1xJiHuZSTsvbsR+vt3ez2z/MaeqHoX87DrdzN/e3kb59GMsfGcwOGpOd4IUgRKEVkpAFfIJWkBaUFpQWlBaUFpQWlBawtOhYmnuWagOLIlgVVKdSd2SDGtVWpb6WzSqKzqqgOtWrQU3yXo7yiUXRWxVUp3qV8pmNaqsmNasoBupDFlSn8t5ZHoQ6iHXQ1kGqgyybF1CMVgXVqV4NalSp0a9rY+q5OM5TKXwsPh0UOj73birjbHbjMgyN+dMNy/NH7/dufDp3E63SG5XxQlLhtR8Kj9bmI22/j3pfw97DKx5/no++5mPYks+o+WDthnwIqeYjbMrHV95tyb/2L4QteZ/q833CLc+3/rV/m/Lgah7y757/JX+gWXfup/+uvpWbpr47DUWn12U8f1qd/97rSr0679PtXC7LVLjp4/6kjz20uYGMh8bQ/2zfxibFA19lvBSxgTbwFHiKtgF0h5Vf7B8=", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index d4441d97a67..b55a09b2581 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/databus_two_calldata/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -74,8 +74,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1ZzW7TQBDeje382PkTvEhMHVJurdT/v3dI00ZI3HgBfOPEjTsXkDggLtyQQOLNyLY7zZfxrJtQL2DEStHaO59nvpmd2V07Wt22/uKn7XVo+8D2GsYUjJm2Y/vRw1paoa6RL466BhwbNeAYVMhRQ5764hvWIKZRDTg2K55332tSqwYxbdeAY6cGHOOKc5M4Uo4mi1938eup2732bhAdMot3YB8yBW0KxiShmWQTxBjwpYohQD9s37F9A+QVLsRph9mtUv/2aLzVUautYv43+nHCKtZ/SfojP/pHLatnL1/qR1/IbsBw/JkAMPuA2XdgDgBz4MAcAubQgTkCzJEDcwyYYwfmBDAnDswpYE4dmDPAnDkw54A5d2AuAHPBMJQTfmomyzznXNZTxZcD8oVsN/3YHmtmT6nVFxbF7MfKa32nmtkjPjw+tP72CJMv+WgmC/OiHySLQEbza/aJXcDx3CIeNDc+9oJF3m17zrutP5h32b+Yd1wW5kU/Ns07zC2ed4GHWCzy7vL/elevvAuYLMyLfmyad9JHK4M7g+tzwGCuog9a8MFz/s49n0GzTWufzw/OAcZ2l8XH074y9xl/E5/HDv50bVorV3ctYPHEGFHM2ohnsg7IwnzVTmzvQ7CDuohHxPCn9n5g+yY8Q88PBftNZn+FtzCGMeK6AmGM8Kau9+x1Yn8mh97ZMarjaPmo0o4ebUn1OlTF/YCv1z7O3qaRH03BD7Ld8mN77b2C7MfK6951t1e0GB8eH1yLjKwtcB0KMs2u24KdtmCnjrooNhjLh9YH5iHNh+fzTNoRfPTxPYd/l6qaf+yHf+GsiTlg5uQ5GydZpIrnMIxzxPCvQOcLez1QxfxtMRmu/3x9xbU7EPAx0xWW6Grc41fM/CL8S9sbvz+swS+AsQbDS2dc5Bkyf/B5fo6V3vcpR0OQVbkfmBh8BB7c3yj/PfEZquKaUrYWBYyzFmTm/CDlK8+jrsBRl/jUE/BdwSeynYCsx2RSHXFemN+oi9ct4V/bXspviXujxNe+gO8BJmH+YBz6Dtsuf3i9Ev5NiT8Sv7J8HAj4fok/6OtgDdvof89hu+nA95n/hH+rlv5/t9d/25qBNcTXjLJ6MW2dOZJybqiK89JnMqypLrOjBTu4f+D6zGX0LO63PuM+2V7+eUhzTnXEWwhyxL+393guUeDbzi/ynE+m6XxrOp+Op1dX2Wz6iOk3jeY48WB/Nn56OcvG09F1am6f3Gdfev/FOjKN3qHxHRvxePZA/CfCLn6f7TX/RoL2DO5bCU47+hsdwliYr45J7974TYLwZDvOixxJloAMa9y0rr3HeKEu4hEx/Fd7T3OC3xHo+aFgv83sr/AWxvg3iUTAJwLezM8X0md79L3qd+Ebm0w/jnFulDs+6mpRUpPZdJKmz7L0OkvH99XVT8BUYUwxKAAA", - "debug_symbols": "pdTRqtswDAbgd/F1LmzLjq2+Siklbd1DIKQlJxmMknefVMk5Z4PByG7y2XV/RRjHL3Mrl+Xj3I/3x6c5HF/mMvXD0H+ch8e1m/vHSL++jOVHdubgGpO9AEIQotAKScgCvkErSBWUKihVUKqgVEGpglLFWVr0LM2BzSrVDaSzKlWOrFdBpXzLRrVVqV5is4qit6pTvQpqUJP05SmfWRTBqk71KqhBpX6QbdWkZhXFYFXeOcsDXwdQB7x/vFch1kFbB6kOdNsCitGqTvUqqEGNKlWEdW1MPRnneSqFD8a3o0IH6NlNZZzNYVyGoTE/umF5/+nz2Y1v526iVeq6jDeSCt77ofBobb7S9u9RgBoGcFs8/ns+Qs3HsCefUfPB2h35AKnmw57+Q9jycV8+bnm/q3+79b8nD6m+HxLueb+Fbf935Z2veZf/7/1/5E8066799NvluXKlqe8uQ9HpfRmv31bnn8+6Ui/f5/S4ltsyFa70dQPT4+ja3LiMp8bQd3psY5PiiS9DXorYuDbw1PEUbePQn1Zu7Bc=", + "bytecode": "H4sIAAAAAAAA/+1Zy27TQBSdie087KSJ4Edi6pCyK1Lfr39I00ZIrPgCvGLFjg9gAxILxIYdEkj8GZl2bnJyfcdJiUeVESNFY889c993Ho5W921n/tP2ObR9YHsNYwrGTNu3/XC7llbIa+hLR10DHRs10DGoUEcNeepL37AGPo1qoGOz4rj7XpNaNfBpuwY6dmqgY1xxbpKOlKPJ/Ned/3rqfq9dDKJBZvEO7CRT0KZgTBKaIBsnxoAvZQwO+m37ju0bQK9wIU47TG6V/PeGo92OWm0V63/HHwNWMf9r4h/54T9sWT4H+ZI/2kJyA4bjcwLAHALm0IE5AsyRA3MMmGMH5gQwJw7MKWBOHZgzwJw5MOeAOXdgLgBz4cBcAubSgbkCzBXDUE74qZks85xzWU8VLwdkC8lu+pE90kyeUqsXFsXkx8prfaeaySN9uH9o/e0RJl/qoxktzIt2EC0CGsXX7BMvAcdzi/Sg2PjYC+Z5t+c573YfMe+yfzHvOC3Mi3Y8NO8wt3jeBR58Mc+76//rXb3yLmC0MC/a8dC8kz5aGdwFPF8CBnMVbdCCDZ7zd+b5DJo9tPZ5fDAG6NuXzD+e9pWZT/8b/zx16E/PprVytWgB8yf6iHzWRjyjdYAW5qtyYvseghzkRXpEDH9u3/u2b8Icmj8Q5DeZ/BW9hTH0EecVCGOEN3V9YJ8T+zM59NGOUR1Hy6lKO3qUJdXrQBX3A75e+zh7m0Z2NAU7SHbLj+yN9wqSHyuve9dir2gxfbh/cC0ytLag60CgafbcFuS0BTl15EW+QV9uWx+YhxQPz+eZtCPY6ON7Dv8uVbX+sR/9C2dNzAETk1dsnGiRKp7D0M8Rw78Fnq/tc18V85evoXjGCwR8zHhJ94Ey3RsCL677G9sb2z5voF8AYw2GjwQ86tlg9ki+6TM5WFtl51/K0ZDR9u34cLs2Mv75Anpw/+C5bp0vlCr6TroDYL7w9abJ5iMN16KQ6awFmjk/bJKvXUFHXWJTT8B3BfkkOwFaj/GS8hvxrtp8Z3spvyV7GlvYkzB7dIk93TX28Hol/PsSeyT9yup1R8D3SuxBW3c2kI32dx2ymw784r7E8B/U0v5fTD+cX7ZmEO4x1gzMOb5mSPFAPI9fX8BjXCh+A4ZH/0prBo+VFuTguo7fGTiN5uJ+69Pv473ln4cUc6ox3kKgI/6TfcdziQLb9v9Sz9l4ks52J7PJaHJzk00nTxh/0yjGiQf509Hz62k2mgxvU/P6bJ186f6LdWQa3aHxjo144hcx/FfCzn/f7DP/RoLyDO5nCU47+jsewliYr45Jd2/8JkF4kh3nRR2JlgANa9y0rn1HfyEv0iNi+B/2nWKC3xFo/kCQ32byV/QWxvg3iUTAJwLexOc78bM92l71XfhOJuOPY1w3yh0fdTUvqfF0Mk7TF1l6m6WjdXX1B9ekZP8xKAAA", + "debug_symbols": "pdTfiuowEAbwd8l1LzL502R8FRGpGpdCqdJtDxyk735mnIm7Z2Fh6d74S4zf1xJiHuZSTsvbsR+vt3ez2z/MaeqHoX87DrdzN/e3kb59GMsfGcwOGpOd4IUgRKEVkpAFfIJWkBaUFpQWlBaUFpQWlBawtOhYmnuWagOLIlgVVKdSd2SDGtVWpb6WzSqKzqqgOtWrQU3yXo7yiUXRWxVUp3qV8pmNaqsmNasoBupDFlSn8t5ZHoQ6iHXQ1kGqgyybF1CMVgXVqV4NalSp0a9rY+q5OM5TKXwsPh0UOj73birjbHbjMgyN+dMNy/NH7/dufDp3E63SG5XxQlLhtR8Kj9bmI22/j3pfw97DKx5/no++5mPYks+o+WDthnwIqeYjbMrHV95tyb/2L4QteZ/q833CLc+3/rV/m/Lgah7y757/JX+gWXfup/+uvpWbpr47DUWn12U8f1qd/97rSr0679PtXC7LVLjp4/6kjz20uYGMh8bQ/2zfxibFA19lvBSxgTbwFHiKtgF0h5Vf7B8=", "file_map": { "50": { "source": "// An simple program demonstrating two calldata array inputs and a single return data array. As an arbitrary example,\n// the return data is computed as a linear combination of the calldata.\nfn main(\n mut x: [u32; 4],\n y: call_data(0) [u32; 3],\n z: call_data(1) [u32; 4],\n) -> return_data [u32; 4] {\n let mut result = [0; 4];\n for i in 0..3 {\n let idx = x[i];\n result[idx] = y[idx] + z[idx];\n }\n result[x[3]] = z[x[3]];\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index ef9fcc41263..b57089f820b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -93,8 +93,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "nZbNbuowEIXfJess7PHfuK9SoYrStIoUBZTCla4q3v167DmhXVyp8obvM3EOZhibfA1v0+vt42Ve38+fw9Pz1/C6zcsyf7ws59PxOp/X8u7XYOSF4/Bkx4FTAzfkimwabAM1uAbfECqsKSRhVCYlK3OjNUqrJKVTeqXmWc2zmmc1z2oeaR5pHmkelTwn9MqgjI2uXPfCMg7Ckh+FrMyN3iitsuQlYZnPwjI/C3NjMEqrlKIZEQfxkACJEPkRpJqBIVklGoiFEMRBPCRAIgTJEclRkqVSyUAshCCSI9VKMlnKxVbfYYLIp0sF2UMCJEIShCESKPWsLVbFQgjiIB4SdBk5QhKEIbpUMgZiIQRxkFh/TZJurZSUKllF+rWJhUgKiziIhwRIhCQI134h6Vuh9G2lVZLSKb0yKKMy174lZ5SyrCxCEAfxENlLRiRCEoQhWUUavomtO4M8KZ3SK4MyKpOSlSUx3O/jgDPn5bpNkxw53w6hcjRdjtu0Xoen9bYs4/DnuNzqpM/Lca28HrdytaxoWt8KS+D7vExi9/Fxt/n/raXHst5Nxrs9IPw6gYgJCcRdCc7iGxS1PQks3dcSmLgrwbs9IZmehGwYCZlyR4IzAZV0JrquhIQ1lJqGnoRyzu4JqaeSjvaOcmV39SR42hO866pkzBYJiVJPQmKzJ7DvSsj7t2CKPQksfwdI6KokPyrJoWsNJvtHR3XVwZpHT7rUtTfDfkZxzF0J6bG7+WdXH8roeJq3H49/d8na5uPrMunw/baevl29/r3gCh4fL9v5NL3dtkmSHs+Q5eWZYhrLBx/GofxPPCczsjnIc18ZZB6tcTKydaIdKbrDXdb1Dw==", + "bytecode": "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", + "debug_symbols": "nZbNbuowEIXfJess7PHfuK9SoSqloYoUBZTCla4Q73498ZzQLq5UecP3mTgHM4xN7t3H+H77fJuW0/mre3m9d+/rNM/T59t8Pg7X6byUd++dkReO3YvtO04VXJE3ZFNhK6jCVfiKsMGaQhJGZVKyMldao7RKUjqlV2qe1TyreVbzrOaR5pHmkeZRyXNCrwzKWOnKdS8s4yAs+VHIylzpjdIqS14SlvksLPOzMFcGo7RKKZoRcRAPCZAIkR9BqhkYklWigVgIQRzEQwIkQpAckRwlWSqVDMRCCCI5Uq0kk6VcbPUdJoh8ulSQPSRAIiRB5NOljFuDiWwttomFEMRBPCToMnKEJAhDdKlkDMRCCOIgkpNEEoQhWUU6torksAhBHMRDAiRCEoS3jiHpXKF07karJKVTemVQRqUsrLQWOQOxEII4iGwnIxIgEZIgDMkq0vRV7LY7yJPSKb0yKKMyKVlZEsPj0Xc4d96u6zjKsfPtICrH02VYx+XavSy3ee67P8N82yZ9XYZl43VYy9WyonH5KCyBp2kexR79827z/1tLn2W9m4x3e0D4dQIRExKImxKcxTcoalsSWBqxJjBxU4J3e0IyLQnZMBIy5YYEZwIq6Ux0TQkJayg1DS0J5azdE1JLJR3tHeXK7mpJ8LQneNdUyZgtEhKlloTEZk9g35SQ92/BFFsS+FkHDm0J8u+CNbT1g3l2lGuqpMn+2ZO+aW+m597ktt0d9lOO48+OOpTRcJzWH4+AD8lap+F9HnV4ui3Hb1evfy+4gkfIy3o+jh+3dZSk53NkeXmlmPqy9EPflf+J12R6Ngd59iuDzL01TkZ2m2h7iu7wkHX9Aw==", "file_map": { "50": { "source": "// The code below is inspired by [compute_encrypted_log](https://github.com/AztecProtocol/aztec-packages/blob/b42756bc10175fea9eb60544759e9dbe41ae5e76/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr#L111)\n// which resulted in a bytecode size blowup when compiled to ACIR, see https://github.com/noir-lang/noir/issues/6929\n// The issue was around `encrypted_bytes[offset + i]` generating large amounts of gates, as per the `flamegraph.sh` tool in aztec-packages.\n// The details around encryption and addresses have been stripped away, focusing on just copying bytes of equivalent size arrays.\n\n// Original values which resulted in huge bytecode even on this example (500K long SSA)\n// global PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 18;\n// global ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n// global EPH_PK_SIZE: u32 = 32;\n// global HEADER_SIZE: u32 = 48;\n// global OVERHEAD_PADDING: u32 = 15;\n\n// Using the same formulas with smaller numbers; the effect is the same, but the SSA is more manageable.\nglobal PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 4;\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 5;\nglobal EPH_PK_SIZE: u32 = 3;\nglobal HEADER_SIZE: u32 = 2;\nglobal OVERHEAD_PADDING: u32 = 1;\n\n// Unused because encryption didn't play a role:\n// global OVERHEAD_SIZE: u32 = EPH_PK_SIZE + HEADER_SIZE + OVERHEAD_PADDING;\n// global PLAINTEXT_LENGTH_SIZE: u32 = 2;\n// global MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n// ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\nglobal BODY_SIZE: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - EPH_PK_SIZE - HEADER_SIZE - OVERHEAD_PADDING;\n\nfn main(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> pub [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] {\n compute_encrypted_log(\n eph_pk_bytes,\n incoming_header_ciphertext,\n incoming_body_ciphertext,\n flag,\n )\n}\n\nfn compute_encrypted_log(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> [u8; M] {\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // NOTE: Adding a conditional variable can result in the array being fully copied, item by item,\n // in each iteration in the second loop that copies incoming_body_ciphertext into encrypted_bytes.\n // Depending on where we place the `flag` we either get the item-by-item copying (blowup),\n // or just a single array item gets read and a new array constructed in each iteration (no blowup).\n\n // If the `flag` is here then it blows up.\n if flag {\n // eph_pk\n for i in 0..EPH_PK_SIZE {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += EPH_PK_SIZE;\n\n // If the `flag` is here then it blows up.\n // if flag {\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // If the `flag` is here then it does not blow up.\n //if flag {\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n\n // NOTE: This made the bytecode size blowup disappear in aztec packages,\n // but in this reproduction the size seems to be statically known regardless.\n // let size = M - 32 - HEADER_SIZE - OVERHEAD_PADDING;\n\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n }\n\n encrypted_bytes\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_0.snap index 1a259f77eef..1581780d852 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_0.snap @@ -93,8 +93,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/91aO48jRRDuscfv9eMevOE/eOzxKzuJvb3be+7eHTEae+2QAImEaHISfgABCRERQgIRISJyIiJyEpBOIkAkTO92rb8pV49396bXmmupNePub+rVVV3VM/bUWfsg6Z6599lVj5dVuhH2jrn2X60FOdLqu5LRK4CMpRxl1LKVlNt1LxfApn7ONm04tmmlADatFkDGWgFkrBdAxkYBZGwWQMZWAWTcK4CMbQcyupCzo/LNOyRj19zray/pN5J+M+m3kn476W8k/c2kv5X0t5P+TtLfTfp7SX9fndWK5wRQeV0s6ISuE6ZOQnqT15uo3qT0JqCDTDuxdhK9CB14Pjeh1HohbpsbSrglmM+x8AgajG+e9Kf9cSgVDDnKP2wYmhU39FdEv+qGfr9m6BzEa/qoC/EtMxx/Bg869wBzz4K5D5j7FswhYA4tmAeAeWDBPATMQwvmEWAeWTCPAfPYgnkCmCcWzFPAPLVgjgBzZMEcA+bYgnkGmGcWzHPAPLdgXgDmBWB0awBeqbxjOBw7joFhW6X9XtKt5oZ36DF+Sq1tjnPEv6mc7jeBx/iRPNw+lA/ahInX8nhszo839aC5CszR+uqcdwA47lskB62Ni9yU+N3Msd8Nduh3w9fR7/icH2/qcVm/Q9/ifld2YIvE7+aO/W62Q7+LXke/K7M5P97U47J+hzapsDl6uawb5WJN4xjofQTPox+jfp6gn1vfHo0aTIe86+XL7gt87XB9fLDnAbOPm5yzto8L+2v73LLIT/e61WJ13srMnmgjslkd8WyuAXN+nObTNL994IO0SI4Kwx+Z33TurcIz9HxP4F9l/FNyC2NoI06rLIwRXsf1obnXZ3Y6g34Yr+nlfQbVbd8N/QHRv+uG/unLOR1jf5JN1eae7+XHr0/7KO2/xAN5u8l/Qf+q+c9RLZCZ/9A+PD/U3ciz8hh9lKcu2IfWsiHMEa2m+V0BWoivg46Ix3t6HseW5toTaHLfbQj64BjuHR8z3aQ67SJ+hHR7glxVxqeaAx/H9WO/pzbjgXjR+lDe/sRcNfZHJp8r/yX6/L1mTvQDXgOi/lrPT2Hc5vtYP1JO4r79G9D8zNx3Bd5VCz+1hR/hW8CnLNBH+RH/ubnqdfw7Qz4eh3uCfFgbU47rMn74LKeFtsW9o85kJ3wMsr8091LdSnqQL/kwl2dO0nL8A3JwO2FN7IGsSq31RjzWTbp3BHwbMGSzHsNz+3Nf4jbX7S6TVfIvXCOix/3rC3NF/8rSH31oPz67Sj7UZrRKwF/yf+5DhP8S5MvyIVqXXfgQ2uQiPoT4y/oQ2SzLh6QcyPlI52T0r/04jSe+Nv/C9UX8V+Yq+Zfk49IexffcqoCXfJzwXwsySPnVZ/LxsyPPpxwvyZfl44T/BuRrmUQq7fHnZzG1af88aw++p/gqe08pqc34p3vUl8a+BX07XtqGkk/gGK/zyoI8jt+9zLLsk+WPhP8O9L9h9Jfe/2O9871K20naT70M3oT/CWj+APdUN3YFWrSPtGC+JszTHPoIr5vQLySf8tj9Hsgo4VtMT8L/bK4Y89wWvwDmJeMr1XdlGCtZ5NymV1dt+smehTeuLcaWbR/5VdBHypW0drvIlalzZpzWO8uGunGbZ9VnUj7EPJp1XuTrtu2dMuUpKYbxvEsxLMUJjyFcbx5Dkp0Qz/NSG2SQ8FjfI/53c71obYg2uWpdI+nfsfDG+MB1r1v0+QP0yYoPWpddxAfalcdHlg114zbvCni0Jdmsx/BS7GB88Np+21mYx4d07sUzvUu7T6brP7rRmpMf8ebDPOL/Mr8xfhXodueKcq4mUbAaRqtoFJ2chIvoJqOvG61xywH/cBRNFtEkCGZhsAyD0XXzX4zG80UiRH8Z6J+Dbfyl7yIYx7rRtxX89oJ4rKMQ/y9hk/6fueffzpCfxjU9O86zXE9pCGN+nB6TvsngtyrCE+9mvCkjzbVgDvcY3fbMb7QX0iI5KgxfMwRoTfD7Ej3fE/jXGf+U3MIY/1bVEvAtAV+Fh87rq3hNK+9vDac8GX0c47KR77iIq8F0Op4N5v1wcrJYnYTD647raDKcLgbhYjIfDaPh+Nr3tUkwHy/Hg2ictNliGWzj/z+eiTjY8TYAAA==", - "debug_symbols": "nZbLbupADIbfJess5uaxp69SoSqFUEWKAkrhSEeId6/N2KEsupkN3xeG/Hiuya07jJ/Xr49pOZ6+u7f3W/e5TvM8fX3Mp/1wmU4Lf3vrnHxQ7t5C3xFWUEV5oLgKXxEqYkWqgIqaUmpKqSmlpnjnlF4ZlFHJUVEIyqzESs/tScjXIOT4LCyVwSm9kvNRyPkkTEpQZiUqOa8IS2V0Sq8MyqhMSs7zTiSboAmZlPofySm9Mii1xqSZCZRZiUqtMWmNoDWC1gic571INEkmYCJlyoADmpBJUcnOhIO9jH4OJtEkmYBJNkETMikq6EwsGS0ZJVlmGJMJmGQTyZHZJ/mxTDOBfZNN5N9l5mUZVykqspSreJNgIoEyB7Kkq4BJNkETMim1jCCru4o3CSbRJJmASTZBFe8eqzx4r5SUIhJNkgmYyLZzImhCJkVFdkcVbxIe+yjI/ngwKUGZlagkZamU/QH3e9/ZafJxWcdRDpNfxwsfOudhHZdL97Zc57nv/g3z9fGj7/OwPHgZVm7lisblwOTA4zSPYvf+ebf7+1ae1aJ38xDHLQBeE/zfCdy3YAmBmhKitx6w+pYEkmVYEyhQU0KKWwK6loTiyBJKKA0J0YGNZHS5ZSR5IK2GyCdpUw34THDQlFDSMyE19QJwS8CW2YxhW9UxxKZepLAlpNg0m7l4S8DQNBdIbkugppHEsvWCQm5JIHksWELTSNJzJAly096E7YyiXJoS8Lm76XVF7fhq2E/ry4vdXbLWaficR708Xpf9r9bL/7O12IvheT3tx8N1HSXp+XbIH+8hQR9y3vUdPy/e0fXkdvJ2Jk0x9iGSXHq55EIDwu4uhf0A", + "bytecode": "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", + "debug_symbols": "nZbLbuowEED/Jess/J5xf6VCVQqhihQFlMKVrhD/3hlmJpRFN95wTggcHOxYuXWH8fP69TEtx9N39/Z+6z7XaZ6nr4/5tB8u02mhd2+d4xcs3VvoOwQBCuoD1Qm8IAiiIAmyQCpVKlUqVSreOaVXBmVUUioys7IoQejpfGLScWZSvjCrMDilV1IfmFGZlNRHZlGCknqVWYXRKb0yKKMyKbN0Y1FqL6KyCpNTemVQRqX2UlYWJSh1fEnHl3V8WceXqecdSzRJJtmEmt6zgAmaVJXiTCjseWZKMIkmySSbFBMwQZOqAs7EymBl4DLPMiSTbFJMuMMrAPnDvAQw2zvFhH+dZ5+XsEhV4WUs4k3413nKeDGLJJNsUkzABE2qDCPwyhbxJsEkmiSTbFJMQMVzB1m8STCJJsmEO5WlmIAJmlQVvjdEvEl43EWB744HkzIrixKUqKxCvjvy/d53tpd8XNZx5K3k1+ZCW855WMfl0r0t13nuu3/DfH186Ps8LA9ehpXO0toclwORgsdpHtnu/fPb7u+v0rxW/Tb9yXEL5NeC/7tA1xasELCpEL1dAalvKSAvKSlgwKZCilsBXEuhOrRCDbWhQH+DFSLtgy0FV9NWcKmpAM8xuNx0FRm2ArTMRQzbmowhNo0hha2QYtNclOqtAKFpLgDdVsCmuYC6XQWG0lLA5/+Aua3Ae6uNITfdWfC8s7Dt3szbHoXldTZ3dDTsp/XloezOrXUaPudRD4/XZf/r7OX/2c7YQ915Pe3Hw3UdufR8sqOX95ByH0rZ9R3t9u/genQ7frLiUzH2ISIfej6kSw2Qd3ce2A8=", "file_map": { "50": { "source": "// The code below is inspired by [compute_encrypted_log](https://github.com/AztecProtocol/aztec-packages/blob/b42756bc10175fea9eb60544759e9dbe41ae5e76/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr#L111)\n// which resulted in a bytecode size blowup when compiled to ACIR, see https://github.com/noir-lang/noir/issues/6929\n// The issue was around `encrypted_bytes[offset + i]` generating large amounts of gates, as per the `flamegraph.sh` tool in aztec-packages.\n// The details around encryption and addresses have been stripped away, focusing on just copying bytes of equivalent size arrays.\n\n// Original values which resulted in huge bytecode even on this example (500K long SSA)\n// global PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 18;\n// global ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n// global EPH_PK_SIZE: u32 = 32;\n// global HEADER_SIZE: u32 = 48;\n// global OVERHEAD_PADDING: u32 = 15;\n\n// Using the same formulas with smaller numbers; the effect is the same, but the SSA is more manageable.\nglobal PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 4;\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 5;\nglobal EPH_PK_SIZE: u32 = 3;\nglobal HEADER_SIZE: u32 = 2;\nglobal OVERHEAD_PADDING: u32 = 1;\n\n// Unused because encryption didn't play a role:\n// global OVERHEAD_SIZE: u32 = EPH_PK_SIZE + HEADER_SIZE + OVERHEAD_PADDING;\n// global PLAINTEXT_LENGTH_SIZE: u32 = 2;\n// global MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n// ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\nglobal BODY_SIZE: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - EPH_PK_SIZE - HEADER_SIZE - OVERHEAD_PADDING;\n\nfn main(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> pub [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] {\n compute_encrypted_log(\n eph_pk_bytes,\n incoming_header_ciphertext,\n incoming_body_ciphertext,\n flag,\n )\n}\n\nfn compute_encrypted_log(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> [u8; M] {\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // NOTE: Adding a conditional variable can result in the array being fully copied, item by item,\n // in each iteration in the second loop that copies incoming_body_ciphertext into encrypted_bytes.\n // Depending on where we place the `flag` we either get the item-by-item copying (blowup),\n // or just a single array item gets read and a new array constructed in each iteration (no blowup).\n\n // If the `flag` is here then it blows up.\n if flag {\n // eph_pk\n for i in 0..EPH_PK_SIZE {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += EPH_PK_SIZE;\n\n // If the `flag` is here then it blows up.\n // if flag {\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // If the `flag` is here then it does not blow up.\n //if flag {\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n\n // NOTE: This made the bytecode size blowup disappear in aztec packages,\n // but in this reproduction the size seems to be statically known regardless.\n // let size = M - 32 - HEADER_SIZE - OVERHEAD_PADDING;\n\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n }\n\n encrypted_bytes\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 1a259f77eef..1581780d852 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/encrypted_log_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -93,8 +93,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "nZbLbupADIbfJess5uaxp69SoSqFUEWKAkrhSEeId6/N2KEsupkN3xeG/Hiuya07jJ/Xr49pOZ6+u7f3W/e5TvM8fX3Mp/1wmU4Lf3vrnHxQ7t5C3xFWUEV5oLgKXxEqYkWqgIqaUmpKqSmlpnjnlF4ZlFHJUVEIyqzESs/tScjXIOT4LCyVwSm9kvNRyPkkTEpQZiUqOa8IS2V0Sq8MyqhMSs7zTiSboAmZlPofySm9Mii1xqSZCZRZiUqtMWmNoDWC1gic571INEkmYCJlyoADmpBJUcnOhIO9jH4OJtEkmYBJNkETMikq6EwsGS0ZJVlmGJMJmGQTyZHZJ/mxTDOBfZNN5N9l5mUZVykqspSreJNgIoEyB7Kkq4BJNkETMim1jCCru4o3CSbRJJmASTZBFe8eqzx4r5SUIhJNkgmYyLZzImhCJkVFdkcVbxIe+yjI/ngwKUGZlagkZamU/QH3e9/ZafJxWcdRDpNfxwsfOudhHZdL97Zc57nv/g3z9fGj7/OwPHgZVm7lisblwOTA4zSPYvf+ebf7+1ae1aJ38xDHLQBeE/zfCdy3YAmBmhKitx6w+pYEkmVYEyhQU0KKWwK6loTiyBJKKA0J0YGNZHS5ZSR5IK2GyCdpUw34THDQlFDSMyE19QJwS8CW2YxhW9UxxKZepLAlpNg0m7l4S8DQNBdIbkugppHEsvWCQm5JIHksWELTSNJzJAly096E7YyiXJoS8Lm76XVF7fhq2E/ry4vdXbLWaficR708Xpf9r9bL/7O12IvheT3tx8N1HSXp+XbIH+8hQR9y3vUdPy/e0fXkdvJ2Jk0x9iGSXHq55EIDwu4uhf0A", + "bytecode": "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", + "debug_symbols": "nZbLbuowEED/Jess/J5xf6VCVQqhihQFlMKVrhD/3hlmJpRFN95wTggcHOxYuXWH8fP69TEtx9N39/Z+6z7XaZ6nr4/5tB8u02mhd2+d4xcs3VvoOwQBCuoD1Qm8IAiiIAmyQCpVKlUqVSreOaVXBmVUUioys7IoQejpfGLScWZSvjCrMDilV1IfmFGZlNRHZlGCknqVWYXRKb0yKKMyKbN0Y1FqL6KyCpNTemVQRqX2UlYWJSh1fEnHl3V8WceXqecdSzRJJtmEmt6zgAmaVJXiTCjseWZKMIkmySSbFBMwQZOqAs7EymBl4DLPMiSTbFJMuMMrAPnDvAQw2zvFhH+dZ5+XsEhV4WUs4k3413nKeDGLJJNsUkzABE2qDCPwyhbxJsEkmiSTbFJMQMVzB1m8STCJJsmEO5WlmIAJmlQVvjdEvEl43EWB744HkzIrixKUqKxCvjvy/d53tpd8XNZx5K3k1+ZCW855WMfl0r0t13nuu3/DfH186Ps8LA9ehpXO0toclwORgsdpHtnu/fPb7u+v0rxW/Tb9yXEL5NeC/7tA1xasELCpEL1dAalvKSAvKSlgwKZCilsBXEuhOrRCDbWhQH+DFSLtgy0FV9NWcKmpAM8xuNx0FRm2ArTMRQzbmowhNo0hha2QYtNclOqtAKFpLgDdVsCmuYC6XQWG0lLA5/+Aua3Ae6uNITfdWfC8s7Dt3szbHoXldTZ3dDTsp/XloezOrXUaPudRD4/XZf/r7OX/2c7YQ915Pe3Hw3UdufR8sqOX95ByH0rZ9R3t9u/genQ7frLiUzH2ISIfej6kSw2Qd3ce2A8=", "file_map": { "50": { "source": "// The code below is inspired by [compute_encrypted_log](https://github.com/AztecProtocol/aztec-packages/blob/b42756bc10175fea9eb60544759e9dbe41ae5e76/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr#L111)\n// which resulted in a bytecode size blowup when compiled to ACIR, see https://github.com/noir-lang/noir/issues/6929\n// The issue was around `encrypted_bytes[offset + i]` generating large amounts of gates, as per the `flamegraph.sh` tool in aztec-packages.\n// The details around encryption and addresses have been stripped away, focusing on just copying bytes of equivalent size arrays.\n\n// Original values which resulted in huge bytecode even on this example (500K long SSA)\n// global PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 18;\n// global ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n// global EPH_PK_SIZE: u32 = 32;\n// global HEADER_SIZE: u32 = 48;\n// global OVERHEAD_PADDING: u32 = 15;\n\n// Using the same formulas with smaller numbers; the effect is the same, but the SSA is more manageable.\nglobal PRIVATE_LOG_SIZE_IN_FIELDS: u32 = 4;\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 5;\nglobal EPH_PK_SIZE: u32 = 3;\nglobal HEADER_SIZE: u32 = 2;\nglobal OVERHEAD_PADDING: u32 = 1;\n\n// Unused because encryption didn't play a role:\n// global OVERHEAD_SIZE: u32 = EPH_PK_SIZE + HEADER_SIZE + OVERHEAD_PADDING;\n// global PLAINTEXT_LENGTH_SIZE: u32 = 2;\n// global MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n// ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\nglobal BODY_SIZE: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - EPH_PK_SIZE - HEADER_SIZE - OVERHEAD_PADDING;\n\nfn main(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> pub [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] {\n compute_encrypted_log(\n eph_pk_bytes,\n incoming_header_ciphertext,\n incoming_body_ciphertext,\n flag,\n )\n}\n\nfn compute_encrypted_log(\n eph_pk_bytes: [u8; EPH_PK_SIZE],\n incoming_header_ciphertext: [u8; HEADER_SIZE],\n incoming_body_ciphertext: [u8; BODY_SIZE],\n flag: bool,\n) -> [u8; M] {\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // NOTE: Adding a conditional variable can result in the array being fully copied, item by item,\n // in each iteration in the second loop that copies incoming_body_ciphertext into encrypted_bytes.\n // Depending on where we place the `flag` we either get the item-by-item copying (blowup),\n // or just a single array item gets read and a new array constructed in each iteration (no blowup).\n\n // If the `flag` is here then it blows up.\n if flag {\n // eph_pk\n for i in 0..EPH_PK_SIZE {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += EPH_PK_SIZE;\n\n // If the `flag` is here then it blows up.\n // if flag {\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // If the `flag` is here then it does not blow up.\n //if flag {\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n\n // NOTE: This made the bytecode size blowup disappear in aztec packages,\n // but in this reproduction the size seems to be statically known regardless.\n // let size = M - 32 - HEADER_SIZE - OVERHEAD_PADDING;\n\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n }\n\n encrypted_bytes\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 73e357c8f54..697f86f3e33 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -39,7 +39,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9VbW27aQBQ1b8Ij5MEbktA0TdM0bWb8wDb8pB9ZCATz3110Ad1Du5J+tB/dRBfSGWWQjDWxIvlcS3OlI6Mz6HLusT2ML0PReo4zgQv1uiBQUkcZswRXUFw8Sur4oI4sW3BkrkIsl8Pmrhv5dsQdvmJ2uA485nrrecAD7gXexg4cJwrcwA/Xoc9C7joR33qhs1XJijhdLO5pUeNpIeFpVu0l8Pmh0lmG6Zy7lDorwGuhovQNVb5SDOWY/mKMr2jw2vftPqcqUBOoCxwINASaAi2BtsChQEfgSOBY4ETgVKAr0BPoCwxUvpHAWGAiMLWe55SClYgHjGGpFyDLFrwKvEgoddYAOqOtjGhLqbNuiJ8NmJ/bJ0qdTZzOiFJnC6czpNTZNuT6PDREZweXi1TnkSE6jw3ReWKIzlNDdHYt1Pz5RPr93oPpjBxKnX2YzjXp+nNgmbEOGeJ0+pQ6RzidNqXOMUxntKHUOcHpDCh1Ti0z5qUzmM5NJLWVEzrjr3WcjF0Dr/fvy+jr7x+PO34p8Bh7fyl2nCW4soaraLiqhqtpuLqGO9BwDQ3X1HAtDdfWcIcarqPhjjTcsYY70XCnGq6r4Xoarq/hBoqLB7opWwPmQvYEGE7XXlOW5eDpATAXA3rKiTzlOXjaAObiQE9tIk/tHDxtAnPZQE8dIk+dHDxtAXM5QE9dIk/dHDxtA3O5QE89Ik+9HDwtA3NVgJ7OiTyd5+BpFZhrDvTUJ/LUz8FT4D3GfaCnAZGngcbTItbTFfI3h5DIhzAHHzpAHxZEPiws+nsMeA75AujpksjT5SuuLcRvcShPh0Af0mpm2QLSk6WYXynPM3Dz2F6vmGUMypqRm84mhtSMXC9PDakZuBlurx/OMgZlzcg1/LkhNSN7wBeG1FwH1jwzpGZkX/qNITUj+8aXhtSM7Ou+NaRmZN/1ypCakX3RdznVzLIFvwb6h+xdUNb8Hlgzsk9BWfMNsGZkHyFeM3rPyAdAzXnsEbvF6STdI/YRp5N0j9gdTCftHrFPOJ2ke8Q+43SS7hG7h+nc3yM2TGiWc/PuT2fymR71BzEr8Xkv/WFMPgfL58KZgHxukOtoua6U6yy57pDf6fI7Ts75cg6U84u8d+V9Ia85eT7vlb5d9NUxubctrkc3Nk4Zm6aMnaeMzVLGLlPGrlLGrlPGbtTxz/e/v35+W+3d87cpY3cpOWX8BwYNcTQ5PAAA", - "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXTSx5JhRNcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzLPXW6fq48t5GQaeUnfrzDr1yzCf1dN8maZO/e6ny/rS56mfVzz3C6/qTg3zGyMLvo/TkH7duo2t96nGukI2zjS6+z4/QOWHKOBbiIVv0Ur41PhRC/hO1+Q5Ldm/s1T53gv43mLhex8e4weU8MkXfgB4kC+JP5haP8H5x/heEn8gW/ikScAnrP9PRhI/uVp/5J2EH2r9U5Scn6hr/cawmz8I+wKoda0A1HB3hL4dAdUOBNrubiG1iR8LAbQPLYYoKSPg2KsCoBYpmE3ByRT8pkAyhdgU0Oy2c3Q/+S3QmRqD0fsxyErymR/6w7h8sWGF7F6dMutouad1yq2jX8ewjsQnrFMxVUinQKdAGYGRUwasAJwVYA3gl8HmQwOuoM8VDKEgFYwZURdkPWRdZD3kYJD1kPXR5qyjK+hzBjAUpIIxo9EJbylFy9i/TkO5bbxf5sPd5eP851RX6vXktBwPw9tlGVKG1rWU9f/08gKWWq04LbE/cM0/wZFMIbYYvJa0cPBGNwVPIoXmAuBl/YvdvyoE6x9VEFkZBG02BVkMsR58kNk5hLDFECUXQqDNS8hHkQI0RyQjMXWIptVDtKJ6oLBlMoq+ZiRqTVhLrobcu7EpGBIptP6AIOoPTAtNwUjqAVG3XaAV5QFCyyTErwo7fgarlWH2tWQiLntIsZDiIC4biMv+4bJ9uOweCSADZjCrDZrsj4ZVks/4DGE1R5M90sRsglYXTCbJ8xYLmmx2Nplk/Ecm9Xz7Cw==", + "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXjW15xjRFcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzE+vt07V25fzMgz8SN3NM+vUL8N8Vk/zZZo69bufLutLn6d+XvHcLzyrOzXMb4ws+D5OQ7q6dRtb71ONdYVsnGl0931+gMoPUcC3EAvfopXwqfGjFvCdrslzWvL/zlLley/ge4uF7314jB9Qwidf+AHgQb4k/mBq/QTnH+N7SfyBbOGTJgGfsH6fjCR+crX+yDsJP9T6pyjZP1HX+o1hN38Q9gVQ61oBqOFuC307AqodCLTd/YXUJn4sBNA+tBiipIyAY68KgFqkYDYFJ1PwmwLJFGJTQLPbztH95FqgMzUGo/djkJXkM9/0h3H5YsMK2b06ZdbRck/rlFtHv45hHYl3WKdiqpBOgU6BMgIjpwxYATgrwBrAL4PNmwZcQZ8rGEJBKhgzoi7Iesi6yHrIwSDrIeujzVlHV9DnDGAoSAVjRqMT3lKKlrF/nYZy2ni/zIe7w8f5z6nO1OPJaTkehrfLMqQMrXMp6//p4QUstVpxWmJ/4Jp/giOZQmwxeC1p4eCNbgqeRArNBcDL+he7f1UI1j+qILIyCNpsCrIYYt34ILNzCGGLIUoOhECbl5CPIgVojkhGYuoQTauHaEX1QGHLZJSsJndebE3YwMMKotWMRE1BS46nCLquJgL6RxWMEeWhdTkWk/QoRN0yiVaWh9AyCfGrwo6nwmqnmL01GZnLPlZsrLiYyybmsoe5bGEuO1gCyIAZzGrFJnu0YZXkdT5DWA3aZJ82MRux1QUhG6zFgslYuV/ZZKzwj4zy+fYX", "file_map": { "50": { "source": "struct MyStruct {\n x: u32,\n y: u32,\n z: u32,\n nested_struct: InnerStruct,\n}\n\nstruct InnerStruct {\n small_array: [u32; 2],\n big_array: [u32; 5],\n}\n\nstruct ParentStruct {\n basic_array: [Field; 3],\n id: u32,\n my_structs: [MyStruct; 2],\n}\n\nfn main(x: u32, y: pub u32) {\n let nested_struct = InnerStruct { small_array: [1 as u32; 2], big_array: [0 as u32; 5] };\n let s = MyStruct { x, y, z: x + y, nested_struct };\n let parent = ParentStruct { basic_array: [1; 3], id: 100, my_structs: [s, s] };\n let new_parent = map_fields(parent);\n\n // Now check that the outputs are as we expect them to be\n assert(new_parent.basic_array[0] == 1);\n assert(new_parent.basic_array[1] == 18);\n assert(new_parent.basic_array[2] == 1);\n\n let struct_0 = new_parent.my_structs[0];\n assert(struct_0.x == 5);\n assert(struct_0.y == 3);\n assert(struct_0.z == 8);\n assert(struct_0.nested_struct.small_array == nested_struct.small_array);\n assert(struct_0.nested_struct.big_array == nested_struct.big_array);\n\n let struct_1 = new_parent.my_structs[1];\n assert(struct_1.x == 50);\n assert(struct_1.y == 30);\n assert(struct_1.z == 80);\n assert(struct_1.nested_struct.small_array == [5, 10]);\n assert(struct_1.nested_struct.big_array == [15, 20, 25, 30, 35]);\n}\n\n// Meaningless mapping to test whether the values returned are what we expect\n#[fold]\nfn map_fields(mut input: ParentStruct) -> ParentStruct {\n let current_struct = input.my_structs[0];\n let mut sum = 0;\n for value in current_struct.nested_struct.small_array {\n sum += value;\n }\n for value in current_struct.nested_struct.big_array {\n sum += value;\n }\n sum += (current_struct.x + current_struct.y + current_struct.z);\n\n input.basic_array[1] = sum as Field;\n\n input.my_structs[1].nested_struct.small_array = [5, 10];\n input.my_structs[1].nested_struct.big_array = [15, 20, 25, 30, 35];\n\n // LHS input.my_structs[1].x == 50\n input.my_structs[1].x = input.my_structs[1].x * 10;\n // LHS input.my_structs[1].y == 30\n input.my_structs[1].y = input.my_structs[1].y * 10;\n // LHS input.my_structs[1].x == 80\n input.my_structs[1].z = input.my_structs[1].x + input.my_structs[1].y;\n\n input\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_0.snap index 73e357c8f54..697f86f3e33 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_0.snap @@ -39,7 +39,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9VbW27aQBQ1b8Ij5MEbktA0TdM0bWb8wDb8pB9ZCATz3110Ad1Du5J+tB/dRBfSGWWQjDWxIvlcS3OlI6Mz6HLusT2ML0PReo4zgQv1uiBQUkcZswRXUFw8Sur4oI4sW3BkrkIsl8Pmrhv5dsQdvmJ2uA485nrrecAD7gXexg4cJwrcwA/Xoc9C7joR33qhs1XJijhdLO5pUeNpIeFpVu0l8Pmh0lmG6Zy7lDorwGuhovQNVb5SDOWY/mKMr2jw2vftPqcqUBOoCxwINASaAi2BtsChQEfgSOBY4ETgVKAr0BPoCwxUvpHAWGAiMLWe55SClYgHjGGpFyDLFrwKvEgoddYAOqOtjGhLqbNuiJ8NmJ/bJ0qdTZzOiFJnC6czpNTZNuT6PDREZweXi1TnkSE6jw3ReWKIzlNDdHYt1Pz5RPr93oPpjBxKnX2YzjXp+nNgmbEOGeJ0+pQ6RzidNqXOMUxntKHUOcHpDCh1Ti0z5qUzmM5NJLWVEzrjr3WcjF0Dr/fvy+jr7x+PO34p8Bh7fyl2nCW4soaraLiqhqtpuLqGO9BwDQ3X1HAtDdfWcIcarqPhjjTcsYY70XCnGq6r4Xoarq/hBoqLB7opWwPmQvYEGE7XXlOW5eDpATAXA3rKiTzlOXjaAObiQE9tIk/tHDxtAnPZQE8dIk+dHDxtAXM5QE9dIk/dHDxtA3O5QE89Ik+9HDwtA3NVgJ7OiTyd5+BpFZhrDvTUJ/LUz8FT4D3GfaCnAZGngcbTItbTFfI3h5DIhzAHHzpAHxZEPiws+nsMeA75AujpksjT5SuuLcRvcShPh0Af0mpm2QLSk6WYXynPM3Dz2F6vmGUMypqRm84mhtSMXC9PDakZuBlurx/OMgZlzcg1/LkhNSN7wBeG1FwH1jwzpGZkX/qNITUj+8aXhtSM7Ou+NaRmZN/1ypCakX3RdznVzLIFvwb6h+xdUNb8Hlgzsk9BWfMNsGZkHyFeM3rPyAdAzXnsEbvF6STdI/YRp5N0j9gdTCftHrFPOJ2ke8Q+43SS7hG7h+nc3yM2TGiWc/PuT2fymR71BzEr8Xkv/WFMPgfL58KZgHxukOtoua6U6yy57pDf6fI7Ts75cg6U84u8d+V9Ia85eT7vlb5d9NUxubctrkc3Nk4Zm6aMnaeMzVLGLlPGrlLGrlPGbtTxz/e/v35+W+3d87cpY3cpOWX8BwYNcTQ5PAAA", - "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXTSx5JhRNcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzLPXW6fq48t5GQaeUnfrzDr1yzCf1dN8maZO/e6ny/rS56mfVzz3C6/qTg3zGyMLvo/TkH7duo2t96nGukI2zjS6+z4/QOWHKOBbiIVv0Ur41PhRC/hO1+Q5Ldm/s1T53gv43mLhex8e4weU8MkXfgB4kC+JP5haP8H5x/heEn8gW/ikScAnrP9PRhI/uVp/5J2EH2r9U5Scn6hr/cawmz8I+wKoda0A1HB3hL4dAdUOBNrubiG1iR8LAbQPLYYoKSPg2KsCoBYpmE3ByRT8pkAyhdgU0Oy2c3Q/+S3QmRqD0fsxyErymR/6w7h8sWGF7F6dMutouad1yq2jX8ewjsQnrFMxVUinQKdAGYGRUwasAJwVYA3gl8HmQwOuoM8VDKEgFYwZURdkPWRdZD3kYJD1kPXR5qyjK+hzBjAUpIIxo9EJbylFy9i/TkO5bbxf5sPd5eP851RX6vXktBwPw9tlGVKG1rWU9f/08gKWWq04LbE/cM0/wZFMIbYYvJa0cPBGNwVPIoXmAuBl/YvdvyoE6x9VEFkZBG02BVkMsR58kNk5hLDFECUXQqDNS8hHkQI0RyQjMXWIptVDtKJ6oLBlMoq+ZiRqTVhLrobcu7EpGBIptP6AIOoPTAtNwUjqAVG3XaAV5QFCyyTErwo7fgarlWH2tWQiLntIsZDiIC4biMv+4bJ9uOweCSADZjCrDZrsj4ZVks/4DGE1R5M90sRsglYXTCbJ8xYLmmx2Nplk/Ecm9Xz7Cw==", + "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXjW15xjRFcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzE+vt07V25fzMgz8SN3NM+vUL8N8Vk/zZZo69bufLutLn6d+XvHcLzyrOzXMb4ws+D5OQ7q6dRtb71ONdYVsnGl0931+gMoPUcC3EAvfopXwqfGjFvCdrslzWvL/zlLley/ge4uF7314jB9Qwidf+AHgQb4k/mBq/QTnH+N7SfyBbOGTJgGfsH6fjCR+crX+yDsJP9T6pyjZP1HX+o1hN38Q9gVQ61oBqOFuC307AqodCLTd/YXUJn4sBNA+tBiipIyAY68KgFqkYDYFJ1PwmwLJFGJTQLPbztH95FqgMzUGo/djkJXkM9/0h3H5YsMK2b06ZdbRck/rlFtHv45hHYl3WKdiqpBOgU6BMgIjpwxYATgrwBrAL4PNmwZcQZ8rGEJBKhgzoi7Iesi6yHrIwSDrIeujzVlHV9DnDGAoSAVjRqMT3lKKlrF/nYZy2ni/zIe7w8f5z6nO1OPJaTkehrfLMqQMrXMp6//p4QUstVpxWmJ/4Jp/giOZQmwxeC1p4eCNbgqeRArNBcDL+he7f1UI1j+qILIyCNpsCrIYYt34ILNzCGGLIUoOhECbl5CPIgVojkhGYuoQTauHaEX1QGHLZJSsJndebE3YwMMKotWMRE1BS46nCLquJgL6RxWMEeWhdTkWk/QoRN0yiVaWh9AyCfGrwo6nwmqnmL01GZnLPlZsrLiYyybmsoe5bGEuO1gCyIAZzGrFJnu0YZXkdT5DWA3aZJ82MRux1QUhG6zFgslYuV/ZZKzwj4zy+fYX", "file_map": { "50": { "source": "struct MyStruct {\n x: u32,\n y: u32,\n z: u32,\n nested_struct: InnerStruct,\n}\n\nstruct InnerStruct {\n small_array: [u32; 2],\n big_array: [u32; 5],\n}\n\nstruct ParentStruct {\n basic_array: [Field; 3],\n id: u32,\n my_structs: [MyStruct; 2],\n}\n\nfn main(x: u32, y: pub u32) {\n let nested_struct = InnerStruct { small_array: [1 as u32; 2], big_array: [0 as u32; 5] };\n let s = MyStruct { x, y, z: x + y, nested_struct };\n let parent = ParentStruct { basic_array: [1; 3], id: 100, my_structs: [s, s] };\n let new_parent = map_fields(parent);\n\n // Now check that the outputs are as we expect them to be\n assert(new_parent.basic_array[0] == 1);\n assert(new_parent.basic_array[1] == 18);\n assert(new_parent.basic_array[2] == 1);\n\n let struct_0 = new_parent.my_structs[0];\n assert(struct_0.x == 5);\n assert(struct_0.y == 3);\n assert(struct_0.z == 8);\n assert(struct_0.nested_struct.small_array == nested_struct.small_array);\n assert(struct_0.nested_struct.big_array == nested_struct.big_array);\n\n let struct_1 = new_parent.my_structs[1];\n assert(struct_1.x == 50);\n assert(struct_1.y == 30);\n assert(struct_1.z == 80);\n assert(struct_1.nested_struct.small_array == [5, 10]);\n assert(struct_1.nested_struct.big_array == [15, 20, 25, 30, 35]);\n}\n\n// Meaningless mapping to test whether the values returned are what we expect\n#[fold]\nfn map_fields(mut input: ParentStruct) -> ParentStruct {\n let current_struct = input.my_structs[0];\n let mut sum = 0;\n for value in current_struct.nested_struct.small_array {\n sum += value;\n }\n for value in current_struct.nested_struct.big_array {\n sum += value;\n }\n sum += (current_struct.x + current_struct.y + current_struct.z);\n\n input.basic_array[1] = sum as Field;\n\n input.my_structs[1].nested_struct.small_array = [5, 10];\n input.my_structs[1].nested_struct.big_array = [15, 20, 25, 30, 35];\n\n // LHS input.my_structs[1].x == 50\n input.my_structs[1].x = input.my_structs[1].x * 10;\n // LHS input.my_structs[1].y == 30\n input.my_structs[1].y = input.my_structs[1].y * 10;\n // LHS input.my_structs[1].x == 80\n input.my_structs[1].z = input.my_structs[1].x + input.my_structs[1].y;\n\n input\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 73e357c8f54..697f86f3e33 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/fold_complex_outputs/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -39,7 +39,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9VbW27aQBQ1b8Ij5MEbktA0TdM0bWb8wDb8pB9ZCATz3110Ad1Du5J+tB/dRBfSGWWQjDWxIvlcS3OlI6Mz6HLusT2ML0PReo4zgQv1uiBQUkcZswRXUFw8Sur4oI4sW3BkrkIsl8Pmrhv5dsQdvmJ2uA485nrrecAD7gXexg4cJwrcwA/Xoc9C7joR33qhs1XJijhdLO5pUeNpIeFpVu0l8Pmh0lmG6Zy7lDorwGuhovQNVb5SDOWY/mKMr2jw2vftPqcqUBOoCxwINASaAi2BtsChQEfgSOBY4ETgVKAr0BPoCwxUvpHAWGAiMLWe55SClYgHjGGpFyDLFrwKvEgoddYAOqOtjGhLqbNuiJ8NmJ/bJ0qdTZzOiFJnC6czpNTZNuT6PDREZweXi1TnkSE6jw3ReWKIzlNDdHYt1Pz5RPr93oPpjBxKnX2YzjXp+nNgmbEOGeJ0+pQ6RzidNqXOMUxntKHUOcHpDCh1Ti0z5qUzmM5NJLWVEzrjr3WcjF0Dr/fvy+jr7x+PO34p8Bh7fyl2nCW4soaraLiqhqtpuLqGO9BwDQ3X1HAtDdfWcIcarqPhjjTcsYY70XCnGq6r4Xoarq/hBoqLB7opWwPmQvYEGE7XXlOW5eDpATAXA3rKiTzlOXjaAObiQE9tIk/tHDxtAnPZQE8dIk+dHDxtAXM5QE9dIk/dHDxtA3O5QE89Ik+9HDwtA3NVgJ7OiTyd5+BpFZhrDvTUJ/LUz8FT4D3GfaCnAZGngcbTItbTFfI3h5DIhzAHHzpAHxZEPiws+nsMeA75AujpksjT5SuuLcRvcShPh0Af0mpm2QLSk6WYXynPM3Dz2F6vmGUMypqRm84mhtSMXC9PDakZuBlurx/OMgZlzcg1/LkhNSN7wBeG1FwH1jwzpGZkX/qNITUj+8aXhtSM7Ou+NaRmZN/1ypCakX3RdznVzLIFvwb6h+xdUNb8Hlgzsk9BWfMNsGZkHyFeM3rPyAdAzXnsEbvF6STdI/YRp5N0j9gdTCftHrFPOJ2ke8Q+43SS7hG7h+nc3yM2TGiWc/PuT2fymR71BzEr8Xkv/WFMPgfL58KZgHxukOtoua6U6yy57pDf6fI7Ts75cg6U84u8d+V9Ia85eT7vlb5d9NUxubctrkc3Nk4Zm6aMnaeMzVLGLlPGrlLGrlPGbtTxz/e/v35+W+3d87cpY3cpOWX8BwYNcTQ5PAAA", - "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXTSx5JhRNcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzLPXW6fq48t5GQaeUnfrzDr1yzCf1dN8maZO/e6ny/rS56mfVzz3C6/qTg3zGyMLvo/TkH7duo2t96nGukI2zjS6+z4/QOWHKOBbiIVv0Ur41PhRC/hO1+Q5Ldm/s1T53gv43mLhex8e4weU8MkXfgB4kC+JP5haP8H5x/heEn8gW/ikScAnrP9PRhI/uVp/5J2EH2r9U5Scn6hr/cawmz8I+wKoda0A1HB3hL4dAdUOBNrubiG1iR8LAbQPLYYoKSPg2KsCoBYpmE3ByRT8pkAyhdgU0Oy2c3Q/+S3QmRqD0fsxyErymR/6w7h8sWGF7F6dMutouad1yq2jX8ewjsQnrFMxVUinQKdAGYGRUwasAJwVYA3gl8HmQwOuoM8VDKEgFYwZURdkPWRdZD3kYJD1kPXR5qyjK+hzBjAUpIIxo9EJbylFy9i/TkO5bbxf5sPd5eP851RX6vXktBwPw9tlGVKG1rWU9f/08gKWWq04LbE/cM0/wZFMIbYYvJa0cPBGNwVPIoXmAuBl/YvdvyoE6x9VEFkZBG02BVkMsR58kNk5hLDFECUXQqDNS8hHkQI0RyQjMXWIptVDtKJ6oLBlMoq+ZiRqTVhLrobcu7EpGBIptP6AIOoPTAtNwUjqAVG3XaAV5QFCyyTErwo7fgarlWH2tWQiLntIsZDiIC4biMv+4bJ9uOweCSADZjCrDZrsj4ZVks/4DGE1R5M90sRsglYXTCbJ8xYLmmx2Nplk/Ecm9Xz7Cw==", + "debug_symbols": "zVbLbuMwDPwXnX0QqRfVX1kUhZu6hQHDCdxkgUWQf1/Kejg9GCiYLbAXjW15xjRFcXRVb8Pr5eNlnN+Pn+rp11W9LuM0jR8v0/HQn8fjzE+vt07V25fzMgz8SN3NM+vUL8N8Vk/zZZo69bufLutLn6d+XvHcLzyrOzXMb4ws+D5OQ7q6dRtb71ONdYVsnGl0931+gMoPUcC3EAvfopXwqfGjFvCdrslzWvL/zlLley/ge4uF7314jB9Qwidf+AHgQb4k/mBq/QTnH+N7SfyBbOGTJgGfsH6fjCR+crX+yDsJP9T6pyjZP1HX+o1hN38Q9gVQ61oBqOFuC307AqodCLTd/YXUJn4sBNA+tBiipIyAY68KgFqkYDYFJ1PwmwLJFGJTQLPbztH95FqgMzUGo/djkJXkM9/0h3H5YsMK2b06ZdbRck/rlFtHv45hHYl3WKdiqpBOgU6BMgIjpwxYATgrwBrAL4PNmwZcQZ8rGEJBKhgzoi7Iesi6yHrIwSDrIeujzVlHV9DnDGAoSAVjRqMT3lKKlrF/nYZy2ni/zIe7w8f5z6nO1OPJaTkehrfLMqQMrXMp6//p4QUstVpxWmJ/4Jp/giOZQmwxeC1p4eCNbgqeRArNBcDL+he7f1UI1j+qILIyCNpsCrIYYt34ILNzCGGLIUoOhECbl5CPIgVojkhGYuoQTauHaEX1QGHLZJSsJndebE3YwMMKotWMRE1BS46nCLquJgL6RxWMEeWhdTkWk/QoRN0yiVaWh9AyCfGrwo6nwmqnmL01GZnLPlZsrLiYyybmsoe5bGEuO1gCyIAZzGrFJnu0YZXkdT5DWA3aZJ82MRux1QUhG6zFgslYuV/ZZKzwj4zy+fYX", "file_map": { "50": { "source": "struct MyStruct {\n x: u32,\n y: u32,\n z: u32,\n nested_struct: InnerStruct,\n}\n\nstruct InnerStruct {\n small_array: [u32; 2],\n big_array: [u32; 5],\n}\n\nstruct ParentStruct {\n basic_array: [Field; 3],\n id: u32,\n my_structs: [MyStruct; 2],\n}\n\nfn main(x: u32, y: pub u32) {\n let nested_struct = InnerStruct { small_array: [1 as u32; 2], big_array: [0 as u32; 5] };\n let s = MyStruct { x, y, z: x + y, nested_struct };\n let parent = ParentStruct { basic_array: [1; 3], id: 100, my_structs: [s, s] };\n let new_parent = map_fields(parent);\n\n // Now check that the outputs are as we expect them to be\n assert(new_parent.basic_array[0] == 1);\n assert(new_parent.basic_array[1] == 18);\n assert(new_parent.basic_array[2] == 1);\n\n let struct_0 = new_parent.my_structs[0];\n assert(struct_0.x == 5);\n assert(struct_0.y == 3);\n assert(struct_0.z == 8);\n assert(struct_0.nested_struct.small_array == nested_struct.small_array);\n assert(struct_0.nested_struct.big_array == nested_struct.big_array);\n\n let struct_1 = new_parent.my_structs[1];\n assert(struct_1.x == 50);\n assert(struct_1.y == 30);\n assert(struct_1.z == 80);\n assert(struct_1.nested_struct.small_array == [5, 10]);\n assert(struct_1.nested_struct.big_array == [15, 20, 25, 30, 35]);\n}\n\n// Meaningless mapping to test whether the values returned are what we expect\n#[fold]\nfn map_fields(mut input: ParentStruct) -> ParentStruct {\n let current_struct = input.my_structs[0];\n let mut sum = 0;\n for value in current_struct.nested_struct.small_array {\n sum += value;\n }\n for value in current_struct.nested_struct.big_array {\n sum += value;\n }\n sum += (current_struct.x + current_struct.y + current_struct.z);\n\n input.basic_array[1] = sum as Field;\n\n input.my_structs[1].nested_struct.small_array = [5, 10];\n input.my_structs[1].nested_struct.big_array = [15, 20, 25, 30, 35];\n\n // LHS input.my_structs[1].x == 50\n input.my_structs[1].x = input.my_structs[1].x * 10;\n // LHS input.my_structs[1].y == 30\n input.my_structs[1].y = input.my_structs[1].y * 10;\n // LHS input.my_structs[1].x == 80\n input.my_structs[1].z = input.my_structs[1].x + input.my_structs[1].y;\n\n input\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 654ebd37f9b..71898e55e13 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -243,8 +243,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_0.snap index 707df43c36c..4acea61fd5e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_0.snap @@ -231,8 +231,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tb3djjTZbWZ9L32sg+Qmubm3b2UwMGSPZiBAkAzZ/oAPhu99MriDXKUeVL71ZnWfKFe3up4VGRlkxg8j8r9++V9/+pf//D///Oe//u+//fsv//Q//uuXf/n7n//ylz//n3/+y9/+9Y//8ee//fX5b//rl8f1P3v88k/yh1+2nhc7L35e5i//NJ8vcV7Wedn5Io/H/Sr367hf9X61+9Xv13m/xv267tc7T+48ufPkzpM7T+48ufPkzpM7T+48ufPGnTfuvHHnjTtv3Hnjzht33rjzxp037jy98/TO0ztP7zy98/TO0ztP7zy98/TOszvP7jy78+zOszvP7jy78+zOszvP7jy/8/zO8zvP7zy/8/zO8zvP7zy/8/zOm3fevPPmnTfvvHnnzWeeXq/zfo37dd2v+7zG436V+3Xcr3q/2v1658WdF3de3HnxzIvn63rcr3K/jvtV71e7X/1+nfdr3K/rfr3z9p2377x95+07b995+87bd96+867yWNfrztdx1Ue+yv067le9X+1+9ft13q9xv6779Zm3n69XfeSr3K/jftX71e5Xv1/n/Rr367pfn3nyeMJVIAeeiSIXjAItsAIvmAVRsAr2DVepHKhkrWStZK1krWStZK1krWStZKtkq2SrZKtkq2SrZKtkq2SrZKtkr2SvZK9kr2SvZK9kr2SvZK9kr+RZybOSZyXPSp6VPCt5VvKs5FnJs5KjkqOSo5KjkqOSo5KjkqOSo5Kjklclr0pelbwqeVXyquRVyauSVyWvSt6VvCt5V/Ku5F3Ju5J3Je9K3pW872R9PAqkYBRogRV4wSyIglVQyVLJUslSyVLJUslSyVLJUslSyVLJo5KrBrVqUKsGtWpQqwa1alCrBrVqUKsGtWpQqwa1alCrBrVqUKsGtWpQqwa1alCrBrVqUKsGtWpQqwa1alCrBrVqULMGxwWrYN+QNZggBaNAC6zAC2ZBJXsleyXPSp6VPCt5VvKs5KxBvWAWRMGVbBfsG7IGE6RgFGiBFXjBLIiCK9kv2DdkDSZcyfOCUaAFVvBMHtfqvWrwQBSsgn3DVYMHpGAUaIEVVPKu5F3Ju5L3nWyPR4EUjAItsAIvmAVRsAoqWSpZKlkqWSpZKlkqWSpZKlkqWSp5VPKo5FHJo5JHJY9KHpU8KnlU8qhkrWStZK1krWStZK1krWStZK1krWSrZKtkq2SrZKtkq2SrZKtkq2SrZK9kr2SvZK/krMF1gRfMgihYBfuGrMEEKRgFWlDJs5JnJc9KvipujAuu5dELrMALZkEUrIJ9w1VfB6RgFFzJdoEVeMEsiIJVsG/I+kqQglFQybuSdyXvSt6VvCt538n+eBRIwSjQAivwglkQBaugkqWSpZKlkqWSpZKlkqWSpZKlkqWSRyWPSh6VPCp5VPKo5FHJo5JHJY9K1krWStZK1krWStZK1krWStZK1kq2SrZKtkq2SrZKtkq2SrZKtkq2SvZK9kr2SvZK9kr2SvZK9kr2SvZKnpU8K3lW8qzkWcmzkmclz0qelTwrOSo5KjkqOSo5KjkqOSo5KjkqOSp5VfKq5FXJVYNeNehZg37BLIiCVbBvyBpMkIJRoAVWcCXPC2bBlRwXrIJ9YGYNJkjBKNACK/CCWRAFq6CSpZKlkqWSpZKlkqWSpZKlkqWSpZJHJWcNrgtGgRZYwZW8L5gF1zG4XbAK9g1XDR6QglGgBVbgBbOgkrWStZKtkq2SrZKtkq2SrZKtkq2SrZKtkr2SvZK9kr2SvZK9kr2SvZK9kr2SZyXPSp6VPCt5VvKs5FnJs5JnJc9KjkqOSo5KjkqOSo5KjkqOSo5KjkpelbwqeVXyquRVyauSVyWvSl6VvCp5V/Ku5F3Ju5J3Je9KvmpQ5YIoWAX7QFw1eEAKRoEWWIEXzIIoWAWVfNWg+gVSMAq0wAq8YBZEwSq4kp8tJa4aPCAFo0ALrMALZkEUrIJK1krWStZK1krWStZK1krWSs4ajAv2DVmDCVfyumAUaIEVeMEsiIJVsG/IGky4kvcFo+CZbI8LrMALZkEUrIJ9w1WDB6RgFFTyrORZybOSZyXPSp6VHJUclRyVHJUclRyVHJUclRyVHJW8KnlV8qrkVcmrklclr0pelbwqeVXyruRdybuSdyXvSt6VvCt5V/Ku5H0nr8ejQApGgRZYgRfMgihYBZUslSyVLJUslSyVLJUslSyVLJUslTwqeVTyqORRyaOSRyWPSh6VPCp5VLJWslayVrJWslayVrJWslayVrJWslWyVbJVslWyVbJVslWyVbJVslWyV7JXsldy1eCqGlxVg6tqcOX3YMIq2Dfk92CCFIwCLbCCK9kvmAVRsAr2DVmDCVIwCrTACio5KjkqOSo5KnlV8qrkVcmrklclr0pelbwqeVXyquRdybuSdyXvSt6VvCt5V/Ku5F3J+07ej0eBFIwCLbACL5gFUbAKKlkqWSpZKlkqWSpZKlkqWSpZKlkqeVTyqORRyaOSRyWPSh6VPCp5VPKoZK1krWStZK3krMFxgRfMgihYBfuGrMEEKRgFWlDJVslWyVbJWYPXRdSswQuyBhOkYBRogRV4QeXkd1xcMAq0wAq8YBZEwSrYN2R9JVzJ64JRoAVX8r7AC2ZBFKyCfUPWV4IUPJP9cYEWWIEXzIIoWAX7hqu+DkhBJe9K3pW8K3lX8q7kXcn7Tn5e5H40SdNo0iZr8qbZFE2rqR3SDmmHtEPaIe2Qdkg7pB3SDmnHaMdox2jHaMdox2jHaMdox2jHaIe2Q9uh7dB2aDu0HdoObYe2Q9th7bB2WDusHdYOa4e1w9ph7bB2eDu8Hd4Ob4e3w9vh7fB7u5fHVZo+krTJmrxpNkXTatpFV4neJE3tiHZEO6Id0Y5oR7Qj2rHasdqx2rHasdqx2rHasdqx2rHasdux27Hbsdux27Hbsdux27HbscuRUyo3SdNo0iZr8qbZFE2rqR3SDmmHtEPaIe2Qdkg7pB3SDmnHaMdox2jHaMdox2jHaMdox2jHaIe2I+tXk0bT5VhJ1uRNsymaVtMuyvo9JE2jqR3WDmuHtcPaYe2wdng7vB3eDm+Ht8Pb4e3wdng7vB2zHbMdsx2zHbMdsx2zHbMdsx2zHdGOaEe0I9oR7Yh2RDuiHdGOaMdqx2rHasdqx2rHasdqx2rHasdqx27Hbsdux27Hbsdux27Hbsduxy5HTtvcJE2Xw5O0yZq8aTZF0zUNNZJ2UU6oHZKm0aRN1uRNsyma2iHtGO0Y7RjtGO0Y7RjtGO0Y7RjtGO3Qdmg7tB3aDm2HtkPboe3Qdmg7rB3WDmuHtcPaYe2wdlg7rB3WDm+Ht8Pb4e3wdng7vB3eDm+Ht2O2Y7ZjtmO2Y7ZjtmO2Y7ZjtmO2I9oR7Yh2RDuiHdGOaEfW+U5aTbso6/yQNI2my6FJ1uRNsymaVtMuuur8ps7LEVJLiqbVtG/K4Z2bpGk0aZM1edNsiqbV1A5ph7RD2iHtkHZIO7J+PSmaVtMuyvo9JE2jSZusyZvaMdqR9XvGTXdR1u8haRpN2mRN3jSboulyRNIuyvo9JE2jSZusyZtmUzS1w9rh7cj6XUmjSZusyZsux06KptW0i7J+D11znY+k0aRN1uRN14SnJEXTatpFV/3eNO7tPmd/brImb5pN0bSaqqJyBChGkjSNJm2yJm+aTdG0mroqdlfF7qrYXRW7q2J3Veyuiq5u7erWru6cAcojoBwCukmbrMmbZlM0raY6osphoJvaIe2Qdkg7rkqOXKqrkm+KptW0i65KvkmaRpM2WVMdBVofMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVsfMVudrxKrE1ZidcZKrE5ZidU5K7E6aSVWZ60kx4Ruus9ASQ4K3bSL5qNJmkaTNlmTN82me9JHzsjQIWkaTdpkTd40m6JpFeUZ3XlwgAoa6OAEA1zgLsyZn8K8JimJA1TQQAfz6uRIDDCvUJ7c3Xiufz4SBRygggY6OMEA02aJuzGvid4o4AAVNNDBCQaIbWDLq6K5f59DQIW7MS933iggf5YXPW800EFy8+Lnjbk4kbgb8xLojQIOUEEDHUzbSgxwgbsxL8nk7l4OCD2/GRMHqKCBebk4N6McU7gxwAWm7dxU8gAFTFtufTm0cKOBDk4wwAXuxhxhuFFAbAvbwrawLWwL28K2sG1sG9vGtrFtbBvbxraxbWy7bTluVCjgANPmiWk7d+9k7vXJ51iR5o5WzhNp9pKcKCo0MBdyJ04wwAXuxjPbcHC0Lcs096VylKgwwAXuxhxnuFHAASpoIDbFptgUm2IzbIYtaz536s6w0Y0GOjjBABe4G7PmbxQQm2NzbI7NsTk2x+bYJraJbWKb2Ca2iW1im9gmtoktsAW2wBbYAlugyDLd+QFkmd7o4AQDXOBuzDK9UcABYtvYNraNLct050Jmmd64C89E0o0CDlBBAx2cYIBtOxNJeyRmwrmdzsHo/yAL8kb+LGvzRgUNdHCCH3JzcTxxN2bF3ijgABU00MG0zcQAF7gbs2J3JKZtJQ5QQQPTthMnGOAC03btNJxBpRsFzEGJR6KCBjo4wQAXuBvP8NJBAbFNbBPbxDaxTWxnmCk/wjPOdG6tzNz8AILNKAvyxgB3Y574nQcDXOBuzJO/Nwo4QAUNdDD7w8EAF7gLcyapUMABKmiggxNsW04kaR7l5eBRYYAL3I2DP8sqvHGACpJ7vjcP5uLMxAAXuBvP9+ZBAQeoYNrO/bIOTjDAtK3EtF0lss735kEBB5gDgo9EAx2cYNo8cYG78YwLSqKAA1TQQAcnGOACd+PENrFNbBPbxDaxTWwT28Q2sQW2wBbYAltgC2yBLbDlvvLK7TeLd+UWlXvFKzeC/GJd52boCQa4wN2YX6w3CjhABQ3EtrFtbBvbbluOOD1PXCUKOEAFDXRwggEucDcKNsEm2ASbYBNsgk2wCTbBNrANbAPbwDawDWwD28A2sA1s2R/WThRwgAoa6OAEV6Pz3zr/rfPfnno7+OHPduNkySZLNlmyyZJNbHlJNU9x5GhTYYAL3I15XfVGAQeYlwtH4gQzVxMXuBvzGsuNAg5QQQPJzW/IPFdxBpfuf8t/m1+LN07wQwJLtmvJxpliulHAASpooIMTDHCB2HIe4jrgH2eg6TpXMc5E03UqYpzxpetUxDjzSzcGuMDdmDMQNwo4wNyVeCQa6OAEA1zgbsxzszcKOMDMlcQMGxfm6dbrIxxnLung9UUV+d6v76mbrMmbZlM0raZddBXMTdLUjtmO2Y7ZjtmO2Y7ZjtmOaEe0I9oR7Yh2RDuiHdGOaEe0Y7VjtWO1Y7VjtWO1Y7VjtWO1Y7Vjt2O3Y7djt2O3Y7djt2O3Y7djlyPHjG6SptGkTdbkTbMpmlZTO6Qd0g5ph7RD2iHtkHZIO6Qd0o7Rjrzo4UmjSZusyZtmUzStpl10FdZN7dB2aDu0HVelxXnWyWyKptW0i64qvEmaRpM2PR3XHujIMaObZlM0raZddO2S3iRNo+npuHbDRo4Z3eRNsymaVtMuuur8Jmm68jTp+tuRtJp20VW/N0nTaNIma/Km2XQ5LGk17aKrfld+Rlf93jSatMmavGk2RdNq2kVX/V77qyPHh24aTb02rqq9dhlHDg3dFE2rad90HtFzSJpGkzZZkzfNpmhaTe2Qdkg7pB3SDmmHtEPaIe2Qdkg7RjtGO0Y7rqq99pdGDg1dp7NGDghdJ3RGDghdR/Ujh4Gukxsjh4Fu0iZr8qbZFE2raRdd1XhTO65qvE79jBwGusmavGk2RdNq2kVXNV6nh0YOA900mrTJmrxpNkXTatpFsx2zHbMdsx2zHbMdsx2zHbMdsx3RjmhHtCPaEe2IdkQ7oh3RjmjHasdqx+rkfHjPIzeTfHzPjbsxH+Fzo4ADVNBAByeIbWPbbTuP9blRwAEqaKCDEwxwgdgEm2ATbIJNsAk2wSbYBJtgG9gGtoFtYBvYBraBbWAb2AY2xabYFJtiU2yKTbEpNsWm2AybYTNshs2wGTbDZtgMm2FzbI7NsTk2x+bYsglEUjStpl2UTeCQNKVHEhU00MEJBrjA3ZgPF7ox39VIHKCCBjo4wQAXuBvzgUPXieFxHjl04wAVNNDBCQa4wN24sW1sG9vGtrFtbBvbxraxnS5yfd3Y6SIHBRygggY6OMEA0+aJu/F0kYMCDlBBAx1M20wMcIG78XSRgwIOUEEDHcQ2sA1sA5tiU2yni0SiggY6OMEAF7gbTxc5mLaVOEAFDXRwggEuMG3XDpKdLnJQwAEqaKCDE7xs+YDF8zCkG3fjeTDgQQEHqKCBDl62+xGHAS5wN56HBR4UcIAKpm0kOjjBABe4G88DBA8KmDZNVNBABycY4AJ343mo4EEBsZ1HC2bFnocLHnRwggEucBf6edDgQQEHmDZPNNDBCQa4wN14Hj54UMABYjsPIZyJDk4wwAXuxvNAwoMCDlDBtEWigxMMcIG78Tyk8KCAA1QQm2JTbIpNsSk2w3YeXbgSB6iggQ5OMMAF7sbzQNGDV+71yLLh5/GFBx2cYIAL3I3nUYYHBRwgtoltYpvYJraJbWILbIEtsAW2wBbYAltgC2yBbWFb2Ba2hW1hW9gWtoVtYVvYNraNbWPb2Da2jW1j29g2tt22nOMqFHCAChro4AQDXCA2wSbYBJtgE2yCTbAJNsEm2Aa2ge10jZ2ooIEOTjDAtGnibsyucaOAA1TQQAcnmO/NEhe4G7Nr3CjgABU00MG0eWKAC9yN5xGoBwUcoIIGpi0SJxjgAnfj6SUHBRygggambSVOMMAF7sbTSw4KOEAFDcQW2LKXXI8PGflIq8LdmL3kRgEHqKCBDk4Q28K2sG1sG9vGtrFtbBvbxraxbWy7bTlsVijgABU00MEJBrhAbIJNsAk2wSbYBJtgE2yCTbANbAPbwDawDWwD28A2sA1sA5tiU2yKTbEpNsWm2BSbYlNshs2wGTbDZtgM2+klOzHABe7G00sOCpi5kpjLOxIXuBuzP9yYS2aJ+Y41McAF7sas+RsFHKCCBjqYNk8McIG78dT8QQEHqKCBaZuJEwxwgbvx1PxBAQeYtkg00MEJBrjAXbhOzR8UcIAKGujgBANcYNqu9rpOzR8UcIAKGujgBANM207cjafmDwo4QAUNdPCyXU+lGjknV7jA3Zg1f6OAA1TQQAexKTbFptgMm2HLmjdJVNBABycY4AJ3Y9b8jQJic2yOLfcfricUjZyTKwxwgbsx+8ONAg5QQQOxTWwT28Q2sQW2wBbYAltgC2yBLbAFtsC2sC1sC9vCtrAtbAvbwrawLWwb28a2sW1sG9vGtrFtbBvbblvO1BUKOEAFDXRwggEuEJtgE2yCTbAJNsEm2ASbYBNsA9vANrANbAPbwDawDWwD28Cm2BSbYlNsik2xKTbFptgUm2EzbIbNsBk2w2bYDJthM2yOzbE5Nsfm2Oglm16y6SWbXrLpJZtesuklm16y6SWbXrLpJZtesuklm16y6SWbXrLpJZtesukl+/QSTXRwggEucDeeXnJQwAEqiG1hW9hOL7HEBe7G00sOCjhABQ10cIJpm4kL3Dfq4/SSgwIOUEED0xaJEwxwgbvx9JKDAg5QQQOxCbbTS3biAnfj6SUHBRygggY6OEFsA9vAptgUm2JTbIpNsSk2xabYFJthM2yGzbAZNsNm2AybYTNsjs2xOTbH5tgcm2NzbI7NsU1sE9vENrFNbBPbxDaxTWwTW2ALbIEtsAW2wBbYAltgC2wL28K2sC1sC9vCdnrJSgxwgbvx9JKDAl65133dmnORco1Naw5GFu7CHI0svBKuYWrN4chCBQ10cIIBLnA3Zn+4xpA1pyQLB6iggQ5OMMC0WeJuzP5wo4ADVNBAB9PmiQEucDdmf7hRwAEqaKCD2BSbYlNshs2wGTbDZtgMm2HL/nCNhGuOUhbuxuwPNwo4QAUNdHCCqzbPHKWUawBd8/FshRm2Ew10cIIBLnA3ZvnfeC36zG09y3/mNpnlfyogy/9GBycY4AIpp0U5ZfnfiOKcwciNK6t75vab1X3jbszqvlHAASpooIMTxLax7bbluGWhgANU0EAHJxjgArEJNsEm2ASbYMtOcN1Nrzl+Kdfd9Hp+NPG6m17PzyZet7rr+eHEGweooIEOTjDABe5GxabYFJtiU2yKTbFlzV/3t+v5acUbd2PW/I0CDlBBAx2cIDbDZtgcm2NzbI7NsTk2x+bYHJtjm9gmtoltYpvYJraJbWKb2ALFOa0piRl2MMD8s9zksroPZnXfKOAAFTTQwVzI3H5Xnd7VM8h5427cD1DAASpooIOtOMOZ170DeoYzb1TQQAcnGOACd2OW9I3YBJtgE2yCTbAJNsEm2Aa2gW1gG9gGtoFtYBvYBraBTbEpNsWm2BSbYlNsik2xKTbDZtgMm2EzbIbtFPpMDHCBu/EU+kEB07YTFTTQwQkGuMDdeAr9oIDYJraJbWKb2Ca2iW1iC2yBLb/9rxtB9Ixo3miggxMMcIG7MfvDjQJiW9iyP6yszewPN04wwAXuxuwPNwo4QAUz1xIDXGDmXo3pDGPeKOAAc9FnooMTDHCBuzFbxY0CDlBBbIJNsAk2wSbYBraBLVvFdQ+GngnMGw10MG0rMcAF7sZsFTcKOEAFDXQQm2JTbIrNsBk2w2bYslVc95romcC8cYIBLnA3Zqu4UcABKojNsWWruO5y0TOBeeMCd2O2ihsFHKCCBjqIbWKb2Ca2wBbYAltgC2yBLVvFdd+OngnM68YdPROYN+7GbBU3ps0SB6iggQ5OMMAF7sZsFTdi29g2to1tY9vYNraNLRvIdbOPngnMGwUcoIIGOjjBABeITbBlL7luk9EzgXmjggY6OMEAF7gbs5dctxXomcC8cYAKGujgBANc4G7MXnI9H0fPBOaNA1TQQAcnGOACd6NhM2yGzbAZNsNm2AybYctecj3ER88E5o0CDvBpG9fdH3p+cvNGBycY4AJ3Y/785o0CDhDbxDaxTWwT28Q2sQW2wJbPtLzuF9Hzw5w3Guhg2kZigAvcjfkznTcKOEAFDXQQ28K2sC1sG9vGtrFtbPkTntfdHnp+xPPGCQaYNkvchefnPG8UcIAKGuhg2mZigAvcjfkTnzcKOEAFDXQQm2ATbIJtYBvYBraBbWAb2Aa2gW1gG9gUm2JTbIpNsSk2xabYFJtiM2yGzbAZNsNm2AybYTNshs2x5Q/3XrekaM5lFqZtJRro4AQDXOBuPL3k4GW77vbQnMssVNBABycY4AJ3Y/aSGzNMEh2cYIAL3I3ZKm4UcIAKYlvYFraFbWFb2Da2jW1j29g2to1tY9vYNrbdtng8QAEHqKCBDk4wwAViE2yCTbAJNsEm2ASbYBNs2Sque1Y0xy4LBRygggY6OMEAF4hNsSk2xabYFJtiU2yKTbEpNsNm2AybYTNshs2wGTbDZtgcm2NzbI7NsTk2x+bYHJtjm9gmtoltYpvYJraJbWKb2Ca2wBbYAltgC2yBLbAFtsAW2Ba2hW1hO73EEw10MDvtTlzgbjz7GgcFHKCCBqZiJk4wwAXuwnUayEEBB6iggV3SiwayaCDrdI3r+2KdrnFQwAEqaKCDE0zFTlzgbjxd46CAA1TQQAcv23gkBrjA3Zhd40YBB6jgZRu5drJr3DjBABe4G7Nr3CjgABXEZtgMm2EzbIbNsTk2x+bYHJtjc2yOzbE5toltYpvYJraJbWKb2Ca2iW1iC2yBLbBl17hultEc3Cx0cIIBLnA3Zte4UcABYlvYFraFbWFb2Ba2jW1j29g2to1tY9vYNraNbbctBzcLBRygggY6OMEAF4hNsAk2wSbYBJtgE2yCbXQd5zDmuG4X0xzGLHRwggEucDee/nAwlzcSB6iggQ5OMMAF7sbTHw5iM2yGzbAZttMfZmKAC9yNpz8cFDBtK1FBAx2cYIAL3I2T3FPzO3GCAS5wN56aPyjgABU08LJpbhrnhzcOBrjA3Zg1f6OAA1TQQGwL28K2sC1sG9vGtrFtbBvbxraxbWwb2y6b5YBloYADVNBABycY4AKxCTbBJtgEm2ATbIJNsAk2wTawDWwD28A2sA1sA9vANrANbIpNsSk2xabYFJtiU2yKTbEZNsNm2AybYTNshs2wGTbD5tgcm2NzbI7NsTk2x+bYHNvENrFNbBPbxDaxTWwT28Q2sQW2wBbYAltgC2yBLbAFtsC2sC1sC9vCtrAtbAvbwrawLWwb28a2sW1sG9vGtrFtbBsbvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSOb1EEgNc4G48veSggANU0EAHsTk2x+bYJraJbWKb2Ca2iW1im9gmtont9JKRKOAAFTTQwQkGmDZN3I2nlxwUcIAKGuhg2mZigAvcjaeXHBRwgAryLk5/eO5+2Tj94aCAA1TQQAcnGOACsQk2wSbYBNvpDyvRwQkGuMDdmP3huvvScnCzcIAKGujgBKNRyc2av+6otBzGHNf9Q5bDmIUTDHCBuzFr/kYBB6ggNsNm2AybYTNsjs2xOTbH5tgcm2NzbI7NsU1sE9vENrFNbBPbxDaxTWwTW2ALbIEtsAW2wBbYAltgC2wL28K2sC1sC9vCtrAtbAvbwraxbWwb28a2sW1sG9vGtrHttuXDOAsFHKCCBjo4wQAXiE2wCTbBJtgEm2ATbIJNsAm2gW1gG9gGtoFtYBvYBraBbWBTbIpNsSk2eonSS5ReovQSpZcovUTpJUovUXqJ0kuUXqL0EqWXKL1E6SVKL1F6idJLlF6i9BKllyi9ROklSi9ReonSS5ReovQSpZcovUTpJUovUXqJ0kuUXqL0EqWXKL1E6SVKL1F6idJLlF6i9BKllyi9ROklSi9ReonSS5ReovQSpZcovUTpJUovUXqJ0kuUXqL0EqWXKL1E6SVKL1F6idJLjF5ip5do4gAVNNDBCQa4wN14eslBbIJNsAk2wSbYBJtgE2wD28A2sA1sA9vpJTNxggEucDeeXnJQwAFmbiTmdZyDu/FcIT0o4AAVNNDBCQaYy7sTd+PpDwcFHKCCl+26s8lyyLNwggEucDdmf7hRwMvmufVlf7jRQAcnGOACd2P2hxsFxBbYsj9c9wHa+b3hGycY4AJ3Y/aHGwUcoILYFraFbWFb2Ba2jW1j29g2to1tY9vYNraNbbcthzwLBRygggY6OMEAF4hNsAk2wSbYBJtgE2yCTbBlf7huJ7Uc8iwUcIAKGpi5fmHW/HW7o+XgZuEAFcyElejgBANc4G7M/nCjgGnbiQoa6OAEA1zgbsz+cKOA2Bxb9ofrlks7g5s3TjDABe7G7A83CjhABbFNbBPbxDaxTWyBLbAFtsAW2AJbYAtsgS2wLWwL28K2sC1sC9vCtrAtbAvbxraxbWwb28a2sW1sG9vGlv3h+v0lO4ObNwo4QAUNzNyr/55hzOu2TzvDmDcOUMH8s6v0zvzk9QvHdiYlI3PzC/vGABe4G7N4bxRwgAoaiE2xKTbFptgMm2EzbIbNsBk2w2bYDJthc2yOzbE5Nsfm2BybY3Nsjm1im9gmtlO8K9FABycY4ALTlhtBFu+NAg5QQQMdnGCAC8S2sC1sC9vCtrAtbAvbwrawLWwb28a2sW1sG9vGtrFtbBvbbtsZpbxRwAEqaKCDaZPEABe4G7PQbxQwbZaooIEOTjDABe7G/HK/UcC0eaKCBjo4wQAXuBtPLzkoYNpmooIGOjjBABe4G08vOZi2SBygggY6OMEAF7gbTy85iM2xObbTS3aigxMMcIG78fSSgwIOUEFs2UuuWy7tjFLeGOACd2P2khsFHOBlW7mlZte4MXNH4gJ3Y3aNGwUcoIIGkpvlv7LITvmvRAUNnPzZhwSWbPeSnenHGwUcoIIGOjjBABeITbAJNsGWNX/db2pnEPK6adPOIOR1T6adkcfrxkY7I48Hs7pvFHCAChro4PUurhv67Iw83rjA3ZjVfaOAA1TQQAexKTbFptiyuq8fm7cz8njjABU00MEJBrjA3ejYHFvW8c5PKCv2uoXRzhjjwazN65ZAO1OKOz/CU3rnP1iNWVknLL+Pd36w+X184wQDXOBuzMq6UcBcO/nBZmXdaKCDaduJT5s+cq3nryzfuBvzV5ZvlAtz7eSvLN+ooIFpy005a/PGANOWqyR/ZTnx/MryjQIOUEEDHZxggAvEJtgEm2ATbPkry9eNVnZ+Zfn6fRw7v6d83Xlj+ZTHs2nkUx4LFXQwd+vOn+XiXB/L+WHkGwUcoIIGOjjBABeIzbAZNsNm2AybYTNshs2wGTbH5tgcm2NzbI7NseUPOV93Ctn5Iedr+tzOTzZLrt/8yeYbr1zJzy1/svnGK1fyI8wfQ78G3C3nBm/MH0O/UcABKmiggxMMEFv+GHqen8y5wUIBB6iggQ5OMG25orKkb9yNWdI3CjhABQ10cILYNrZdNs+5wUIBB6iggQ5OMMAFYhNsgk2wCTbBJtgEm2ATbANFVvd1NO45FqjXvQSeY4GFEwxwgbsxy/9GAQeoIDbFptgUm2JTbIbNsBk2w2bYDJthM2yGzbA5NseW5X+N3nuOBeo1M+05AKjXhLbnAKCOXL9Z6DfuxvzF9hsFHKCCBjo4QWwT28QW2AJbYAts2RSu6WjPAcDCCQa4wN2YTeFGAQeoILaFbWFb2Ba2hW1j29g2to1tY9vYNraNbWPbbcsBwEIBB6iggQ624sz3XafSPOf79Jpq95zkK8w/24kTDHCBuzEL/UYBB3gt5DXP5WeS7zpF52eS78YJBrjA3agPUMABotA6Ae85qKeabz7r+MZrIa+n73mO5BUa6OAEA1zgbsw61lzrWcea69frdL+fkbwbDXRwggEucDfOB4jiXDHPxTnXxh+JuzEeoIADVNBABycYILbAlmWquT1kmd7/NnNz0zhXwQ9OMMAF7sZzFfyggArm0Fmuh123TPgZnbtRwAEqaKCDEwxwgdgEW5bedR3dc3ROr0vJfobkslrOkNyNAS5wN55bcw4KOEADr402t4ecgVPzRAFzcSJRQQMdnGCAC9yNfWeej74z74kDVNBABycYYN0F5Wcy7uC58+aggANU0EAH873lh5VfrDcucDee2/Hy07xqyB65qq8aKlTQQAcnGOACd+NVQ4XYFraVtlzry0AHJxjgAi+b5Pq9KqtQwAEqaKCDE7xs17GI56xaYdqu1ZezaoUCDlBBAx2cYNo0cYG78aohy2LIQTLLCshBssIBKmiggxMMcIG7UbF5JuTi+AQDXOBunA9QGq/tzHNvO+eYCh2cYIAL3I3XdlYo4ACxLWwL28K2sC1sC9vGtrFtbBvbTlskOjjBABe4C3OOyXO/OueYCgeooIEOTjAahdzr2MmvGyY9Z5MKHZxggAvcjdfmWSjgANMmiQY6OMEAF7gb9QEKOEBsik2xKTbFptgUm2EzbIbNsBk2w2bYDJthM2yOzbE5Nsfm2BybY3Nsjs2xTWwT28Q2sU1sE9vENrFNbBNbYAtsgS2wBbbAFtgCW2ALbAvbwrawLWwL28K2sC1sC9vCtrFtbBvbxraxbWwb28a2se225RxToYADVNBABycY4AKxCTbBJtgEm2ATbIJNsAk2wTawDWwDG73E6SVOL3F6idNLnF7i9BKnlzi9xOklTi9xeonTS5xe4vQSp5c4vcTpJU4vcXqJ00ucXuL0EqeXOL3E6SVOL3F6idNLnF7i9BKnlzi9xOklTi9xeonTS5xe4vQSp5c4vcTpJU4vcXqJ00ucXuL0EqeXOL3E6SVOL3F6idNLnF7i9BKnlzi9xOklTi9xeonTS5xe4vQSp5c4vcTpJU4vcXqJ00ucXuL0Ej+9ZCQ6OMEAF7gL5+klBwUcoIIGOjjBABeITbAJNsEm2ASbYBNsgi0bSO7Z5BPqCgUcoIIGOjjBABeITbGdBmKJ+YY8sXeppk4wwAX2LtW0ByjgAA28Eq4nyXlOTd2Y5X+jgANU0EAHJxggtiz/R77NLP8bBRygggambSVOMBqz0PPAcZ7Dh3zHWcf3v51ggAvcjYuwrOMbB5iK3KLOMcNBB3PT0MQAc9PIT/4cMySeY4aDuSHmOz7HDAcVNNDBCQaYtvwAzjHDhXGOGQ4KOEAFrdZkTjc99+0Sd+NVpoUCDlBBAx28jhZn2q4yLVxg2q7DnZxuKhRwgAoa6OAE07YTF7gb8+j2RgEHqKCBDk4Qm2JTbIbNsBk2w2bYDJthM2yG7apji/w08xj9xgAXuBvzGP1GAQdI7lWxhQ6mTRJ3YzxAAQeooIEOkpunm25cYNqugszZpEIBB6iggQ5OMMAFYtvYNraNbWPb2Da2jW1jy9NN1xCi53TTwZxuKhQwbZaYNk/M3EgMcIGZe/XUnGOya9LMc46pcIAKGnjlXoNknhNLdk2PeU4sFQ5QQQOv9XCNSnlOLBUGuMDdmBW78s1nxd44wLTlKsmKvdHBCQa4wN2YFbtypWbF3jhABQ10cIIB5mcxE3ejP0ABB6iggQ5OMMB8bwd3Y9b8jQLme8utJGv+RgMdnGCAC9yN2QluFBBbdoKV22TW/I0BLnA3Zs3fKOAAyc2aX7n9Zs3fOMEAV5fTqfnEU/MHBRwgVXhq/qCDEwywbTkUdSorh6IKDXRwVh3vU+gHF9iFvk+hH7wWfWdCFvqNCl65OxcnyzRrPp+VVhjgAi/bNQbmOfNk1wSb5xSS7RRn4dyYtvyzLJwbc18ul8G7MW0XcIAKGpgJkjjBAHNvcCTuxrPLejD3BjVxgAoa6OAEA0ybJe7GsyN7UMABKmigg7Ma6T4lcnCBu3E9wAHmTkN+FufIMj+sc2R5UEEDHZxggAvcN87HObI8KOAAFTTQwQkGuEBsgk2wnSPLmaiggQ5OMMC0rcTdeM5SHRRwgAoa6CC558BxJw5QQQMdnGCAC9yN53Dy4GW7nuAzc0SoUEEDHZxggAvcjXnoeSM2x+bYHJtjc2yOzbE5toltYpvYJraJbWKb2Ca2iW1iC2yBLbAFtsAW2AJbYAtsgW1hW9gWtoVtYVvYFraFbWFb2Da2jW1j29g2to1tY9vYNrbdthwcKhRwgAoa6OAEA1wgNsEm2ASbYBNsgk2wCTbBJtgGtoFtYBvYBraBbWAb2Aa2gU2xKTbFptgUm2JTbIpNsSk2w0YvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLBr1k0EsGvWTQSwa9ZNBLBr1k0EsGvWTQSwa9ZNBLBr1k0EsGvWTQS3KAyq7bzWcOUBUucDfmwfaNAg5QQQMdxDawDWwDm2JTbIpNsSk2xabYFJtiU2zWO0/DBqiggQ5OMMAF9q7a8AeIzbGdBjIS88PSxN6lGr7A3qUa8wEKOEAFDey9tnyImF3zZ/MMZt04QAUNdHCCAS5wNy5sC9vCtrAtbAvbwrawLWwL28a2sW1sG9vGtrFtbBvbxrbbdgazbhRwgAoa6OAE0zYTF7gb87D6RgEHmLaVaKCDEwxwgbvxzH4dJPfMc+3EABe4G88810EBB6iggQ5mST8SA1zgbszzZzcKOEAFDXQQm2EzbIbNsTk2x+bYHJtjc2yOzbE5toltYpvYJraJbWKb2Ca2iW1iC2yBLbAFtsAW2AJbYAtsgW1hW9gWtoVtYVvYFraFbWFb2Da2jW1j29g2to1tY9vYNrbdthyoKxRwgAoa6OAEA1wgNsEm2ASbYBNsgk2wCTbBJtgGtoFtYBvYBraBbWAb2Aa2gU2xKTbFptgUm2Kjlxi9xOglRi8xeonRS4xeYvQSo5cYvcToJUYvMXqJ0UuMXmL0EqOXGL3E6CVGLzF6idFLjF5i9BKjlxi9xOglRi8xeonRS4xeYvQSo5cYvcToJUYvMXqJ0UuMXmL0EqOXGL3E6CVGLzF6idFLjF5i9BKjlxi9xOglRi8xeonRS4xeYvQSo5cYvcToJUYvMXqJ0UuMXmL0EqeXOL3E6SVOL3F6idNLnF7i9BKnlzi9xOklTi9xeomfXiKJBjo4wQAXuBtPLzko4ACxDWwD28A2sA1sA5tiU2yKTbEpNsWm2LR3nnLi7kZ7gAIOUEEDHZxggNgMm2NzbI7NsZ0Goon5hiwxV5Qn7sbTKmaigAPMFRWJBjo4wQAXuBtPqzgo4ACxBbbAFtgCW2A7rSLXw2kVBwUcoIIG9v7vmZd75HrYAg5QQQMdnGCAC6yxqnnm5W4UcIAKGujgBNPmiQvcjfIABRxg2laigQ7WJNS8x+Eeicq/NdDBCQb4IWw36gNMxUgcoIIGOjjBABeYg05XtZzJuBvTZokDVLDGqmY+e6xwggEucDfm2YMbBRyggtgcm2NzbI7Nsc0a4ppniu7GASpooIOzP+OoIa6ZjxYrHKCCBjo4wQBriGvmbN2NWcc31hDXzNm6QgUNdHCCAS6wxqpmztYVCjhABQ10cIIBLrBtOVtXKOAAFTTQwQkGuEBsgu0M4jwSJxjgAnfjeIACDpDcYaCDNYI1z+jcQX2AAg5QQQMdJFcDXGANW80zOnejgANU0EAHJxjgArE5Nsfm2BybY3Nsjs2xeY12zXv4LnE+QAFrtGvew3eeWKNdMx8BVrjAmviYZ/hu50cYNUExz5jdOv+2Jgdm9OTAjJ4cmNGTA/MM1N2YQwT5hs5wzUEDHZxggAvcjVnHNwpYo13zDNTdaKCDEwxwgTXaNc9A3Y0CDlBBAx2cYIALxCbYBJtgkxokm2fM7kYHJxjgAnfjeIACDhDbwDawDWwD26ixtXlG8g7qAxRwgAoa6OAEA6yxtXmP5CXaAxSwBsnmPZJ30EAHJxjgAnejP0ABsXmNl80zfHdjgAvcjfMBCjhAcmeNrc17+O7gBAOsQbJ5hu8OxgMUcIAKGujgBAPEdprCI1FBAx2ssbV5Ju5uXGA3sXvi7qCANbY2z8TdjQZee0GWS7ZrQG2uM0974X48QAEXyH8r/LfCf9szsnOfHW9JNNDBCQa4wN2Y4wI35m7+SBygggY6OMEA06aJu/Hsrx8UcIAKGujgBAPEptgMm2GzGnybORZYaKCDEwxwgbvRH6CA2BybY3Nsjs37y3L7AvvLcs8HKKCCuVt3bb9n1E8z91zWP2hgXh72xAkGuMDdeC7rHxRwgOSeS/VX99ybPzvX5yNxgArmQua7ONfnD07wWsjraSnzzALein1jnFnAg1dliR8UcIB6L1mcQb0bHZxggAvcjeMBknuGa9I2+LMzURMXnomagwIOUEEDHZxg3CsqznTejbvxTNQcFHCAl80yLEvkOvERZzrvOgsY93RevqEzUXNwNebT986fnWeHHAxwgbsxH8p1o4ADVNDAy3adl4vzUK4bA1zgbsyHcl0/ZBHnoVw3XrbrTFmch3LdeNnOm8+Hct04wQAXuBvzaT83Cpg2S1TQQAcnGOACd2M+lOtGAbFtbPn4revUX5yna92ooIEOfvizABe4G4XcfNrPjbk4kaiggQ5OMMAF7sZ8/NZ14i7O47duHKCCaduJl+16xn7kOFxhgAu8bNcT/SPH4QoFTNtMVNDAtI3ECQa4wN2YT9+7UcABKmggNsNm2AybYXNsjs2xOTbH5tgcm2NzbI5tYpvYJraJbWKb2LL8Z25cWf4zV3UW+syPO0t65laSdXw9FS1yrq0wwFzI3DSyjg9mHd8o4AAV9LZlmUZuO1mmB7NMbxRwgAoa6OAEA8S225Zja4UCDlBBA9MmiRMMcIG7MWv+RgEHqKCB2ASbYBNsgm1gG9gGtoFtYBvYBraBbWAb2BSbYlNsik2xKTbFptgURdbxzg8g6/hGBycY4AJ3Y9bxjQIOEJtjc2yOLet450JmHd+4G7OObxRwgAoa6OAEsU1s+YV9PRc7clZNr6cjR86qFUb/B1mxN/JnWbE3KmiggxP8kJuL44m7MUv6RgEHqKCBDqZtJga4wF2Yo2h63QUVOYqm161PkaNohQoamLadOMEA02aJuzFL+sbrAOS6jyrOKNqNChro4AQDXOBuzHNMN2Ib2Aa2gW1gG9jyHNN1mBpnbO06LowzoHZd2oocRTvbTo6iFU5wNebXbWRYlumNBjo4wQAXuBuzTG8UMG0pzjK90UAHJxjgAndjlumNAmKb2LIgIz/5/Da9UUEDHfzwZwEucDcucrNMb8zFyW09y/RGAx2cYIAL3I3nmzcL53zzHhyggmnLwjnfvFki55v3YIALvGzX+ajIibBCAdPmiQoaeNmuQ/vIibDCABe4G7NMbxRwgAoaiE2wCTbBJtgGtoFtYBvYBraBbWAb2Aa2gU2xKTbFlt+817n4yIkwvU5+R85+6XUiN3LKS69Tq5FTXoUDVNBABycY4AJ3o2NzbI7NsTm2LOnr5GzklFdhgAvcjVnSNwo4QAUNxDaxTWwT28QW2AJbYAtsgS2wBbbAFtgC28K2sC1sC9vClv3hOnUdOeVVGOACd2P2hxsFVLCmxMN6Sjysp8TDe0o8vKfEw3tKPLynxMN7Sjy8p8TDe0o8zuTWjQvEJtgEm2ATbIJNsAk2wSbYBNvANrCNmkmPM7l1o4EOTjDAGnSKM7l1UB+ggANU0EAHybWaSY97MOugggY6OMEAF7gb/QHWFF14T3aG92RneE92hvdkZ3hPdob3ZGd4T3aG92RneE92hk9sE9vENrFNbBPbxDaxTWyBLbAFtsAW2AJbYAtsgS2wLWwL28K2sC1sC9vCtrAtbAvbxraxbWwb28a2sW1sG9vG1pOdMXuyM2ZPdsbsyc6YPdkZsyc7Y/ZkZ8ye7IzZk50xe7Iz5gObYBNsgk2wCTbBJtgEm2ATbAPbwDawDWwD28A2sA1sA9vAptgUm2JTbIpNsSk2xabYFJthM2yGzbAZNsNm2AybYTNsjo1eMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeMuklk14y6SWTXjLpJZNeEvSSoJcEvSToJUEvCXpJ0EuCXhL0kqCXBL0k6CVBLwl6SdBLgl4S9JKglwS9JOglQS8JeknQS4JeEvSSoJcEvSToJdFT4hE9JR7RU+IRPSUe0VPiET0lHtFT4hE9JR7RU+Jxhs5uxKbYDJthM2yGzbAZNsNm2AybYXNsjq2nxONMmt3o4AQDXGDvqp1JsxsFHCC2iW1im9gmtontNJDrAO/Mn+VFrPOYt7ysdObPbswVNRMnGGBNiceZSju4HqCAA1TQQAcnGCC2hW1j29g2to1t10x6nKm0GycY4AJrAj7OKFrunJ5Js2s0PM6k2Y0BLnA3ZvnfKOAAFTSwr9IumWCAC+yrtGv0Vdo1BOyrtGso2Fdpc9KscIIBLrCv0uakWaGAfd10qYIGOjjBABfYV2lz0qxQQGyGzfpya46MFSpooIMf/izABfZV2hwZKxSwr9LmyFihgQ5OMMAF9lXaFX2VdoWAA1Swr9Ku6Ku0KyYY4AL7Ku1aD1DAAfZV2rUMdLCvZJ7fvrxxgX0l8/z25Y0CDlBBAx3EtrFtbLtt57cvb0ybJ6ZtJmbuSsyE6wM4P2KZlzrPj1jeOMC+knl+xPJGBycYYF83zUmz2zb62uIeBvYVsc31t831t831t831t831t831t831t831t831t831t831t831t/ODlzdiM2yGzbAZNsNm2AybYTNshs2xOTbH5tgcm2NzbI7NUeSX8CM/ofwSvtHBCQa4wN2YX8I3CjhAbIHt/OBPbhrnB38OBrjA3Xh+8OfgZZN8Q/nVfKOCBjo4wQAXeNkkN8/zgz8H05ZFdn7w56CCBjo4wQAXmLZnva3H+cGfgwLm9/xOnGDe1/FIXOBuPPd1SKKAA1TQQAcnmLaRuMDdeB6qfFDAAeYOXIadM3uJ58zeQQEHqKCBDk4wwLSl+NyemXhuzzwo4AAVNNDBCfK5OZ+b87nlMfqNChro4ARzK7HE3Eo8cTfmLvb1yz0rh+QKB6iggQ5OMMAF7sbAltV9/ejQyiG5QgUNdHCCAS5wN2Z134htYVvYTnXPRAcnGOACd+Op7oMCDlBBbBvbqe4syFPdBxe4C+VU90EBB6jgBK+E6+cXVk7R2fULBCun6AoHqOC1vEMTHZxggAvcjVnSNwo4QAWxDWwD28A2sA1s2QmunzNYOUVXyCrJ8r8xFZ44wQAXmIpr+83RucJUrMQBKmhg2lKch9XXI7VWDsndmOV/o4ADVNDAK1fzg83yvzHABe7GLP8bBUxbfvJZ/jca6OAEA1zgbsya1/yEsuZvVNBABycY4AJ3Y9b8jdgWtqx5ze0ha/5GBycY4AJ34+bD2nxYmw9r82FloV/PZV1yDqCvjWCcc20H86vukThABfuLdTwcnGCAC9yNfI0P6S/WIQNU0EAHZ+E9iLMTJxjgAnfjeIACDlBBA7ENbKP28NY9iHNwN+oDFHCAtYe3zvOjbnRwggEucDdmU7gxu/IjcYC1h7fO86NudHCCAS5wN549hYO9p6DsKSh7CudBUNetAus88umarF/nkU83GujgBANc4G7ML/cbBcQW2E6h5wdwCv3gBANc4G48hX5QwAEqiG1hO9Wdq+RU90rkDZ06zn976viggQ6yojYrarOisuav3+dd54lONwqYe46PxF5R54lONzo4wQAX2O/iPNHpRgEHeGz//d9/+OUvf/vXP/7Hn//213/+j7//6U+//NN/9b/491/+6X/81y//9se//+mv//HLP/31P//ylz/88v/98S//mf/Rv//bH/+ar//xx78//9/nW/jTX//X8/UZ+L///Jc/XfTff+CvH5//6bpONuQfP8/X9J/71//+OhV5/n7bZ38/Pv/7556F3gHP3Qn5LEE/T4jV7+Dx6Tuwz/9+yL7m9DJhPL8dojPiHyL88wjNRw5kwrNxjE8CXq2FPP1z1sKzJt9Zj3bdEHgSnrtZ7yTkY/VPgou8lTB2J9h4J2FKbw3Pq8lvJVxTYifheVntnYQY0Qn21jIs64Tnqdq3EqLfxfO85Bt1uftNPM+avfP3vTE8T0d99vfXceWnZfW4nv9xquqxPt0YrmPBb1X2dUjx3dIej+/W9ss1Id1jh8R7K1NW8D7krYgxWRXxeCtCu77Hc8frvYjrgsAdEe+9kTyBcyKeFw/f2bZXBTxPEL7x98/j/+7WzzNn7yzB/BAQn37pvUh4fpr9WUz7PEK+WV46vl9eqt8tr5drIqQ3qeeF/rdWZvijI6a9F7Hrm2usz789X0Ys7490fV6hryNWr4v9eG8pPnymz7Pqb5WH9pf482Tmp7tkLzbN5zFtff89D2Q//UBsfHe3UL+/dZt9d+t+uSZG1Cf6PN5+b2WOXd/Ez4Pz9VZEXra/I9bjrQgzVoWPtyLyKXYnwnW+F7Gr0p/XmD9dnf4qYvGJPK8Df3a08CphSxX684j38UnCywqbvaP9PFv96bt4sWWa9e6Z2ee7Z+7frLDr2vu3j7ziuxX2ck3kow/PmvDx6Vbl+5trYj6+vyam/L5rwmavCZe3NqvZu0bPc5bvbZkziPi897+MCK2DYYvPd45eR4R3xI53vgblURX2vNzzXsLoL9LnhZC3Esw7YfpbCf1pPK8z6Vur0ntv1zzWtzv/5+cFQl8thQRl7j/fdJ/nZbprx/r084zvdsz4DTpmfLtjvloRi+/Q/XjnAOx5Grf3SPZ8Zx/zebarm/bj853+VwkyukfI56dI1stzl9q72xfvn1+Xz+vQj16KeGtNjC7x5yXT+d2Eud9bE9a7NE/Wz7bLH2T0VvHk+WnGelUf3bWf5fFOwvNaY7+RbfbW+3Dvpvv8RNYnGVtebd67v4nl8Wmv+XKE6Hufqu8+qTzmY721NqYOMmy+lzGps+cJ3jfqbEtX+x6fbuM7vtm89/p+8977d2zetrU3i+3vnLsyTl7Zjrcazu62+bzm8E7z9oc9OsHfS+j18Ezw7ybMd74GXR61Jp8XXOZby7AXCfu7CWO99S6Cd7HirYTJMrx1RvYfE95aD4NP8/lV/lZC71A8E95aBn30Mrw4UfNyGdYm4b1l6JNFT3xrm8yB/Ep461249afp8/MLJvLdQ3IZv8Exee5H/m792r2vj7u/V13eezQ+5Z1r/M/jN++E97bsyXYZ8vmVo/Hi2Mejr/v4i4P6lxnPfSkurD5irU8/05chqw8+nuyfh3z7i/xHy7GE5Xgz5HmWgtMUj0/fzKsPN3p/1+PzYxh5dRnoeZqBdfrkNw6lfPUunq/x1na+HkHC/G7CW9fdnzXe9b7eq/fV5yl8vfdt+g8Jb9U7e5lPfOs7YI8HCe8sw3xILcMT31uGHSS8tQzS7+L61exPS8P81Zl656RsJ9jXA3YOzJ3r3eafXW74QcRiHGR8HrG+3fBeLoWb9lJ8emz+OiL6pOwOeaPZXb+c3Z/oHm9tE13h1w9YfzNhvHUC7vq54U6Y862EMUlYb23ZmxPD+/kl8tbnOXuX+XlY+ukumq9Xp+D6CMjGh/P082eWorft/fnpCZkvu1XvpU35/DN9nSG9MqZ8PoPwoy/inuh88vzs+uaPQrpfPPnTi6Qy7bvn8l5GfO1k3g/eyuIcmHz8Nvz1csT3d11/sCDdeZ68/L13sz/sZm19c7+T4cAni74Zwn7n81Tlp28nxrdL9wf7v100T5ZPizfs1eFNH1U8j3TkjXZ6PQr9TohXOwq/xcUh+V2vDl0PM+938tapueDrLd47oXQ9F7oSnlcmPl2b68WR+2Yk+4n7vQzrq+HbPh8UlPVqvL2/qePDyVYb7y7Femt99oFmvBjSf5WgPWRxPQL4rYQ+MXU9Y/WdBOsTdGFvHZxF/kTHSXB7a8v0SUJ8vlW9vLKztUd3njvmb5Soz9kL8V678j6fcz0T752EKV2ic7yVEGyU8d5GuR5dW+utM2PXc2o64b1NavVFz+tBK+8k7B6pjv1mQk+XX08ueCPhenJBJ7x1pHw9FKAT7K2E0d9+a7x13nlp7y5et3Z9ljAer24F+tJ04OuI744HLuu5ofXxWvxPrAnvcyfLPx+vGI8XZzi/PXDzPLPam8R8vHMia81hnfD5rQJDXuxjsvu/P5xUHONXCfp7JkSPzsaH4dtfJbxck90ilr81BraiW+V67lJ9vibju+deXkd8PNz/fKbuB4vRs8zPy9fzvYzVA4Z7vbjT7XVGj/vvF2d6x/j2xjm+v3G+eh979Vm5/fn3cO6Sf3rmYvUtOfPzY+zx6kBuRF9Mf34RjE+OBV8vxR69FFs/7d2vIoKrKfHw9yL+4QDq8VbE6I/k+oGQdyrteVj84Sanx3ivTq47pbjeJp/PWfwoJbjQ9eL6/lD77pau/nvWijzGZn18/Gj+n3fyahKJayPX088++3h1fbtaXi/FZCk+3MoXX4+4HgLUO33b34qQniVastdbEdr3Kz334dd71WJ9ZPjkz/fCh317C7XfeQtVbn9+qL31TIDQR+8s2It18e05zNcRj1BOMYZ9Xmz+8l6b+HCzZsx4K+Vr1+B+EPGVa3DDv32z5eul+NI1uNcRX9sPfP3R7j7wvs4kf74H5vH6HDTb+vZ3U742U/KDkK/NlIz5+P7H+3o5vjRT8jrkizMlrz/i695RQj6/RW28vAL0/bmS5wF9f8PE5+cVxnx1leH7dwqs3SOOa6/Pe9n8DSaQx/w9R5D3o9/Jfrx4JyG/wTt5dfnoN3gnfdP3lrfOSW/pEy1bRryV0KPQW1zeSpi8i3jvXfS5+eeu6YtPdP2+Gc/LxL0b9mT7dI/yJ0LmeC9k9fnt6/En860Q4ZTmk/ebS7J7E3vy+PTgen37WvzLiC/u0P3grfRVpCervBnSlxefvOO9T+ah/ayGZ+V/+g23XjRSsdXtQ2y/WK0vQzYPXbKPs3Y/E+IP6Sv6T5b3QvKxt3eIfX7+5AcrNj6s2M8P6F5dMt09Pv48SUgj+an1wVPJ/PH5afz96jv/2Uz7O3/L54e3PwiZv0lI7+c+m+vj3ZDHbxDi+0OIv7ehCbuXzwsV472Q8SHkuTv7SYg+9Ltt8WXEF9vi67eifDLPK9Tr0+WYr66mcil0flYzr3dxv3YL6I9CvnQPqD729z+V/e1P5fVb+dptoPry4hPz5OvFFeofZPQR0PN4zt7M6Osuzwx/8xjoa3eT/iDka7eT/ijkS/eT/ujI8kuDkj8K+dKgpL6+UelL2/uriK9u7y/fytcGJXW8nE98LIYcH/vdg/6vjUr+IORro5I/OsP0pVHJH56m+sqopI5vTzn/6LTOl0YlVR+/yTm3l2chvzI5/jriS5Pj+mqa9qvr9OVSfGVyXF9dlXruMfNF8zxe/fzBcT9I+eJp7tfXhBZzQI9Pn+an336Ew8uIL3az15eCXfpS8PwsQk2+/UZeRXzxjbyeduCqwYvnGI3x+gFyPdOkYp9eWn/5ADkenqPrs1JRm9+utvE7ztF8aRb3VfOb0oemT/70oqm+vCC1ecbWk/3NkLD+tt7xdsiHg9OI+PkzqHLdAtVr5OPNTD8RMbj+8uS3lkL7dM6T/dN9F/8Njvd/FDJ/k5CvHO//MOTxG4R86Xj/5Wfz4bTSNB3vRLC78OT49OOdr471Hx9O6H56mk1f7lLuzZlYe7yzFF+LeLkuIlid8ek5ZX11P9NXTha8XIb5odzmp2NSLyM2z8abn58Kfh0xaT17vbEU357El+vHS2sZrl8ZfSdic+72+iXItyI43Xn9Jt5n28SrZ9t9uf39IGT+JiFfan8/Cnn8BiHfbn/rwS7D9dNv70R82Ou4fnXqs7eyxrf3Zl8+xutLe7Mv38jgM1nj8xOdy3+/3rW0H0Up6+OtTD/xNtR5GzrfKfr14ec+lsk7G9YXrz49vn/t6fH9K0+P7193enz/ek/egvbtBviDkPmbhHypAf4o5PEbhHy7AX7xas/j+9d6sqa+1wBfRny/AX7xSo897HdsgN/u4sGn8TxR65++iVd31Fv/zI/bh6vEsn+Vsb6d8fqtcLp6xafVmj9F9+li8OMTHh9OCfzMYnwYHlzrrZ3hf4x458hifJgz+TiROR4/kdAltj/s6Xw9QR89vKyPD+M/49ePmn71nLE+SeQfdul/JoFbW+eHb6OfeRfMpT2WvZPAHp9+bJm/fhfjd854fpl1qcfjzYzY8WHv9b2MzU+SbHtry5L+ZTL9OKj3M59qN85n2It18fKpGcblpA9TpD+VIVxil3hzOYRfWRuPN5eD2/Gf+OZy+Icv9g+98+cy2A/++HzEn8rgFhJRf/O9KHt+uuSNLSy4IWe+0zU2c6DxTo18cet8tQQ91f9x1+In/p6LHVu/twbe+vvvf5fr6FNKOtzf+RS+/7Tsr177fvVdPvrm7aHvHNb57Gv4/vFnQH61Z2XfviX05cfZt7B7jHcejbmN5yC+82zN+XAeYjjfOEZ/XlPhSW/jncdqBm8hPr0yYv7tc0cvI7521GG2v7smXkfwsI65PpT3/ImI3aePnqew472I/tJ7XqaOn9+sv3bD4+O76+Hx3bXw+B3Xwfcf2fW80ti3CXx87O2XFyF88gicD49d0X/cFOark5mTx4bND48N+4mI515+70LZ+uwBoz+I4CSPf9gb/HXE+l0josfP4sNzy38iYPWZyI/3a/xEwGai6MP9mT8T0Jfm9otPYn1p/+W9gOfePDOa8tZaeO4FMuD14W7IX0XE/PZSvHwYXn9rjQ/74z8TwA0e098K6Jv0x4ep258I4HhA460A44ft5L2APr1vut8LqHVg462P8SsPP369Nf7Db6it9yI+jD0OeS/iw72s8d5SDO7LH/beJt3f2mN+vj28eqQTT3Qan35l2n75VMX+ttn2YVdQ1q8yXt22qYtZsg8jbfKrPbn9appj923O+nFQ8f/JeDkh/Ah+Xe/jvUq/fjcv1+nXfurp6xmf3ybwMuOLtxr8IONLtxr8aDm+cqvB6w19f/gJ47dab5+a0g97pz8T0CN6Ku8tQY/nqX22BC/vCeBn1j+sQ/mHv/dXT6H79sHz6J2Zf/jd4l8vwqtn0X5p7vTVInjf6fnx6W/y5b/vHfQRb76FL829urx63OeX5l791SWm3yDia4d8ryO+dND3g4hvHvZ97UFj/mqi+tuF8bXHjL06cPzSQ8ZeBXzpEWOvAr70gLGX6+Ar8/U+vn3z5cuIb1/L/tqTuHz8nicpv/Ycrleng770FK5XAV96BtfLt/CV20Zcvz2e8TLi21vDF39/4fVEPVP567N7118GfJgPHm+Mdwzu8XoehOs7AcLTMz7uv723BJ+9BddXP/72hRGXlzuh3t+X8/HiF8i/f6Dj9v0DnXwi1zcPdNx+iwOdlx/KdctvH35+fHbrrxbkmzep/2AZBmd1Pv4u1a+WYf2uy/BhPVi8UyBfe8rN1yPeGar76hNuXh6kfO35Ni+X4mtPt8l78b/53fEq4tvfHV99ts3riC892eblJ/K159q8jvjSE1zcf78ZRYv+QO3XNz3+z+c//fFf//z3f/7L3/71j//x57/99d+ff/jfV9bf//zHf/nLn+5//N//+dd//fD//sf//2/1//zL3//8l7/8+f/887/9/W//+qf/9Z9//9OVdP1/vzzu//kfrjr+4Or6P//wiz7/+bkPqhfbk5/nNNYflsr1z5H//DzX8PyX8fxnuf74eRVG/vD8n3n9C8n/4nkw//zPHv/zv6/F/78=", + "bytecode": "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", + "debug_symbols": "tb3fjizZbWf9Ln2ti+Qmubm3X2UwMGSPZiBAkAzZ/oAPht99MriDXKUeVJ46Wd03zqX2qd+KjAwy4w8j8r9++V9/+pf//D///Oe//u+//fsv//Q//uuXf/n7n//ylz//n3/+y9/+9Y//8ee//fX5X//rl8f1f/b45Z/kD79sPS92Xvy8zF/+aT5f4rys87LzRR6P+1Xu13G/6v1q96vfr/N+jft13a93ntx5cufJnSd3ntx5cufJnSd3ntx5cueNO2/ceePOG3feuPPGnTfuvHHnjTtv3Hl65+mdp3ee3nl65+mdp3ee3nl65+mdZ3ee3Xl259mdZ3ee3Xl259mdZ3ee3Xl+5/md53ee33l+5/md53ee33l+5/mdN++8eefNO2/eefPOm888vV7n/Rr367pf93mNx/0q9+u4X/V+tfv1zos7L+68uPPimRfP1/W4X+V+Hfer3q92v/r9Ou/XuF/X/Xrn7Ttv33n7ztt33r7z9p2377x9513lsa7Xna/jqo98lft13K96v9r96vfrvF/jfl336zNvP1+v+shXuV/H/ar3q92vfr/O+zXu13W/PvPk8YSrQA48E0UuGAVaYAVeMAuiYBXsG65SOVDJWslayVrJWslayVrJWslayVbJVslWyVbJVslWyVbJVslWyVbJXsleyV7JXsleyV7JXsleyV7JXsmzkmclz0qelTwreVbyrORZybOSZyVHJUclRyVHJUclRyVHJUclRyVHJa9KXpW8KnlV8qrkVcmrklclr0pelbwreVfyruRdybuSdyXvSt6VvCt538n6eBRIwSjQAivwglkQBaugkqWSpZKlkqWSpZKlkqWSpZKlkqWSRyVXDWrVoFYNatWgVg1q1aBWDWrVoFYNatWgVg1q1aBWDWrVoFYNatWgVg1q1aBWDWrVoFYNatWgVg1q1aBWDWrVoGYNjgtWwb4hazBBCkaBFliBF8yCSvZK9kqelTwreVbyrORZyVmDesEsiIIr2S7YN2QNJkjBKNACK/CCWRAFV7JfsG/IGky4kucFo0ALrOCZPK7Ve9XggShYBfuGqwYPSMEo0AIrqORdybuSdyXvO9kejwIpGAVaYAVeMAuiYBVUslSyVLJUslSyVLJUslSyVLJUslTyqORRyaOSRyWPSh6VPCp5VPKo5FHJWslayVrJWslayVrJWslayVrJWslWyVbJ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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index e598eec8e31..3de1a3ae152 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/hashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -231,7 +231,7 @@ expression: artifact } } }, - "bytecode": "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", + "bytecode": "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", "debug_symbols": "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", "file_map": { "3": { diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 8325e236a6c..acfae7fe09a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -40,8 +40,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_0.snap index 5243ba1ba7a..5921c945e6e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_0.snap @@ -40,8 +40,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 2e64aeeac23..2925e85bff8 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/higher_order_functions/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -40,8 +40,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index b28a5dfb70e..8fa8d28a3a8 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -66,8 +66,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjdTus6EEbfpde9iD0ee8yrIIQKlK1KVUHdcKQjxLsfT+wV4IKKE276rZDMqhP/xPRt87C/e/1zezg9Pv3dXF2/be7Oh+Px8Of2+HS/ezk8ndpf3zaTf2j7DNuNhh6xh/RIPbRH7lF6WI+6uYrbTZ56hB6xR7NIi9RDe+QepYf1qHOUqUfo0SyphfRIPXQOa+W5hfWoc9SpR+gRe0iP1EN75B7dUruldkuYmkY9w8jYMzZF8WxV5tmury1lGhlG+lObHPy5BYcMlAEpjGtSBASgPBkX1wFzX80QgAgIkAC+Xfn2uefEwYA6wPuvQwAiIEACFMgA5ow5Yy6YC+aCuWAumAvmgrm4OTkYUAfYBAQgAgIkQIEMYDbMhrlirpgr5oq5Yq6YK+aKuWKuwxynCQhABNycHRKgQAYKYEAdECYgABHAHDAHzAFzwBwwB8zRPcXBq8zBq6pDAQyoA3xWdAhABARIgAKYBbNgFswJs0+iODn4ehMcBEiAAhkogAF1gM+vDgHArJgVs2JWzIpZMSvmjDljzpgzZp9fMTookIECGFAH+PzqEIAICOBmcVAgz2tYLH0ti/Nc8j72uRR9OPpc6iCAW9RBgQwUwIA6wOdShwC42QeWz6UOCVAgAwUwoHYQn0sdAhABARKgQAYKYABmn0uxOAQgAgIkQIEMFMCAOiBijpjn2WUOAiRAgQwUwIA6YJ5vMwQAs2AWzIJZMAtmwSyYE+aEOWFOmBPmhHnu9+oQgAgIkAAFMlAA3yFMDr5HaPMkeb9LdAhABATwKnGoA7xPJTl4lTp4lb6/bzfsim5fzvu9b4o+bZPa5ul5d96fXjZXp9fjcbv5Z3d8nS/6+7w7zfmyO7ezrY3700PLJnw8HPdO79uP6un70va2HMUxfpTrz+u1/Kq+LXzU17KiXgL1bRytqE/L/SfT7+r1QvstKzdgFhZDsJ+2QH2MzAKVtOIOilJvU1xRr5knqEVW1Odkoz7nNSOgLD1Y4rfttwsj0CKCttWyjx6oXwwhXujESZdZMH26if+jCLKMg7apXKVoOwYUbdX/VnFhNLZXDNOxGfKqVoivdKMVEtcpKkOy7ZjWtSKlpRVJwyqFlkWRVz6L7Cv6UCRdpyjLsyhRfq9Y2aklLZ1qKztV84di3Y20l/ai0HWK9lZdxkWs3ykuvTDyMrIk27cTNV5Ycdo6y4r7uTvKj5tQMs9BbAprbqIsr93VhlR/Z8iJIZU/9+WPn0I2+iGbrapf3hvT1++/aUe7+8P5y09O7246H3Z3x/04fHw93X86+/LvM2f4yer5/HS/f3g979308btV+7iWttCK2U37D9uP2jtQcm5HbRd43caOzGf8wlK2Fv3ArzPZmt68exP/Aw==", + "bytecode": "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", + "debug_symbols": "pZjLTvNIEEbfJess3F1dfeFVEEIBwq9IUUD5YaQRyrtPl8vHCYtEjNnkO8auk7b74iZfq5ft0+efx93h9e3v6u7+a/V03O33uz+P+7fnzcfu7dD/+rUa7EP7Z1ivNHhED/FIHuqRPYpH9Wiru7he5cEjeESPbpEeyUM9skfxqB5tjDJ4BI9uST3EI3noGLWX5x7Vo43RBo/gET3EI3moR/ZwS3NLc0sYukYtw5TRM3ZFsexV1bJf33rKMGWY0p7aYGDPLRhkoEyQwnRNioAAlKfKxW2Csa9GCEAEBEgA3658+9hzYlCBNoH1n0MAIiBAAhTIAOaMOWMumAvmgrlgLpgL5oK5mDkZVKBNUAcgABEQIAEKZABzxVwxN8wNc8PcMDfMDXPD3DA3zG0yx2EAAhABM2eDBCiQgQJUoE0QBiAAEcAcMAfMAXPAHDAHzNE8xcCqqoFVNYMCVKBNYLPCIQARECABCmAWzIJZMCfMNoniYGDrTTAQIAEKZKAAFWgT2PxyCABmxayYFbNiVsyKWTFnzBlzxpwx2/yK0UCBDBSgAm0Cm18OAYiAAGYWAwXyuIbF4mtZtLkUbRTaXHKIgFnUIAEKZKAAFWgT2FxyCICZbWDZXHJIgAIZKEAFmoPYXHIIQAQESIACGShABczcB7rYXHIIQAQESIACGShABTBHzBGzza5YDQRIgAIZKEAF2gQ23xwCgFkwC2bBLJgFs2AWzAlzwpwwJ8wJc8Js/S6DQQAiIEACFMhAAWyHEAxsj9BHc7J+FzEIQAQEsKpk0CawPhU1sKpsYFX5dFqv2BU9fhy3W9sUXWyT+ubpfXPcHj5Wd4fP/X69+mez/xwv+vu+OYz5sTn2s72x28NLzy583e23Rqf1uXq4XtrfllNxjOdy/Xm9ll/V94WP+lYW1Eugvo+jBfVpvv9U9Vq93mh/zcoN1BpmQ6g/bYHaqBkFKmnBHRSlvg5xQb1mnqAWWVCfU53qc14yAsrcgyVebX+9MQJrRNC3WvXcA+2bIcQbnTjoPAuGi5v4P4og8zjom8pFir5jQNFX/auKG6Oxv2KYjt2QF7VCbMmbWiFxkSK1jEKHZa1IaW5F0rBIcR6YfTdTlils1Z8USZcpCtOz747k94qFnVrS3Kl1WaeK5rNi2Y30l/as0GWK/ladx0Vsy1rR5lak66Pz1jsnz4NTcr0612O7ruhLNYv2ZY+WHzehZG5C6hCW3ESZ39yLDan9zpATozJfDocfP4Vc6Ydc66L6+dUzfP/+h360ed4dv/1qdTLTcbd52m+nw9fPw/PF2Y9/3znDr17vx7fn7cvncWum809f/eNe+lottT70f9LtqK9WknM/6hvJ+76PlfGMXVjKukY7sOuqrKs+nKyJ/wE=", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_0.snap index 59d50918884..97102d742a0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_0.snap @@ -66,8 +66,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjRTuM6EIbfpde9iGc8Y5tXQStUoKwqVQV16ZGOUN99PZ75A1w0Qtmb/l9I/NWJx3box+Z5/3j5/XA4vbz+2dzdf2wez4fj8fD74fj6tHs/vJ76Xz82k31I/0zbjSQP8mCP7CEe6lE8qkfb3NF2o5NH8iCPbuEe2UM81KN4VI82okweyaNbcg/2yB4yovbm2qN6tBFt8kge5MEe2UM81MMtzS3NLWnqGrFMkRTZTc0yR0qkRpbIGtk80xSZIikyfCl8KXwpfCl8KXwpfBQ+siGbDAjAgAwQgAIKoAJaAE8AmBlmhplhZpgZZoaZYWaYM8wZ5gxzhjnDnM1MBgoogApoAaN8ByQAARiQATALzAKzwCwwK8wKs8KsMCvMCrPCXO1iNuiniqV9VTaogBZgpZqsxKxYk9WglauDAJpfQ1aeDglAAPWLyUrRoQJagFWjQwIQgAEZ4CVJUZIUJUlRkhQlSVGSRCmSIjkyR4YP1UioRkI1EqqRUI2EaiRUI6EaCdVIqEZCNdKovf7caVRaNbBW9u2j0gYIQAEFUAEtYFTagAQgAMwCs8AsMAvMVmlkPRxLZ19CaSyeAxKAAAzIAAEooAAqAOYCc4G5wFxgLjAXmAvMBeYCc4G5wlzNTAYEYEAGCEABBVABLcBWcQczswEBeEwlstkxssQY2wpO2aA5sM0SB7NUAwJY/5qBbUyTgW1NycA2JzKw7YkNKqAF2ARysG3KvsImkAMDMkAACiiACmgBNoscYCaYCWaCmWAmmAlmgtnmEveFgW0uOSQAARiQAQJQQAFUAMwZ5rGy2+PFfOMx3wZkgAAUUAAV0ALGfBsAs8AsMAvMArPALDALzAKzwqwwK8wK81jZ6/W63eCV6eH9vN/bG9OXd6j+ZvW2O+9P75u70+V43G7+2x0v46I/b7vTyPfduZ/tVbY/PffswpfDcW903X62nm43TdqicV9m5+by8/ZS/ql9X/jQvpUV7Tmhfa+jFe3zfP+5yq32stD/qoIbqDXNhjG6P+pBEQ5BnehWD8rCCFTCI+hvA/WzB+2boS7cwyRzEUw6rTEknp9CKnmNoW+XMPQl75YhpYVSmBS12A16S7EwFMIYCuG8ophEMRJSeEV7zTXaq66ZTGWeDIVultLSILDtUzEITGuGkRseIeVJ1xhynvuQJa0xSJkNSqv6oLZNhyHLKkOZn0Mh/mfDqrvgkufRrOtGU/TTcPMuaGF97FsdBoO13lwZSG8r+rKIBfLrcyjfBWVpWuE5qPAqQcU9aK3rBPPEnG73YOkxFkU1cJ3SqpEo81a9XpHbDxSLFZXnqmZZNS/yNG9Wmdo3w69+tHs6nL/9EHU11/mwezzu4/Dlcnr6cvb9/zecwQ9Zb+fXp/3z5bw30+evWf3jnqtu81R+9X+a7ahvOVylH/VXu/v+DwBXO2MXlrKtZAd2XeVtv+pqXfwL", + "bytecode": "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", + "debug_symbols": "pZjRTus6EEX/pc99iGc84zG/go5QgXJUqSqoB650hfj368nMDnClVijnpXuFxKtOPLZD3zeP+/u333eH09Pzn83N7fvm/nw4Hg+/747PD7vXw/Np/PV9M/mHjM+y3UiJoAiOqBESoREtwiL65oa2G50iSgRFDAuPqBESoREtwiL6HG2KKBHDUkdwRI2QOWw01xEW0efoU0SJoAiOqBESoRFh6WHpYSnT0IhnyaTMYeqeNVMyNbNlWmaPLFNmyaTM9JX0lfSV9JX0lfSV9FH6yIdsciAAAypAAApoAAP0BJ4AMDPMDDPDzDAzzAwzw8wwV5grzBXmCnOFubqZHBTQAAboCXP5zlAABGBABcAsMAvMArPArDArzAqzwqwwK8wKs/nF7DBONU//qupggJ7gpVq8xLxYi9egl2uAAHpcQ16eAQVAAI2LyUsxwAA9wasxoAAIwIAKiJKkLEnKkqQsScqSpCxJopJJmZxZM9OHaiRUI6EaCdVIqEZCNRKqkVCNhGokVCOhGmmuvfHcaa40c/BW/u1zpc0gAAU0gAF6wlxpMxQAAWAWmAVmgVlg9koj7+G8dI4llObFc4YCIAADKkAACmgAA8DcYG4wN5gbzA3mBnODucHcYG4wG8zmZnIgAAMqQAAKaAAD9ARfxQPczA4E4Hkqkc+OOd1SHQzQA9hnCZlDAbilO/i2NDn4xlQcfGsiB9+c2KEBDNATfAKROPg25d/lEyiAARUgAAU0gAF6gs+iAJgJZoKZYCaYCWaC2ecSew99Ls3gcymgAAjAgAoQgAIaAGaGucLsKzurAwEYUAECUEADGKAn+HwLgFlgFpgFZoFZYBaYBWaBWWFWmBVmhXl+adGPj+0Gr0x3r+f93t+YvrxDjTerl915f3rd3Jzejsft5p/d8W2+6M/L7jTn6+48zo5y258eRw7h0+G4d/rYfraeLjct2rPxWGaX5vLz9tL+qv1Y+NC+txXtuaD9qKMV7ety/9XkUnu50n9TwQ2YlcVQ7Kc9aMIpsIku9aBdGQEjPILxNmCfPejfDHblHiZZimDSaY2h8PIUSqtrDGO7hGEseZcMpVwphUlRi8OglxRXhkIYQyFcVxSTKEZCGq9or9WyveqaydSWydDoYildGwT2DSsHgWnNMNauMMikqwx16UOVssbw+RjHa0xbZfD9Og1VVhkaSmm8FPFfG1Y9SW51GU1bNZpjw/s0XLwLurI+jq0Ow8lqF1cG0suKsSxigfz6HNp3Qbs2rfAcVHiVwHAParZOsEzM6XIPrj3GpqgGtqmsGom2bNXrFbX/QHG1oupS1Syr5kWdls2qUl/Vh770of5vjfo1jnYPh/O3n7I+3HU+7O6P+zx8ejs9fDn7+u8LzuCnsJfz88P+8e28d9Pn72Hj45ZNt3Vqv8a/3X40Ni02GUfj5fB2/C/B5mf8wta2Rn7g1xlvx1Uf3sX/AA==", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 966d04b6020..5f36e4d4d88 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/merkle_insert/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -66,8 +66,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZnLbttIEEX/RWsv2FVd/civBEHgOEogQJANxR5gEPjfpy+rLhMvxBHIje9RRB6SzapmM/p9+H789vbz6+ny4/nX4dPn34dv19P5fPr59fz89Ph6er6Mf/19mPDHxl99OFjyEA/1yB7mUTyqR/PocxS3FLcUt5RhkRHZwzyGpYyoHs2jz1Enj+QhHuqRPczDLdUt1S3VLc0tzS3NLc0tbVjqCPMoHtWjefQ5+uSRPMRDPdzS3dLd0t3S3dLdkqYpMkVKpEbmSIsskTVy6Dqye6YpMkVKpEbmSIsskTUyfCl8Ej4Jn4RPwifhk/BJ+CR8Ej4JXx7bpQkwvsjI8UVKA1BoDokghHGwpIBMMMI4XiqASmiEHoDic0gEISgBZgwoytChECqhEXoACtIhEeBpAOyFC0TxJVw6ym8GFKBDIqATMCqoPwcjjN0Fg4C6k9EgCZXnkAgW26DUHCohdhcUFjYWVJZDJhihECqhEeLokiZCDKYkISghE4xQCJXQCHGbRCYCzSg2jKqg2hwywQiFUAmNELdJdCIkAs2Ka1cArjQDcKU2IE+ERBCCEjLBCIVQCY1As9FsNBvNRjNKXTAIKHXBqaLUHSqhEXoASt0hEYSghEygudBcaC40F5orzZXmSnOludJcaa40ox2kARqhB6AdHBJBCErIBCMUAswd0AjdW0/QKQ4adxkzs04AIxQCnlvzxo2AZ9e4F4pJWgsAz68KwBOsAfAk7IBMMEIhDHOeAI3QA9BNDokgBCVkghEKgeZEc6JZaBaahWahWWhGN+UEKIRKaIQegG5ySAQhKCETaFaatXqjKTtO544DzB03QyIIQQmZYIRCoDnTnGk2mo1mo9loNpqNZqPZaDaajeZCM/orCyATjIAxVADGEBujmxwSwWIbtIxDJXB39MW8MfrCIROMUAiV0Ag8eufRu6+BtEukRuZIiyyRNbJF+ooqT1NkivRVTI5VTI5VTI5VTI5VTI5VTJ5apK+KcpoiU2T45g4wAK4JR5rrHV/N9T5DIghBCZlghEKohEagWWlWmpVmpXmu9waAuQMKoRIaoQeg3h0SQQhKyASaM82Z5kxzptloNpqNZqPZaDaajWbUu02ARugBqHeHRBCCEjLBCIUAcwI0Qp8XgnluCaTGPcbTxARghEKABbcfreGA88OdwNPEcCfwNDFczLzCx7HnNT4Oia5xMEIhoMJxCHSNQw9A1zgkghCUkAlGKASaO809zDZNhEQQghIyAWa8WaGJHCqhEXoAGskhEYSghEygOdE8P18KoBF6wNxvMySCEJSQCUYoBJqFZqFZaVaalWalWWlWmpVmpVlpVprnfivv7w8Hvud+fb0ej3jN/evFd7wOvzxej5fXw6fL2/n8cPjn8fw2b/Tr5fEy5+vjdXw7aup4+T5yCH+czkfQ+8Ofvafbu45XiNh5LHuX3e3j/un2/nnZf9Twrf3l9v5j+WQ8gdbSYkjt3jOopiFok9w6g7wyAk04fuNlp/05g/7BYCvXMNkyiFOZthiSLqMw3ty2GCQvhrF0u2Votw1jmVjDMATllmHlToyuCMFoi1t3Yq0Wrf5/La7sL8YbOdbQN2tZdhbzmuCuWkz7izHtr8a0vxzXRmJvLWjiOIx1+pZbYYUCq7pFULCMmgWlTJuKYbmEKreLYe02jBebpadVNt3JsZKmYix2NylyXs5irOI2KawuiiLbzqKoLIps2xR1GYsqul+x7UK05uWmto03FStNKm5eiK5M1ePdkHdkvBTe7HBdKe8xw3Gu+3sk6keBrjUYB6KYbhI0XkNpbZtg6dDp9hmsDWMtrAdtU9p0J+ry1NuuyP0OxXpJ5aWw1bb1xnhpXuYJ6VvWD3dN2Xtn7J0T9v75ev90vX+23j9Z75+r90/V+2fq/RP1/nnadPc8bXnnPG22c55eFdwzT68L7pinV4fxvnl6XXHXPL2uuGue3j9Nb5ylv4xPj0+n64cf39/hup4ev52P8fHH2+Xpr29f/33hN/zx/uX6/HT8/nY9wvTnF/zx5zMmF+vyZfwiiE/jP9GsTuPT+P+Uz+NXFG34Zt5wXKnl+eO85Rg6s/TlHaf5Hw==", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 5ef82a2a839..3095fd586ba 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -72,8 +72,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "td3bjmXVkYXhd6lrLnZEzDhMv0qrZQEuWyWVAJWhpRbi3Xuvw/gTLrJl7VLdsMPtzvHn6atVQBp+//CPjz/89q+/f/rpnz//+8Pf/uv3Dz98+fT586d//f3zzz9+/+unn396/l9//+O7D/qPf//1y8ePz//Thz/998+3+uX7Lx9/+vXD33767fPn7z78z/effzv/n/79y/c/na+/fv/l+d8+vvvw8ad/PF+fg//89Pnjcf3x3dtbP95/U3e739i9ePP8z9/eNm/fX/f2sV55+zV6+/b33n79P2//eJQGHhZvC//xOzC8Azte+QCG/l5f9fbxsBfePiz19rHfe/v9DT+BkbwD9XjlA8jg7e0r335eefvx++3X411B9i2/BZfrF4Dlr3wL/entw195+6X3f73/GbT5lp8BvgZp+d574I9v+B5k6u2zXvkcZuu7MPuVX0fr0ffbl72ioEK/jFW+orBKz5Gql97/0fdgTb7y9s37P688x/qhfj9e+fq1q98RL7198favGO7k/c+X+nz/9X7lV8Exvf24fd3bv//9F/kNBU8tvQf9ynfA29vv9x/E8S1/Fdw8yre/8j3wp7fP938vZd/yIyi9/e5XfhX609vvd38zs77ls9geqW+D5/nKr2RmPI6f5yuW7O031eYv/Y7g+S7020J+7UL01y68/2tafsvvR/N6ex/2ax/F20LY+x/FN/2eDH97H/Klj+LPC/3u8yH7m34UW7/Js2Xz0kfxp4V493cJ9S1/n2grjffhpd/pWPJbFct46fPw/C0mC+MvLfCn3Zb50q8wWfn2PsRLC8Ovcrm/+n3YL30t6sHnoR77pYXF+/Da77ytIt4WXnpeVPL9UC/92ctf3od66atZb9+T1a99JjffDx0vLfTmfZjHSx/F8Nt4m3jpazG23hZe+loMfypns+Jr34f1kqzJt8/DS39V5y/vQ772UWxk7cdr78PE28JLX8399nuYbf6174O99HnY/vZ58P2174O/9FHst+fFfulXe39E8uBdj5cWPN4W7GsX8rWPIvmrxY955dnt9uB9MOuvXXjp9/Z/WVjvLux66fdR//38D9//+OnLX/5OyQd7fud898HPP8b5x3X+MZ8D332o8499/nHOP+7zj/a4Xux68eslrpd1vVwLdk3YtWHXiF0rfq34teLXil8rfq34teLXil8rfq34c+X5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DtcROpaO1FE6Wsfo0LJp2bRsWjYtm5ZNy6Zl07Jp2bTsWnYtu5Zdy65l17Jr2bV8GDz+xw37MHgeh8HrMB2uI3QsHamjrh8W3ofB6xgdx3Icf9/2ocN0uI7QsXTk9XO7+zB4Ha3jWD7+RvFh8DwOg9dhOlxH6FjXj9Duw+B1lI5j+fhsHAavY9/HYfA6TIfrCB1LR14/37oPg9fROp7LdfxN6cNgHR/gYfA6TMdz+fifOezD4HUsHanjWD4+nMPgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vPv0f/4DIu5wquxZVcxdVcw0XDaBgNo2E0jIbRMBpGw2gYDafhNJyG03AaTsNpOA2n4TSCRtAIGkHj/MGXOa/kKq7mGq6t68B6X8blXMFFY9FYNBaNRWPRSBpJI2kkjaSRNJJG0kgaSaNoFI2iUTSKRtEoGkWjaBSNptE0mkbTaBpNo2k0jabRNIbG0BgaQ2NoDI2hMTSGxtDYfF9tvq8231eb76vN9+7me3fzvbv53t187+LccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44P39c575oBI2gETSCxqKxaCwai8aisWgsGovGorFoJI2kkTSSRtJIGkkjaSSNpFE0ikbRKBpFo2gUjaJRNIpG02gaTaNpNI2m0TSaRtNoGkNjaAyNoTE0hsbQGBpDY2jg3HBuODecG84N54Zzw7nh3HDuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D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", + "bytecode": "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", + "debug_symbols": "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lkfLo+Wt5a3lreWt5a3lreWt5a3lreV9L+/HQ4fpcB2hY+lIHaWjdYwOLZuWTcumZdOyadm0bFo2LZuWTcuuZdeya9m17Fp2LbuWXcuHwTx+s/QweB6HweswHa4jdCwdqaOuHzfeh8HrGB3Hch6/b/vQYTpcR+hYOvL6yd99GLyO1nEsn78RvO/jMHgdpsN1hI5jeR9H6igdffxPg45jdOz7OAxeh+lwHaFj6cjrJ2T3YfA6WsexvI7jWD4+wMPgdZiOY/n4je/D4HUsHanjWD7e58PgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vP36N/cBmXcwXX4kqu4mqu4aJhNIyG0TAaRsNoGA2jYTSMhtNwGk7DaTgNp+E0nIbTcBpBI2gEjaBxMG07r+QqruYarq3r/FGY6zIu5wouGovGorFoLBqLRtJIGkkjaSSNpJE0kkbSSBpFo2gUjaJRNIpG0SgaRaNoNI2m0TSaRtNoGk2jaTSNpjE0hsbQGBpDY2gMjaExNIbG5utq83W1+brafF1tvnY3X7ubr93N1+7maxfnhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPD+fnjOvdFI2gEjaARNBaNRWPRWDQWjUVj0Vg0Fo1FI2kkjaSRNJJG0kgaSSNpJI2iUTSKRtEoGkWjaBSNolE0mkbTaBpNo2k0jabRNJpG0xgaQ2NoDI2hMTSGxtAYGkMD54Zzw7nh3HBuODecG84N54Zzx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54Hz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", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nstruct FooParent {\n array: [Field; 3],\n foos: [Foo; 4],\n}\n\nfn main(mut x: [Foo; 4], y: pub Field) {\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n // Check dynamic array set\n if y != 2 {\n x[y].a = 50;\n } else {\n x[y].a = 100;\n }\n assert(x[3].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n let foo_parent_one = FooParent { array: [0, 1, 2], foos: x };\n let foo_parent_two = FooParent { array: [3, 4, 5], foos: x };\n let mut foo_parents = [foo_parent_one, foo_parent_two];\n\n assert(foo_parents[y - 3].foos[y - 3].b == [2, 3, 20]);\n assert(foo_parents[y - 3].foos[y - 2].b == [5, 6, 21]);\n assert(foo_parents[y - 3].foos[y - 1].b == [100, 101, 102]);\n assert(foo_parents[y - 3].foos[y].b == [11, 12, 23]);\n\n assert(foo_parents[y - 3].foos[y].a == 50);\n\n assert(foo_parents[1].foos[1].b == [5, 6, 21]);\n if y == 2 {\n foo_parents[y - 2].foos[y - 2].b = [10, 9, 8];\n } else {\n foo_parents[y - 2].foos[y - 2].b = [20, 19, 18];\n }\n assert(foo_parents[1].foos[1].b == [20, 19, 18]);\n\n assert(foo_parents[1].foos[1].b[2] == 18);\n if y == 3 {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 5000;\n } else {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 1000;\n }\n assert(foo_parents[1].foos[1].b[2] == 5000);\n // Set a dynamic array value\n foo_parents[y - 2].foos[y - 3].b = foo_parents[y - 2].foos[y - 2].b;\n assert(foo_parents[1].foos[0].b == [20, 19, 5000]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_0.snap index 5ef82a2a839..3095fd586ba 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_0.snap @@ -72,8 +72,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "td3bjmXVkYXhd6lrLnZEzDhMv0qrZQEuWyWVAJWhpRbi3Xuvw/gTLrJl7VLdsMPtzvHn6atVQBp+//CPjz/89q+/f/rpnz//+8Pf/uv3Dz98+fT586d//f3zzz9+/+unn396/l9//+O7D/qPf//1y8ePz//Thz/998+3+uX7Lx9/+vXD33767fPn7z78z/effzv/n/79y/c/na+/fv/l+d8+vvvw8ad/PF+fg//89Pnjcf3x3dtbP95/U3e739i9ePP8z9/eNm/fX/f2sV55+zV6+/b33n79P2//eJQGHhZvC//xOzC8Azte+QCG/l5f9fbxsBfePiz19rHfe/v9DT+BkbwD9XjlA8jg7e0r335eefvx++3X411B9i2/BZfrF4Dlr3wL/entw195+6X3f73/GbT5lp8BvgZp+d574I9v+B5k6u2zXvkcZuu7MPuVX0fr0ffbl72ioEK/jFW+orBKz5Gql97/0fdgTb7y9s37P688x/qhfj9e+fq1q98RL7198favGO7k/c+X+nz/9X7lV8Exvf24fd3bv//9F/kNBU8tvQf9ynfA29vv9x/E8S1/Fdw8yre/8j3wp7fP938vZd/yIyi9/e5XfhX609vvd38zs77ls9geqW+D5/nKr2RmPI6f5yuW7O031eYv/Y7g+S7020J+7UL01y68/2tafsvvR/N6ex/2ax/F20LY+x/FN/2eDH97H/Klj+LPC/3u8yH7m34UW7/Js2Xz0kfxp4V493cJ9S1/n2grjffhpd/pWPJbFct46fPw/C0mC+MvLfCn3Zb50q8wWfn2PsRLC8Ovcrm/+n3YL30t6sHnoR77pYXF+/Da77ytIt4WXnpeVPL9UC/92ctf3od66atZb9+T1a99JjffDx0vLfTmfZjHSx/F8Nt4m3jpazG23hZe+loMfypns+Jr34f1kqzJt8/DS39V5y/vQ772UWxk7cdr78PE28JLX8399nuYbf6174O99HnY/vZ58P2174O/9FHst+fFfulXe39E8uBdj5cWPN4W7GsX8rWPIvmrxY955dnt9uB9MOuvXXjp9/Z/WVjvLux66fdR//38D9//+OnLX/5OyQd7fud898HPP8b5x3X+MZ8D332o8499/nHOP+7zj/a4Xux68eslrpd1vVwLdk3YtWHXiF0rfq34teLXil8rfq34teLXil8rfq34c+X5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DtcROpaO1FE6Wsfo0LJp2bRsWjYtm5ZNy6Zl07Jp2bTsWnYtu5Zdy65l17Jr2bV8GDz+xw37MHgeh8HrMB2uI3QsHamjrh8W3ofB6xgdx3Icf9/2ocN0uI7QsXTk9XO7+zB4Ha3jWD7+RvFh8DwOg9dhOlxH6FjXj9Duw+B1lI5j+fhsHAavY9/HYfA6TIfrCB1LR14/37oPg9fROp7LdfxN6cNgHR/gYfA6TMdz+fifOezD4HUsHanjWD4+nMPgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vPv0f/4DIu5wquxZVcxdVcw0XDaBgNo2E0jIbRMBpGw2gYDafhNJyG03AaTsNpOA2n4TSCRtAIGkHj/MGXOa/kKq7mGq6t68B6X8blXMFFY9FYNBaNRWPRSBpJI2kkjaSRNJJG0kgaSaNoFI2iUTSKRtEoGkWjaBSNptE0mkbTaBpNo2k0jabRNIbG0BgaQ2NoDI2hMTSGxtDYfF9tvq8231eb76vN9+7me3fzvbv53t187+LccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44P39c575oBI2gETSCxqKxaCwai8aisWgsGovGorFoJI2kkTSSRtJIGkkjaSSNpFE0ikbRKBpFo2gUjaJRNIpG02gaTaNpNI2m0TSaRtNoGkNjaAyNoTE0hsbQGBpDY2jg3HBuODecG84N54Zzw7nh3HDuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D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", + "bytecode": "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", + "debug_symbols": "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lkfLo+Wt5a3lreWt5a3lreWt5a3lreV9L+/HQ4fpcB2hY+lIHaWjdYwOLZuWTcumZdOyadm0bFo2LZuWTcuuZdeya9m17Fp2LbuWXcuHwTx+s/QweB6HweswHa4jdCwdqaOuHzfeh8HrGB3Hch6/b/vQYTpcR+hYOvL6yd99GLyO1nEsn78RvO/jMHgdpsN1hI5jeR9H6igdffxPg45jdOz7OAxeh+lwHaFj6cjrJ2T3YfA6WsexvI7jWD4+wMPgdZiOY/n4je/D4HUsHanjWD7e58PgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vP36N/cBmXcwXX4kqu4mqu4aJhNIyG0TAaRsNoGA2jYTSMhtNwGk7DaTgNp+E0nIbTcBpBI2gEjaBxMG07r+QqruYarq3r/FGY6zIu5wouGovGorFoLBqLRtJIGkkjaSSNpJE0kkbSSBpFo2gUjaJRNIpG0SgaRaNoNI2m0TSaRtNoGk2jaTSNpjE0hsbQGBpDY2gMjaExNIbG5utq83W1+brafF1tvnY3X7ubr93N1+7maxfnhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPD+fnjOvdFI2gEjaARNBaNRWPRWDQWjUVj0Vg0Fo1FI2kkjaSRNJJG0kgaSSNpJI2iUTSKRtEoGkWjaBSNolE0mkbTaBpNo2k0jabRNJpG0xgaQ2NoDI2hMTSGxtAYGkMD54Zzw7nh3HBuODecG84N54Zzx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzhfPzJ5eOfyKGnT+61Ou8gmtxJVdxNddwbV2H8/syLhpGw2gYDaNhNIyG0XAaTsNpOA2n4TSchtNwGk4jaASNoBE0gkbQCBpBI2gEjUVj0Vg0Fo1FY9FYNBaNRWPRSBpJI2kkjaSRNJJG0kgaSeP86/M6L+NyruBaXMlVXM01XFtX02gaTaNpNI2m0TSaRtNoGkNjaAyNoTE0hsbQGBpDY2hsGpvGprFpbBqbxqaxaWwaW43zh6Puy7icK7gWV3IVV3MNFw2jYTSMhtEwGkYD54nzxHniPHGeOE+cJ84T54nzxHniPHGeOE+cJ84T54nzxHniPHGeOE+cJ84T54nzxHniPHGeOE+cJ84T54nzxHniPHGeOE+cJ84T54nzxHni/PzBqvuiUTSKRtEoGkWjaBSNotE0mkbTaBpNo2k0jabRNJrG0BgaQ2NoDI2hMTSGxtAYGpvGprFpbBqbxqaxaWwam8ZW4/wBrPsyLucKrsWVXMXVXMNFg+d58TwvnufF87x4nhfP88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88Z547xx3jhvnDfOG+eN88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjgfnA/OB+eD88H54HxwPjg/f1jt+Mei2fnTavflXEdjzmtxJdfR2Of1bBz/VGA7f2jtvrauw/l9GZdzBdfiSq7iomE0jIbTcBpOw2k4DafhNJyG03AaQSNoBI2gETSCRtAIGkEjaCwai8aisWgsGovGorFoLBqLRtJIGkkjaSSNpJE0kkbSSBpFo2gUjaJRNIpG0SgaRaNoNI2m0TSaRtNoGk2jaTSNpjE0hsbQGBpDY2gMjaExNIbGprFpbBqbxqaxaWwam8amse+Gnz8Pd1/G5VzBtbiSq7iaa7hoGA2jYTSMhtEwGkbDaBgNo+E0nIbTcBpOw2mczs9/RNTp/LqGa+s6nV+XcTlXcC2u5KIRNIJG0Fg0Fo1FY9E4ncd5JVdxNddwHY11XKfz6zIu5wouPo7k40g+juTjSD6O5OMoPo7i4yg+juLjKBpFo2gUjaJRNJpG02gaTaNpNI2m0TSaRtMYGkNjaAyNoTE0hsbQGBpDY9PYNDaNTWPT2DQ2jU1j09hqnD8Pd1/G5VzyYTg3nBvODeeGc8O54dxwbjg3nBvODeeGc8O54dxwbjg3nBvODeeGc8O5OQ2n4TScRtAIGkEjaASNoBE0gkbQCBqLxqKxaCwai8aisWgsGovGopE0kkbSSBpJI2kkjaSRNJJG0SgaRaNoFI2iUTSKRtEoGk2jaTSNptE0mkbTaBpNo2kMjaExNIbG0BgaQ2NoDI2hsWlsGpvGprFpbBqbxqaxafA8d57nzvPceZ47zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zh3njnPHuePcce44d5w7zgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeA8cB44D5wHzgPngfPAeeB84XzhfOF84fz8ebjJ8zoadV7F1VzDtXWdzq/LuJwruBYXDaNhNIyG0XAaTsNpOA2n4TSchtNwGk4jaASNoBE0gkbQCBpBI2gEjUVj0Vg0Fo1FY9FYNBaNRWPRSBpJI2kkjaSRNJJG0kgaSaNoFI2iUTSKRtEoGkWjaBSNptE0mkbTaBpNo2k0jabRNIbG0BgaQ2NoDI2hMTSGxtDYNDaNTWPT2DQ2jU1j09g0thrnz8Pdl3E5V3AtruQqruYaLho4T5wnzhPnifPEeeI8cZ44T5wnzhPnifPEeeI8cZ44P38e7viXyvr583D3tXWdzq/LuJwruBZXchUXjaARNBaNRWPRWDQWjdP5Pq86/gV059Vcw7V1nf8A9+uikTSSRtJIPo7k40g+juTjSD6O4uMoGkWjaBSNolE0ikbRKBpNo2k0jabRNJpG02gaTaNpDI2hMTSGxtAYGkNjaAyNobFpbBqbxqaxaWwam8amsWlsNQrnhfPCeeG8cF44L5wXzgvnhfPCeeG8cF44L5wXzgvnhfPCeeG8cF44L5wXzgvnhfPCefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8L57nxfO8eJ4Xz/PieV48z4vnefE8b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPGeeO8cd44b5w3zhvnjfPB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD44H5wPzgfng/PB+eB8cD443zjfOD9/Hm7becXxL/w+r2djx3klV3E113BtXYfz+zIu5wouGkbDaBgNo2E0nIbTcBpOw2k4DafhNJyG0wgaQSNoBI2gETSCRtAIGkFj0Vg0Fo1FY9FYNBaNRWPRWDSSRtJIGkkjaSSNpJE0kkbSKBpFo2gUjaJRNIpG0SgaRaNpNI2m0TSaRtNoGk2jaTSNoTE0hsbQGBpDY2gMjaExNDaNTWPT2DQ2jU1j09g0No19N+L8ebj7Mi7nCq7FlVzF1VzDRcNoGA2jYTSMhtEwGkbDaBgNp+E0nIbTcBqn83VexdVcw7V1nc6vy7ic62jkeS2u5Cqu5hquret0fl3G5Vw0Fo1FY9FYNBaNRSNpJI2kkTSSRtJIGkkjaSSNolE0ikbRKBpF43Re59Vcw7V1nc6vy7icK7gWV3LRaBpNo2kMjaExNIbG0BgaQ2NoDI2hsWlsGpvGprFpbBqbxqaxaWw1zp+Huy/jcq7gWlzJVVzNNVw0jIbRMBpGw2gYDaNhNIyG0XAaTsNpOA2n4TSchtNwGk4jaASNoBE0gkbQCBpBI2gEjUVj0Vg0Fo1FY9FYNBaNRWPROJ33eRmXcwXX4kqu4mqu4dq6ikbRKBpFo2gUjaJRNIpG0WgaTaNpNI2m0TSaRtNoGk1jaAyNoTE0hsbQGBpDY2gMjU1j09g0No1NY9PYNDaNTWOrcf483H0Zl3MF1+JKruJqruGiYTSMxul8n1dwHY3j34r/n/efP77/4dOHf7/72+/HvzX5t59+1L8j+fkff/3fX/Tf/PD546dPH//1/S+ff/7xwz9++/zh+Pcpn//dH3//4/8A", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nstruct FooParent {\n array: [Field; 3],\n foos: [Foo; 4],\n}\n\nfn main(mut x: [Foo; 4], y: pub Field) {\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n // Check dynamic array set\n if y != 2 {\n x[y].a = 50;\n } else {\n x[y].a = 100;\n }\n assert(x[3].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n let foo_parent_one = FooParent { array: [0, 1, 2], foos: x };\n let foo_parent_two = FooParent { array: [3, 4, 5], foos: x };\n let mut foo_parents = [foo_parent_one, foo_parent_two];\n\n assert(foo_parents[y - 3].foos[y - 3].b == [2, 3, 20]);\n assert(foo_parents[y - 3].foos[y - 2].b == [5, 6, 21]);\n assert(foo_parents[y - 3].foos[y - 1].b == [100, 101, 102]);\n assert(foo_parents[y - 3].foos[y].b == [11, 12, 23]);\n\n assert(foo_parents[y - 3].foos[y].a == 50);\n\n assert(foo_parents[1].foos[1].b == [5, 6, 21]);\n if y == 2 {\n foo_parents[y - 2].foos[y - 2].b = [10, 9, 8];\n } else {\n foo_parents[y - 2].foos[y - 2].b = [20, 19, 18];\n }\n assert(foo_parents[1].foos[1].b == [20, 19, 18]);\n\n assert(foo_parents[1].foos[1].b[2] == 18);\n if y == 3 {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 5000;\n } else {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 1000;\n }\n assert(foo_parents[1].foos[1].b[2] == 5000);\n // Set a dynamic array value\n foo_parents[y - 2].foos[y - 3].b = foo_parents[y - 2].foos[y - 2].b;\n assert(foo_parents[1].foos[0].b == [20, 19, 5000]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 5ef82a2a839..3095fd586ba 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -72,8 +72,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "td3bjmXVkYXhd6lrLnZEzDhMv0qrZQEuWyWVAJWhpRbi3Xuvw/gTLrJl7VLdsMPtzvHn6atVQBp+//CPjz/89q+/f/rpnz//+8Pf/uv3Dz98+fT586d//f3zzz9+/+unn396/l9//+O7D/qPf//1y8ePz//Thz/998+3+uX7Lx9/+vXD33767fPn7z78z/effzv/n/79y/c/na+/fv/l+d8+vvvw8ad/PF+fg//89Pnjcf3x3dtbP95/U3e739i9ePP8z9/eNm/fX/f2sV55+zV6+/b33n79P2//eJQGHhZvC//xOzC8Azte+QCG/l5f9fbxsBfePiz19rHfe/v9DT+BkbwD9XjlA8jg7e0r335eefvx++3X411B9i2/BZfrF4Dlr3wL/entw195+6X3f73/GbT5lp8BvgZp+d574I9v+B5k6u2zXvkcZuu7MPuVX0fr0ffbl72ioEK/jFW+orBKz5Gql97/0fdgTb7y9s37P688x/qhfj9e+fq1q98RL7198favGO7k/c+X+nz/9X7lV8Exvf24fd3bv//9F/kNBU8tvQf9ynfA29vv9x/E8S1/Fdw8yre/8j3wp7fP938vZd/yIyi9/e5XfhX609vvd38zs77ls9geqW+D5/nKr2RmPI6f5yuW7O031eYv/Y7g+S7020J+7UL01y68/2tafsvvR/N6ex/2ax/F20LY+x/FN/2eDH97H/Klj+LPC/3u8yH7m34UW7/Js2Xz0kfxp4V493cJ9S1/n2grjffhpd/pWPJbFct46fPw/C0mC+MvLfCn3Zb50q8wWfn2PsRLC8Ovcrm/+n3YL30t6sHnoR77pYXF+/Da77ytIt4WXnpeVPL9UC/92ctf3od66atZb9+T1a99JjffDx0vLfTmfZjHSx/F8Nt4m3jpazG23hZe+loMfypns+Jr34f1kqzJt8/DS39V5y/vQ772UWxk7cdr78PE28JLX8399nuYbf6174O99HnY/vZ58P2174O/9FHst+fFfulXe39E8uBdj5cWPN4W7GsX8rWPIvmrxY955dnt9uB9MOuvXXjp9/Z/WVjvLux66fdR//38D9//+OnLX/5OyQd7fud898HPP8b5x3X+MZ8D332o8499/nHOP+7zj/a4Xux68eslrpd1vVwLdk3YtWHXiF0rfq34teLXil8rfq34teLXil8rfq34c+X5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DtcROpaO1FE6Wsfo0LJp2bRsWjYtm5ZNy6Zl07Jp2bTsWnYtu5Zdy65l17Jr2bV8GDz+xw37MHgeh8HrMB2uI3QsHamjrh8W3ofB6xgdx3Icf9/2ocN0uI7QsXTk9XO7+zB4Ha3jWD7+RvFh8DwOg9dhOlxH6FjXj9Duw+B1lI5j+fhsHAavY9/HYfA6TIfrCB1LR14/37oPg9fROp7LdfxN6cNgHR/gYfA6TMdz+fifOezD4HUsHanjWD4+nMPgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vPv0f/4DIu5wquxZVcxdVcw0XDaBgNo2E0jIbRMBpGw2gYDafhNJyG03AaTsNpOA2n4TSCRtAIGkHj/MGXOa/kKq7mGq6t68B6X8blXMFFY9FYNBaNRWPRSBpJI2kkjaSRNJJG0kgaSaNoFI2iUTSKRtEoGkWjaBSNptE0mkbTaBpNo2k0jabRNIbG0BgaQ2NoDI2hMTSGxtDYfF9tvq8231eb76vN9+7me3fzvbv53t187+LccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44P39c575oBI2gETSCxqKxaCwai8aisWgsGovGorFoJI2kkTSSRtJIGkkjaSSNpFE0ikbRKBpFo2gUjaJRNIpG02gaTaNpNI2m0TSaRtNoGkNjaAyNoTE0hsbQGBpDY2jg3HBuODecG84N54Zzw7nh3HDuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D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", + "bytecode": "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", + "debug_symbols": "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lkfLo+Wt5a3lreWt5a3lreWt5a3lreV9L+/HQ4fpcB2hY+lIHaWjdYwOLZuWTcumZdOyadm0bFo2LZuWTcuuZdeya9m17Fp2LbuWXcuHwTx+s/QweB6HweswHa4jdCwdqaOuHzfeh8HrGB3Hch6/b/vQYTpcR+hYOvL6yd99GLyO1nEsn78RvO/jMHgdpsN1hI5jeR9H6igdffxPg45jdOz7OAxeh+lwHaFj6cjrJ2T3YfA6WsexvI7jWD4+wMPgdZiOY/n4je/D4HUsHanjWD7e58PgdYyOfR+HweswHa4jdCwdqUPLo+XR8mh5a3lreWt5a3lreWt5a3lreWt538vP36N/cBmXcwXX4kqu4mqu4aJhNIyG0TAaRsNoGA2jYTSMhtNwGk7DaTgNp+E0nIbTcBpBI2gEjaBxMG07r+QqruYarq3r/FGY6zIu5wouGovGorFoLBqLRtJIGkkjaSSNpJE0kkbSSBpFo2gUjaJRNIpG0SgaRaNoNI2m0TSaRtNoGk2jaTSNpjE0hsbQGBpDY2gMjaExNIbG5utq83W1+brafF1tvnY3X7ubr93N1+7maxfnhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPD+fnjOvdFI2gEjaARNBaNRWPRWDQWjUVj0Vg0Fo1FI2kkjaSRNJJG0kgaSSNpJI2iUTSKRtEoGkWjaBSNolE0mkbTaBpNo2k0jabRNJpG0xgaQ2NoDI2hMTSGxtAYGkMD54Zzw7nh3HBuODecG84N54Zzx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOHecO84d545zx7nj3HHuOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54HzwHngPHAeOA+cB84D54Hz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", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nstruct FooParent {\n array: [Field; 3],\n foos: [Foo; 4],\n}\n\nfn main(mut x: [Foo; 4], y: pub Field) {\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n // Check dynamic array set\n if y != 2 {\n x[y].a = 50;\n } else {\n x[y].a = 100;\n }\n assert(x[3].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n let foo_parent_one = FooParent { array: [0, 1, 2], foos: x };\n let foo_parent_two = FooParent { array: [3, 4, 5], foos: x };\n let mut foo_parents = [foo_parent_one, foo_parent_two];\n\n assert(foo_parents[y - 3].foos[y - 3].b == [2, 3, 20]);\n assert(foo_parents[y - 3].foos[y - 2].b == [5, 6, 21]);\n assert(foo_parents[y - 3].foos[y - 1].b == [100, 101, 102]);\n assert(foo_parents[y - 3].foos[y].b == [11, 12, 23]);\n\n assert(foo_parents[y - 3].foos[y].a == 50);\n\n assert(foo_parents[1].foos[1].b == [5, 6, 21]);\n if y == 2 {\n foo_parents[y - 2].foos[y - 2].b = [10, 9, 8];\n } else {\n foo_parents[y - 2].foos[y - 2].b = [20, 19, 18];\n }\n assert(foo_parents[1].foos[1].b == [20, 19, 18]);\n\n assert(foo_parents[1].foos[1].b[2] == 18);\n if y == 3 {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 5000;\n } else {\n foo_parents[y - 2].foos[y - 2].b[y - 1] = 1000;\n }\n assert(foo_parents[1].foos[1].b[2] == 5000);\n // Set a dynamic array value\n foo_parents[y - 2].foos[y - 3].b = foo_parents[y - 2].foos[y - 2].b;\n assert(foo_parents[1].foos[0].b == [20, 19, 5000]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 1aeac813400..4bc7c35ee3c 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_0.snap index 1aeac813400..4bc7c35ee3c 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_0.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 40933e617ed..d19f260b243 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_dynamic/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -80,8 +80,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 5e7cc211096..a19afe4e46f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -24,7 +24,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(y: Field) {\n let foo_one = Foo { a: 1, b: [2, 3, 20], bar: Bar { inner: [100, 101, 102] } };\n let foo_two = Foo { a: 4, b: [5, 6, 21], bar: Bar { inner: [103, 104, 105] } };\n let foo_three = Foo { a: 7, b: [8, 9, 22], bar: Bar { inner: [106, 107, 108] } };\n let foo_four = Foo { a: 10, b: [11, 12, 23], bar: Bar { inner: [109, 110, 111] } };\n let mut x = &[foo_one];\n x = x.push_back(foo_two);\n x = x.push_back(foo_three);\n x = x.push_back(foo_four);\n\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n if y != 2 {\n x[y - 2].a = 50;\n } else {\n x[y - 2].a = 100;\n }\n assert(x[y - 2].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_0.snap index 5e7cc211096..a19afe4e46f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_0.snap @@ -24,7 +24,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(y: Field) {\n let foo_one = Foo { a: 1, b: [2, 3, 20], bar: Bar { inner: [100, 101, 102] } };\n let foo_two = Foo { a: 4, b: [5, 6, 21], bar: Bar { inner: [103, 104, 105] } };\n let foo_three = Foo { a: 7, b: [8, 9, 22], bar: Bar { inner: [106, 107, 108] } };\n let foo_four = Foo { a: 10, b: [11, 12, 23], bar: Bar { inner: [109, 110, 111] } };\n let mut x = &[foo_one];\n x = x.push_back(foo_two);\n x = x.push_back(foo_three);\n x = x.push_back(foo_four);\n\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n if y != 2 {\n x[y - 2].a = 50;\n } else {\n x[y - 2].a = 100;\n }\n assert(x[y - 2].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 5e7cc211096..a19afe4e46f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -24,7 +24,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "struct Bar {\n inner: [Field; 3],\n}\n\nstruct Foo {\n a: Field,\n b: [Field; 3],\n bar: Bar,\n}\n\nfn main(y: Field) {\n let foo_one = Foo { a: 1, b: [2, 3, 20], bar: Bar { inner: [100, 101, 102] } };\n let foo_two = Foo { a: 4, b: [5, 6, 21], bar: Bar { inner: [103, 104, 105] } };\n let foo_three = Foo { a: 7, b: [8, 9, 22], bar: Bar { inner: [106, 107, 108] } };\n let foo_four = Foo { a: 10, b: [11, 12, 23], bar: Bar { inner: [109, 110, 111] } };\n let mut x = &[foo_one];\n x = x.push_back(foo_two);\n x = x.push_back(foo_three);\n x = x.push_back(foo_four);\n\n assert(x[y - 3].a == 1);\n assert(x[y - 3].b == [2, 3, 20]);\n assert(x[y - 2].a == 4);\n assert(x[y - 2].b == [5, 6, 21]);\n assert(x[y - 1].a == 7);\n assert(x[y - 1].b == [8, 9, 22]);\n assert(x[y].a == 10);\n assert(x[y].b == [11, 12, 23]);\n assert(x[y].bar.inner == [109, 110, 111]);\n\n if y != 2 {\n x[y - 2].a = 50;\n } else {\n x[y - 2].a = 100;\n }\n assert(x[y - 2].a == 50);\n\n if y == 2 {\n x[y - 1].b = [50, 51, 52];\n } else {\n x[y - 1].b = [100, 101, 102];\n }\n assert(x[2].b == [100, 101, 102]);\n\n assert(x[y - 3].bar.inner == [100, 101, 102]);\n assert(x[y - 2].bar.inner == [103, 104, 105]);\n assert(x[y - 1].bar.inner == [106, 107, 108]);\n assert(x[y].bar.inner == [109, 110, 111]);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 9b173f85fb5..8cc56fafca6 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_0.snap index 9b173f85fb5..8cc56fafca6 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_0.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 8bc6d1ca387..33280cf4052 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/nested_array_in_slice/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -27,8 +27,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/91dO28kWRW+1Q+7H253296Z2RmPx+VZiQACuqc9Hq9AwsEiEYAEEpB7ZnZSMhIInPIHSEiQSJBIViIm3GSRCEgQEkgECBGABBIS4hHs9m6d7q+/+ep0tfted49Lsqqr7rnn8Z3Hrbp1q5yF2ZYV+wYdB0FzUeyHq22jiLyGUlFvM5r/1j7bt4vjGrTXIxrbJrkx+Z8PT5+2hX0R9R+3C54p8TGeCfgPtws+713N+LMtk61XHGMMWZ/WJ387Yfa7V/xuU58Uvk2I/fBA6G+yuoWtv6vN21oHfCLp8cR4N+LznsZvMzrv0anFzBbwzig2ttP47jQjeSHM51Ag+R3SNXYeZyTP9GF8LL4Mu5bQdSDa0DZsQzktIUfxakTkZXGVLs7OTjmWIvKe1phWfN5n5mMcozg/OnB+Hflh8juka6r86JA+jA/nR1foOhBtTfiNbSinK+QoXtsReVlcpYvhYcIYHp5xnMbjPXraE1hyfuzA+XXkh8nvCN+myI8d0qcs1gy7ntB1INo4pntCTk/IUbxaEXlZXCWs8c8S1vjzdPlx9q75GGOC8wOxXEd+mPxOSJqvIy/WEB/Oj12h60C0cX7sCjm7Qo7i1YrIK31+DM8Tjh/vJhw/zrgGGmaIF2K5jvww+Z2QNF9HXqypWmzY9YWuA9HG+dEXcvpCjuLVisjrBsaPy4Tjx/OE48cLroGGGeKFWK4jP0x+JyTN15EXa6oWG3YDoetAtHF+DIScgZCjeLUi8rqB8eN5wvHjRcLx4xnXQMMM8UIs15EfJr8TkubryIs1VYsNuz2h60C0cX7sCTl7Qo7i1YrI6wbGj5cJx4/3E44fr7gGGmaIF2K5jvww+Z2QNF9HXqypWmzY7QtdB6KN82NfyNkXchSvVkReHbIH8yMr2ZscPlc2970Kr3TxP3s2txef93ROez8+7+l8x0F83tNr4Tvgk4h5Nh3v76XhP7acuBvm44ttMvkWq28B/TKxirI6xCtVjVK2of6c73dBH8SgjNfdJXm1RVsKn95x7Eb5PUdXZUcnIiZbEXm1I/Lai8irG5HXTkRe+xF59SLy2o3I6yAir35EXnaNlHj8ODXZeD3FuY3XR1zX75LNWMcbZHujpF9dYNYs6XfHwSXEw2XUJH1+WewnWPyR1rikrtM2ttYWYGn6PEisz/0w29S4gfLxGOnvA43Z1y+O3xa82qJfimsBpSteW90nfY4SY/0w+FgfEdZHgv6hwNOwPhS82kJORNueVMWaa421WW5inHSozWg/JJseprFpiGNlIFk90onpcG9Y8DkeKxAnrolvJ7LR7MD1hSZrcp32aziP9mMtx75Y65H+o9qM52+KcxaveD3I8WBtvyU8Et0bSZ/fc/TdpjbUi+/tMS8zkmHxofL7kOgyOt8s6bcF7Uj/+2KP415GfWolPHlcekS6XRTHw9W2sVf7EGOUj8dIfyQwUbWSeSnZ6HseN/LEWBwHH4uc9M8F/THQHBEWjxxe9xZgwXXd5HDsTX7vUZvR/rXYJ8ZT5rjJ4jl9psO9YcHnvLn2OySnrO7+Hc6X5bpXd43+V1B3/1GcM3/jPSr7xNr+VewTz3VLn+w5+nLdVc9GQlhcd+0ao07Hy9Zd7NeFdqT/X7FXddf61Ep4ct09Jt0uiuPhatvYq6OIMcovq02PBCaq7jIvJRt9z3X3JDEWefCxOCH9TwR9DjSPCItjh9feAiy47pbF3uT3PrUZbadIiE2ou2od7HXrLuJUte72s9l5xqxK3TX6D6Du7hc8zd84b8b+sra75JNEa26lTzhXvbqr1sTy87WM+C+qpfsOPkb/sGBYtZYiT66lOel2URwPV9vc6zbELSecckF/LDBRtZR5KdleLX2cGIuT4GPxmPR/LOixRh4TFrnDq7cAi2Vq6QG1Ge0XKG8TjdMyb03WptTSIdVSxKxKLTX6n0EtHVMtxfl59pe1PXtDaqm3PlRh59VJo/+yqJOGw2EaHMascwivr6Ni+XiM9PgspxfKsbS+3nq268Y+6lw19r8aKfZ/DLH/NYp97N+n/tb29Q2I/UA6NQEX1AXxYh9NjnEeh8etOtBfRLFp/ISx/H6h1MQX3yJf4Lt3nNfqXTizEf2m5tuaYR4zo//uhuW1ysWqec3zUKpG3NR97+EC26rc96L9PHd8IHhZXatfzdpM5sS/f6rN6FjHxtU8PnlIi88ie3PCJxf0iKHNIQ5K9De7GZ9DB5/uhuHTXQGfIwefvoOPFz99B5/Uzz5VfvWFvRkdIz3XF8QH+x9QG66HaFIb1mXTZxKbP6E6H/P6Det82fXbD5w6v45aiDYuWwu5zqtauM48Rdtysi0X9Gg/13lVE1WemkyVp6hj42oen5OQFp98gb0nhM+JoM+Bhus89m86+Bw7+DQdfPKQFh/1DhVeA+aETy7oVd1Tdf7Awafp4LPOOr/o3q9Kned1fIgP9j+kNqzzXWqrWuczoOM6j37mOo91XNX5DNqR/qdOnU/0vtOYdQ5BxzKvgVSxj+MiP2PPBK9Acrx7wibR/jybxyfR94zkPS2vXc7C61jgc6/7ZIPdS35YdJzw+wXFHt7Xc+zhfTLHHmKpniHy/bfRf+DEXqL5gmnsbQn80EZeR61iFX3Cz4ybgpeqoyZT1VHUsXE1j886chPtXTY3LTbV3FbbwWfLwae+YfjUV8Anc/DhewYcZ3jOUH23bILh35bIdW+cwbVdVXLd6D+6ReMM57rKi7aQfRHFrvG4LfSMxHv6XUG8jsrIpkTzfJXfOzX5HdI1sj7TddzePOJk43crvWtEvv6139iGco6EHMWrG5GXN7/jXfffpnrsjVfefZE3njc3DJ9VaqA3XvE9d9XxyvRZdrxa9tr0LaEPX5v+0xmvUJeIvrrkMTYEHcs1sh/9aH35OaG1q30IodLzSLSbn0ciT3we+Z9sdh7tQH9gX34eafQ/gueR/6fYUNhw/3AzPpT3buyvmLHccGyf0hcNKpabaXCY1h38rrKK5WaJjaHExgcOljifN+f7sHrsI03V2N+l9WFmR9XYN/ofQuzvFb+V/TxvYW13yOd16nNRHA9X3FTsm6xVY19hh/NbtRLsHtyi2L/nYLlpsf9OpNj/HsT+564R+5+/pbHv3XMb/RdvUezvOVhuWuyfR4r95xD7X7pG7H/llsY+yiuL/fduUez3HCw3Lfa/ESn2vwOx/02KfRVn/Bzn2xtwvd8FnRtCZ9NX3e/hfVuN6L3/c4EYeGsEPV4DR7b6fxXbjmzUi9+Ps35NoSfb0xT6NAQvFbucbyo/0X/27EzFuvXFWE/h47agr+rjdgVeu45s7/9ELPIx9sV+MXxsvG7Sx+dvsI93HNlqPrCqj3l99Zvu43cS+njRc1TPx1WeQbcd2VXncL3nWKxLDB/z2pib8PEu+VjNGXo44zVaCpw9Xp6PF613YtmoFz/j43c5VM5zHqj7EOSl5o45XurChqo+tr4416zWeTIm3npptmvylwt6XJfIc7zLrk33rrlOBH3uyFbrJVkX9W4hr6s9FPocCF7qGRCvlVZxinzZx0omvt+kfMwxqnycw7kqOFf18UkFXn1H9mNBf+LIRr2wL/aL4WPjpd7HTOXjIflYvW9YJS/Zruvk0rI+7jmyl/VxDm3L+DgnucrH+4JXFR+r71lX9bH1xe8dKJz5e6i5kInf6khRLz1e3jiR0seoZ05yj4U+KnbVt4HKagLaUNXH1he/JWS24vOaeyRTfXsF9aiV2Iv0uP6VcT5y7FW8thzZuaD3xgn1fSvWpSn0LPsuGOrzUPBS3/Xjde/qW5BVfWx98Tt9do3auJrRxZpne3Y+tCFhutbG5hN5a0A70v+hMACfm9i+sYKer55djl6NL19dPr18+fL0xSXPB4YwPx8YW/6Lp2fPX5w+vRy+P5ocPlkkf3qNfzVrx/VLk22rOJ7oVRf0OOeO9H+GOdu/FL9tPGwIeZ9es8M87WRrgS4R52mfmG3bqAfpg/L7gt5+J9Z17Om6LXRVGGcle+SF57av5s+1r16nR5y2SXYH6amtC20NkrNTHGOsIS/To0n0/4b7+cnWgj7WfyDko89YlpKPdY951cU5o//0u3dUcxogO2K8jDCPJjn+MYrR0PFlgQAA", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 6f336251451..f328414f509 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -63,8 +63,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tdndThtJEIbhe/ExB9NV1X+5lSiKSOJESAgQgZVWEfe+XdP1DuxKINLRnlCPsftzz0y1PTP+dfp2/vL44/PVzffbn6cPH3+dvtxfXV9f/fh8ffv18uHq9mb899dp8z/dTh/SxannWcosdZY2S99L2raoKapE1agWNUctUWdaSmO8eB2vV68WNUctUWvUFrXPKlvUFFWiRp5EnkSeRJ5EnkSeRJ6OPPOaoo7x2et4ffHaoo7Xt1Fti5qiSlSNalFz1BLVt39zNNADeQMJCFBgIAPfsb5HcwUN9EDZQAICFJS5waXOHVBa1D5rjR1UYwdViapRLapPzI9sLaCCBnqgbcAn5sehCVBgc8+3HLVEjSPT4si0PmvfoqaoEtUn5jPc+3pHBT4x3/i9uwdkb+8dCQhQYCCDAipowJPHNCSR452fmsNABgVU0EAP+AKYGDOUzSFAgYEMCqiggR7wpbBP1dfChAAFBjIooAa8jSU5fGLi8Impw0AGBVTQQA94G08kIIDkQnIhuZBcSC4kF5IryZXkSnIluZLsHS7mKKCCBnrAO3wiAQHkeMeKt4S37IQABQYyKKCCBvqEevdKcQhQYCCDAipooAf2j+0dHlgdPrw5CqjAh3dHD3jTTiQgQIGBDAqogMC9SZKjzx5TmkRpEqVJlCZRmkRpEqVJlCZRmkRpEqVJlCZRmkRpEqVJtJJcSa4kV5IryY3kRjJNov4xOGEggwIqaCDaTzs5NInSJEqT2LaBBAQoMJBBAdEkRpMYTWIpAQEKDGRQQAV99pjtTdIcCgxEkxhNYjSJSQPRLaYbSECAAgME+le9bo4EBCgwkEEBFTTQA5lk/6jU5BCgwEAGBVTQQA/4KpgguZBcSPZ+VnEk4K9RhwIDGfi7m8PfyxvAu3ciAQEKDGTgOX6UvXsnGugB/2CcSECAJ3tv+AfjRAYFVNBAn8je8xMe2BwKDGRQQAUN9ID3/EQCJCeS93Pc7siggAoa6IH9THdH7N4sAhQYiMWYvedttFbeT2x3JCDAT92Sw0AGBVTQQA/4uphIQADJRrKRbCQbyUayrwsbfZh9XUz4U6PrsrexmUOAAgMZFFBBAz2wn87uILmSvDe/v/ve/DsyKKCCBnqgbSABASQ3khvJvgr2LfVVYH4oG1P1nt//4z0/YSADNrmzyZ1N9p630RLFe34iAU+ujtiZZTOQQQEVNBAzLGkDCQjYk5+eLk5cbn5+uD+f/WrzxfXnuCq9u7w/3zycPtw8Xl9fnP66vH7cX/Tz7vJmrw+X9+PZ0bbnm2+jjsDvV9dn19PF8+jt9aHj+zsGjy/wY3h+9/jxjRfjx1fVwviqjK9aF8a3rcb4llbG18L215pXxjfm3zZbmX855t9fnX99Y7wd719sYfy4tIzx4yLqtfH9Pf0zzhGO8fL+7X/P/N8a71d7c7zqn/WPrry/2bH91lfGV2V8W5n/+I6M8VlW1l/2k7k5Pr+6/tMbDVT8sn0PKC8OgLw/4F0dmP7HFhx3GPoxg7qY0I6E1lYS5NiN40aFLiXk54RSVhLqZiTUFx+mv5NwrIZxP2BpT0o75jCu7lcSVFgRY0fmpYSkR4Ks7Mlsx6K0lW5415p6Y/y4z8xxSFvrKwnjnioJ46bmUsLxzThuSy/NwfwexkwYF7srCdmOrcgvTm9+J6HTC+M28dKxUD0SNC9txbjrciS0pa0ox6oad6yX5lA7LT3uSq+sidSf90O3lYQXp2pl5ZOhFybQ68r7d2FVdlt6/8b8e9c/m/9/xn8ajy6/Xt3/68erJ0+6v7r8cn2Oh98fb76+ePbh7zue4cevu/vbr+dvj/dnT3r+BWz8+ajjgkyzfhr3yMaj8ZXbtk/+y9V4IOM6Vaz4w3Gl8zFnucjZPj35xP4B", + "bytecode": "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", + "debug_symbols": "tdndbts4EIbhe/FxDkTO8K+3UgRFmrpFACMJ3GSBRZF7Xw45r5JdIIHLYk8yj2PzMyUNbUn+dfh2/Pr848vd/feHn4dPn38dvp7vTqe7H19OD7c3T3cP9/2/vw6b/Wl6+BSuDi3Nkmcps9RZ2ihh27wGr9GreFWvyWv2OtNC6OOj1f56sapek9fstXitXtuscfMavEavnhc9L3pe9LzoedHzoudJz1OrwWsfn6z212er/fXVaptVN6/Ba/QqXtVr8mrbvxkKqKA50gYCiECAgh5crFqw7dFUQAXNkTcQQAQC8tzwXLxWr23W4juo+A4q0at4tYnZES0JZFBABc1RbWa2/2sAEQjQeQhq8pq9+qGp1WubtW1eg9fo1SZmUx2NPVCATcwO92jvjjj6eyCACAQoSCCDAiqw5D6NGCynGgQoSCCDAipoDlsBcTMEEIEABQlkUEAFltxbKtpaGFO1xTARgQAFCWRQHNbGMRhsYtFgExODggQyKKCC5rA+ngggApIzyZnkTHImOZOcSS4kF5ILyYXkQrJ1eFRDBgVU0BzW4RMBRECOdWy0JrGWnYhAgIIEMiiggjYh1r0xGyIQoCCBDAqooDnG5/aABRaDDa+GDAqw4c3QHKNpBwKIQICCBDIogMDRJMHQZo8JTSI0idAkQpMITSI0idAkQpMITSI0idAkQpMITSI0idAkUkguJBeSC8mF5EpyJZkmEfsYnFCQQAYFVODtJ40cmkRoEqFJdNtAABEIUJBABt4kSpMoTaIhgAgEKEgggwLa7DEdTVINAhR4kyhNojSJxgq8W1Q2EEAEAhQQaN/1shkCiECAggQyKKCC5kgk20elBEMEAhQkkEEBFTSHrYIJkjPJmWTrZ4mGAOw1YhCgIAF7dzXYe1kDWPdOBBCBAAUJWI4dZeveiQqawz4YJwKIwJKtN+yDcSKBDAqooE0k6/kJC6wGAQoSyKCACprDen4iAJIDyeMktxkSyKCACppjnOoO+O5NMQIBCnwxJut57a2VxpntQAAR2LlbMChIIIMCKmgOWxcTAURAspKsJCvJSrKSbOtCex8mWxcT9lTvumRtrGqIQICCBDIooILmGOezAyQXkkfz27uP5h9IIIMCKmiOuoEAIiC5klxJtlUwttRWgdqhrEzVen78x3p+QkECbHJjkxubbD2vvSWy9fxEAJZcDL4z86YggQwKqMBnmMMGAohgJL+8XB243vzydD4e7XLzzQVovyx9vDkf758On+6fT6erw183p+fxop+PN/ejPt2c+7O9bY/333rtgd/vTkfTy9Xr6O39of372wf3L/B9eLp4fP/G8/H9q2phfBHGFykL4+tWfHwNK+NLZvtLSSvjK/Ovm67MP+/zb+/Ov3wwXvf3z7owvl9a+vh+EfXe+HZJ//RzhH18vHz7L5n/R+Ptsm+OF/mz/pGV91fdt1/byvgijK8r80+B+ae4sv6SnczN8end9R8+aKBsF/IjIL85APHygIs6MPyPLdjvMLR9BmUxoe4Jta4kxH039hsVspSQXhNyXkkom5JQ3nyY/k7Cvhr6/YClPRnrPod+db+SIJEV0XdkWkoIsifElT2ZdF+UutINF62pD8b3G80ch7DVtpLQ76mS0O9qLiXs34z9vvTSHNTuYcyEfrG7kpB034r05vTmdxIavdDvEy8dC5E9QdLSVvS7LntCXdqKvK+qfst6aQ6l0dL9rvTKmgjtdT80XUl4c6qWVz4ZWmYCray8f4usyqZL71+Zf2vyZ/P/z/jr/ujm9u78r1+vXizpfHfz9XT0h9+f72/fPPv09yPP8OvX4/nh9vjt+Xy0pNefwPqfz9IvyCTJdb9H1h/1r9y6XdtPV/1B7NepUbM97Fc6n1OKVynp9YtN7B8=", "file_map": { "20": { "source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub(crate) struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub(crate) fn hash(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub(crate) struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_0.snap index c7cdfe61c51..7e415c97b63 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_0.snap @@ -63,8 +63,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1bT4scRRSvnp0/2zM7u5N/6pcQZrKzu/G2kD8aT3rwoELCZJOcBI85SKARBAUFD4I37178Bh4EiSAIHsVPIF7yCQS3NvWmf/2bX/f2JF27aUjB0DP1qt979er9q1c1iXvW3jj+JOF7Nzw74en7L7tis7GH4Tl9sTZrENc0Fo9JC3jstIDHjRbw2G0Bj70W8NhvAY+DFvC42QIe0xbwOGwBj6MW8LjVAh7HLeBxuwU87rSAx0kLeLzQAh4vtoDHSw3y6HmzfU4sfi+3QKZXGpap8bgRvr92/HndPdtnLjtwMp0w2CfePrH1iaNPzHzi4xMLH7h9YPSBxzt27zi9Y/KG7w3LK65XDC/sK4C7lAEQ4ihoQBp+d2gChw0JOSW6TeK/Nt3fTV2xNcz/CX5c1Gbxz/YNfzcO/9NBwPNuVsTviK713clyWd6Bd3DMXRhzl8bYfOKs93wRWV5Xx64oIzW3XhzauwnRQ5kjzOgPXUzdfFb8QXrGD8unQ/IZxOFnavg3I+G3+aZivij/Ac13FIefheniEPhhXdyKQ/teXV00+kPiNZYubrnVtUH5mC6ObUyW85MSrJutzsNgPYDZ+nq9uwXzQxjyg/7BdHXiVnXF+I5sN4vIdjN7ZTfL9spuABbbbsZO5xrO5escI6+9Nt178CoPeXnzEKXDDOtmq/NQOmzrizo8dlq3bNz78P1DGIPv4BwSMYeY+47jfdM0sv7urrsGGwQ7bQ3i2ncun0g6vXvJleuQ6cMgc8u2QfJEGZnMNnE8wVKAdbMinWH43QU6iMv46NH498LvnfDswzv2/kTQ7xP9At+iD2XEuDZEn4339ZTb4buPHxbHrmc5viZ9tuG/EQf/wvDfjIN/WUu5Bfhdc/inhv/tOPwv8b8Th/9lLet2HP5PDsG8j/sgMM4+usG5TC2GYUzl/KLvosxzXje/MPpDFzXfWeYXfeKH5YPxi/dr9u5EwDDGIgzpDASds8I1dqvzT0qeRof7mA7qjsmQ81bfDsNzul5bcIfKl83PeF4+AX5QDj2nc0mLET0a/5/LcX4avp9frj7ba3uuHrf2MZvXsRPeA+D+k9cucXkegbqD4wcwRxyP3+197HscnhOBk+1+063OB/swB3pEc1M+/3ntnPUaeVQyR1wWR3fE+1wrSojOYfg9faE2m/Nezjf0G1+UzAnXvkNjDI7j/3E5zi9d+bz7BFM6uuNWZc/yOqsaeddpGzDe1rWBb8PT4/o4yd8p8ykqPqtYx/ZdlfekcWRXO+8x+meV96Q15cp1VXx3ImDss4aCjqpBnhUuXm/fDsNzLUke+xHuqVODjlT/rp0TGP2zqkGrmm9ZDdrDtgSvEwFj3VC17i1Bp024sAaPuA2unkaH+5gO8lnHTzaRK3ANP22QDuKyWF5lj89LB3FZzcRiM9o2x+ZIZ0/L2Lysr7pVPUPeOjQev/vWo76fw1PFZmXbowrZDQQ/p+Viv7gizU3gs04uZuP/cjnOX8P3mPXk43ZvLGTiaN7KdxgM14htdBtg7Cd2AIb+ndsG/UZZeLndSXK8PI7ngfbE54N4HoBndb51CXYY+qcv1uae/0dJkUfUsR7QZd+6Icazjqm8FHFYLUH5QZOVqptwPEwEbOSqbXBQwbeKRyNBw3wa5vf2buRc5mgseHUkF7QNthu0DbYbtA22mwnAOFZdABjKhJuyKTwT/6aGTbGvM7ysk7aXVmeT9i760Kr9pdFMgZ6ieSMrjjc5dWB8WjGe96jM97CEH1V3Qfy8p3wann7sb4nm2bnqOlWVjSGfxs8O8cBx7uT9LIdhjuBbF2BN1guVL0QZsi9U8lF1prry4TwA/UZKuFT9SOm88qvGo7IHw6vqO6fZGc9X7Z1Zr31T9pbWwJVU0FZrk1bQRr6GNWijHZisua7VDwx6WV5PivSQhsU1lQfZHCPnx7XrL3w3K1Jsm9WJw75xHjAWvE5ceSxMCIZ0xoLOWeFSsZ11Ad87jxqJ0R+6qLo5q5KrqhGo/GZMMt8WMk8IhnS2BZ024eL8DmWZlDyNDvdV6S/vV0cN0kFfs0V0thqkg7i4RrLdIB3EdYvoDAQPPk68meR4/cfydMz78N0bWQ7H8TchNtk/tCKfjzzkvQU2tbcYEwz3FqxnFwHGunEJYGgT3NSexGSx7j4fc5mJK76HuS3ec/etC7DY+/yq3FblqlW57Wn7ZZOtqt8OCIb7fNyfXSf+0cZSGMf3GSZuvblcEOMngl/L5XCvbO+m4r0G9yqzseDVmrIJtiW0CbalywBjW7oCsG2CvQYwlAk3ZWcmp3X3/juEl/0f7/0Hgkf0qzHt8OBa/mdY8wHmt7l1AY7jPwoIuF5p+cLhc/L58GAxe7i7eLjYW9y/Pz9aXCT8vmFdrWn6i4Pda0dX50cH9/Z2F7v7p9LHu4DqzJ9zJ/Mp6jzHN4u/PRp/n2JjrP/vXRTy5LORSGfd++qOmzVlNwnBMF/gHFztudVZOa4LN+UvTBae9u81/IXSkYRgqr6sahMcyxLB14TwIP6JW41fHAOxRo53dhGnc7nPw7Xju0OJmNfI6bvpmJv4Ngi/8f47jjd8PRr/WUDg+XpM69MT9Py4ryvGJSXPExyir5sV+9S9ePy/gI1f7mmzVR4NNgIY5k2+bYXfKC/EZXz0aPxX4Mt8wzv+9v5E0N8k+gW+RR/qI+PaEH14V+5zij0496b3+yc0CT/2MW+mO2Wxge9rI6zqDrH5NuzH/ILjho3/juJGpHtTMm6U1YrxzBv9xc2sOAcb/xPY8PcV8mQ/ivKsOifjdUC+y+40lZ1v8Bxs/A+BOTzfUPswm8957MOwVo025T917wXZ+NP2YfzfUdyHcWxUZ7co89vEq8mw71zlvUfOsX6ENdrsFPlDvR4S7+rcQsVWjsmoW7hvfEI2G+k/HgeqxmNN5VQJwdBOqu4fcr6FerBuvmWyWDffasJPYE38hL9sla/zsNvCXd2sOM+q8yfn1jsb9M1qgKoWyvqtYsE6NuMbnx+ivmBN5gnE3ab3hEd7+/eO5nuL6YOZ/3l1nT2huqOHddQ/khwX6hHGF3yX44uN/xdi5J8UI5vca1TZhYqfaBfKLxyG39MXbKy/mGOou9Adt6q/qPs96vsbYgPfq1PnssrGVF0xJfnEutd+jme6tc/xXoYzXcxHOySfSOecy/8/qXM1dcZ8IYzlNUP+DJfKMdatF/C97jr1AvQRtsdXuYwDXtT/dtB3cQw/7b+gZfchnoKv7IeJKp/HvlLVl5TPY19Z9R8JpYNVZwJVZ884f3XHeVwDV9VdRKWf4wrayBefV/K5b9mZ6gmtLIeZbCLnWfIOViE+ZEXZ1L0fUiVLtY7qDJ3vEKAdsz3WtWP2Dainpr9oL5zXoD1iXtN0Lnachh0cLQ5ms7fmswfz2d5pudj/5yZnhEliAAA=", - "debug_symbols": "pdndTiM5EIbhe8kxB+2yyz97KyM0YpjMCCkClIGVViPufV12vYFZKRHrnFAPSfzhdttOd/N7933/7fXn14fHH0+/dn99+b37dnw4HB5+fj083d+9PDw99ld/7zb70frPcLNrYRaZJc6SZtFZ8ixlljpLGyVsm9fgVbxGr8lrbya9hv65aFW8Rq/Jq3rNXovX6rXNKptXzxPPE88TzxPPE88Tz5Oel6y2WWNvp1b757LV4rV/rlpts6bNa/AqXqPX5FW92uDZgacCKmgO3UAAAiJIQAHJasl2TFpBc+QNBCAgggQUZEByJjmTXEgulmxnuAiIIAEFGRRQQXPUDZBcSa6WbGerJqAggwIqaI4x5QfIGVPbTvuY3AMVtAkZM3wgAAERJKDAkrOhgAqaI2wgAAERWE4xFFCB5fQ5JrYWJgIQEEECCjIooAKSo4xVIbY6QjMkoCCDAiroMbJ12KKZCEDG8hJbNqMmr+o1ey1eq9c2qy2ZUXt7CYYEFPQIEUMBFVjH+uQVWw3jFVsNYkdsq2FCQQYFVNActhomAhBAsq0GsWGx1TCRQQEVNIethokABERAciW5kmyrQWyy2GqYaA5bDRMBCIggAQUZkNw8Odr6iJvB9t5gUJBBARU0h62GiQAERJDmiYv2NTGRQQEV+FmOtj4mArCOiSGDAqxj4zPNETcQgIAIElCQQQEk2zaf7G/ZNp/GKxEkoKDnpGQooILmsG1+IgABESSggORMciY5k1xILiTbxE5qiA6bANHesi3TkGzLjGoIQEAENmLZYONTDBU0x5gSAwEIiMByqkFBBgVU0Bzj8mHAkptBQAQJKMiggOqwSZI2QwACIkhAQQYFVNAcieREsm2eKRgiSEBBBgVUwPAqw6sMrzK8YyLZ2RnTZryiIIMCKmiOMW0GAhAQAcmFZNsPx/yx/XCiAqaW7YcTAQiIIAEFJFeSK8m2DY4jtW0w2ZRodNU2vflKBgVU4Ies2wYCsJxmiCCBnqybIfPhAiogOZAcSA4CIkhAwUh+e7vZce3/9eW439ul/4ebgX6L8Hx33D++7P56fD0cbnZ/3x1ex4d+Pd89jvpyd+zv9s7uH7/32gN/PBz2preb99bb+aZ9E/HGfRc5NddPt09b9vZ9aS+0L5H2JZaF9nUr3r6GlfYlc/yl6Er7Sv/rllb6n0/9b2f7Xy60T6e/n9NC+3797u37Jeu59u0z86fvoKf28mf7cGEA+nWx0oN+KXs2IpyP0MQYaqorAfnUhXyhBxcPQt8PIueliJIYyX4RenYotyunwsUuRGEg+5nQpaOIdt/pEZJXjsLubeZRfDgXSxtCXFmQ6XQa+nfxSvvCAPTvvIX2Gk6TWVY2VLVbi9lez27okq7cEUSv3BIkX70lSLlyS7gU8Kkt4fJBfGpLuBjxuS3hYsTnlvTliGuXdH/OyHH0R41tJaE/YiOhP8taSjh9UffHk0t9SPbkYib0G5KVBE2no9APV1v/J6FxLvpTw7iSEOMpod/iLiXkekqoK0dx/Vddf+Z5GsmyLR1FaSyM/ixzaVa395FsaSXhw7VnXhmFlulAKyt/vwk7VEtLf7/S/9bidf3/T/vb/tvd/cPxj3+NvFnS8eHu22Hvv/54fbz/8O7LP8+8w79Wno9P9/vvr8e9Jb3/f6X/+BKL3sSWb/uzkf5b/86q2639L8Te6rfiMdlbdlf3RftTURW5fbOO/Qs=", + "bytecode": "H4sIAAAAAAAA/+1czYokRRDO6un/ntrpnd1VH0Kwe6fnx9vA/uh60oMHFXbpmZ09CR73IAuNICgoXgRv3r34BB4EQUEQPIpPIB70CQQnZzO6v/r6q5rqmcoZSyZhqa7MqIjIyPjLyJxN3PP20vG/JPxuhmcjPH3/TZdtBrsfnqPztXGFuEaxeExqwGOjBjyu1YDHZg14bNWAx3YNeOzUgMduDXjs1YDHfg14HNSAx/Ua8JjWgMdrNeBxowY8DmvA4/Ua8LhZAx5vVMij5832ObH4vVkDmd6qWKbG41r4/cLxvxfd833mvAMn0wjAPvH2ia1PHH1i5hMfn1j4wO0Dow883rF7x+kdkzd8b1hecb1ieGHfAty5DIAQB0EDeuG9QRPYr0jIPaJbJf690c5Wz2Vbxfyf4MdFrRb/eMfwN+PwP+oEPG/Msvgd0bW+h7OFLB/CNwjzCGAeEYzNJ856T6aR5XU7dVkZqbm14tDeSogeyhzHjH7fxdTN58UfpGf8sHwaJJ9OHH5Ghr8bCb/Ntyfmi/Lv0HwHcfiZmi72gR/WxfU4tA/K6qLR7xOvsXRx3S2vDcrHdDE1mNmCnx6NNWfL87CxFozZ+nq9uw/zwzHkB/2D6erQLeuK8R3ZbqaR7WZ8ZTfzdmU3MBbbblKncw3nFuscI6/dG20fXeUh/908ROkwjzVny/NQOmzrizqcOq1bBvcW/H4HYPAbnEMi5hBz33G8bxpF1t+tVddgjcZOW4O49r2QTySd3rrh8nXI9KEzc/O2RvJEGZnMughPYz0Ya86ydPrhvQl0EJfx0SL4N8P7Rni24Rv7fijot4l+hm/RhzJiXGuiz+B9PeVB+O3jh8WxO7MFvip9tuG/Gwf/1PDfi4N/Xku5D/hddfhHhv+1OPzP8b8eh/95LetBHP5PDsG8j3s7MM4+usK5jCyGYUzl/KLtosxzUja/MPp9FzXfmecXbeKH5YPxi/dr9u1QjGGMxTGk0xF0LgpX6pbnn+Q8jQ73MR3UHZMh562+7YfnaLU25Q6VL5uf8by8D/ygHFpO55IWI1oE/49b4Pwg/L68XH28XfdcPW7tYzwpYye8B8D9J69d4hZ5BOoOwndgjgiPv+177HsWnkOBk+2+65bng32YAz2luSmff1Y7Z71GHpXMEZfF0Q3xPdeKEqKzH95H52rjCe/lfEO/8XHOnHDtGwRj4wj/h1vg/MTlz7tFY0q+sevsrGNNV2wzDbesr6iLLer7Ijz9+3tJVnbKb6gYPHT5siuT20SqhZbObYz+ReU23ZJyNdn1BK9DMcZ+SdWAe4LOReHi9fZtPzxXkuSxr+CeVPDEehaprls67hv9vpBRDD3rEz95a2ayU3VdVfNl3VD144GgUydcpqMp4bZx9TQ63Md0kM8yfrKKfKBHdLoV0kFcFq+L7PGsdBCX1UUsNrNtOxf9bGsem+3cBWOzsqUGweNv31rU9114qtisbLtfILs1wc9p+db3LkvzrPnWb26B84fwO2bNeJRz7uho3sp32BiuEdtoCmPsJ67BGPp3bmv0jrLwOB8mC7wMx/NAe7I5bbhl+bZdFqc6DzCemzBWZU7m5/Y0yfKPsmgBXfa7RXtXg1c5K+KwWoLykSZHVTfBMxGWuY0NXLF9FvGtYhX6NIO3dcXc376NnOccpIJXR3JBu2GbQrthm0K7YZvagDGOY0MYQ5lwU/ZmcvL0Pi9hb+wHDS/7UNtLq7NJ+1b51y7gVHjvzrLweF9U1R0YnveozFsvhx/09x2Bn/eUf4Wnf/8p0Tw7V84uinJY5GeDeMBvlc3wOTP6Qqx3+NaEsSrrhcoXZmpSs/Ky8O2sPqUo/11V58vknnn2wPWd7ik0eb5Kt7i24JvSh14JXEkB7dP0lGkrPS1rIyZrzrPagUEvyzukV0X3ryLlx6XrL0b/ou5fFdmFb7wvXhe8Dl1+vEtoDOmsCzoXhUvFb9aFSHfxStdI+C5eJN0svIunagQqh1knmadC5gmNIZ1U0KkTLs7hUJZJztPocF+R/vJ+tV8hHfQ1A6IzqJAO4uIaSVohHcR1n+h0BA8+VrycLPD6f5aLl837DP4exJ9Xwu/INf4j3j9gU/uHdRrD/QPr2XUYY93YhDG0CW5q32GyWHWfj/mKzUnlE0X7fIO7jH0+2m0L6LJ9FMXkMn7b5uKb8icdGsN9vtFUORTaXw/g+D7DhuCtWzCXoYDfEPzaWuNeeX6nT3xX4V5llAperSl7YTtDe2E7uwFjbGc3YSylsVswhjLhpmzQ5LTq3v8a4WXfyHv/juARfW5MO9zdW/wxrPkA8+ncmjCO8O8GBBgn7Xme/6Tmye50/GRr+mS6PX38eHI43ST8vpmdDCLQn+5u7R3enhzuHmxvTbd2TqWPdwHVfQDOq8ynqLMe3yw2twj+McXNWPcKNoU8+Z5HpHPwHXXHzZqym4TGMNYVnZVzzRZ1CNeFm/IXJgtP++cS/kLpSEJjbTEPVZvgWJYIvoaEB/GrMyCOgVgjxzu7iNO5hc/DteO7Q4mY18Dpu+mYm/jWCe94/x3hDV+L4D8MCDxfz2h9WoKeh/usAC7JeZ7gEH3NWbZP3YvHvxcweKPdny3zaGMDGMO8ybf18I7yQlzGR4vgPwVf5hve8bfvh4J+l+hn+BZ9qI+Ma0304V25jyj24NyrrgWc0CT82Me8me7kxQZ1dqRsO+8uIfZjfsFxw+C/pLgR6W6JjBtcO+3AHJS/uDfLzsHgvwUb/qpAnuxHUZ7sR4vqv0X3neY653QOz3Mw+K8Dc3j2ofZhNp//+z6M76upc/WE3hEXyvwB8WoybDtd7zd8nGN9A2vUbWT5Q73mO1Dq3KLo7qO674P7xh/JZiP9jceuqv9YUzlVQmNoJ5xvqXs3RfcrEsGDyrdMFqvmW1X4CayXn/A3W+brMuz2os4GfbP6oDobZP1WsWAVm/GNzw9RX2xt0GZi7AkPt3cODifb09HR2L/eXmVPqO7vYY31l2SBC/UI4wt+y/HF4P+EGPkrxcgq9xpFdqHiJ9qF8gv74X10zsb6izkG0sS7Eay/qPst6vsdYgPfuVv1DnRb8BM5P5tcnfHNW+EZH+ajDZJPGmltjB9VQ1RnjtcDLK8Z8me4VI6xar2Az7bL1AvQR9geX+UyDnhR90jRd3EMP+1vQfPuQ/wNvrIdJqp8HvtKVV9SPo99ZV59KU8Hi84E1Lmsyp2NNtpQWgJXp4C20s+0gDbyhd8ybeaT/7+aSzinknewMvFhlpVN2fsCRbJU6zgkeJSdsmO2x7J2zL4B9RTPvsxeOK9Be8S8pupc7DgN2z2c7o7Hr07GR5Px9mm52L+MLqnhSWIAAA==", + "debug_symbols": "pdndThs7FIbhe8kxB+N/u7dSoSqlaRUpCiiFLW0h7n37G6830C0los4J64HEHx6P7cxMXjc/dt9ffn3bH38+/t58+fq6+X7aHw77X98Ojw/b5/3jsf/1dbPoR+s/3d2muVH8KGGUOEoaJY9SRqmjtLW4ZbHqrHqrwWq02pv5Xl1/X1D1VoPVaDVZzVaL1Wq1jeoXq5bnLc9bnrc8b3ne8rzl+Z4XVduoobdLqv19WbW/r6pWq23UuFh1Vr3VYDVa1djpgGMGBVTQDGkBDngQQAQkJyXrWFIBFTRDXoADHgQQQQIkZ5IzyZnkomSd2eKABwFEkEAGBVTQDJXkSnJVss5SDSCCBDIooIJmaOSsM1une53bKwqooA34dYqvcMCDACLoyUVVwVkooIJmcAtwwIMAlKNALYSBCpTT55rXWhhwwIMAIkgggwIqIDkopwkBRJBABgVorS9CM2jVDDjg13XmtW7WGq0mq9lqsVqttlG1ZNba23snRJBAj/BeKKACdazPYq/V4HWkWg0DESSQQQEVNINWw4ADJGs1eA2LVsNAAhkUUEEzaDUMOOAByZXkSrJWg9ck0WoYqKAZ9Akw4IAHAUSQAMnNkoPWR1gE7b1OiCCBDAqooBm0HAYc8ED9iUIcJy7oc2IggwIqsLMctEAGHFDHvJBBAerY+p5mCAtwwIMAIkgggwJI1jYf9b+0zcf1LwFEkEDPiTp2TeOBCppB2/yAAx4EEEECJGeSM8mZ5EJyIVkTOyYhGLRlBr2kLVOI65RIggMeBKARy4LGpwgVNMM6JVY44EEAyqlCAhkUUEEzrNcPK5TcBA8CiCCBDAqoBk2SuAgOeBBABAlkUEAFzRBJjiRr84xOCCCCBDIooAKGNzG8ieFNDO86kXR21mmz/iWBDAqooBnWabPCAQ8CILmQrP1wnT/aDwcqYGppPxxwwIMAIkiA5EpyJVnb4Hqk2gajpkSjq9r0xl8yKKACO+S0LMAB5TQhgAh6clqEzJsLqIBkR7Ij2XkQQAQJrMlvb3cbLv6/PZ92O137f7gb6PcIT9vT7vi8+XJ8ORzuNv9sDy/rm34/bY9rfd6e+qu9s7vjj1574M/9YSe93b23Xi437ZuINe67yLl5+nT7uGRr35f2RPsSaF9CmWhfl2Ltq5tpXzLHX0qaaV/pf13iTP/zuf/tYv/Llfbx/P9znGjfr9+tfb9mvdS+fWb+9B303N7/2d5dGYB+YZzoQb+UvRjhLkekyBimWGcC8rkL+UoPrh5Eej+InKciSmQk+0XoxaFcbpwKV7sQPAPZz0SaOoqgG1CL8HnmKHRzM47iw7mY2hDCzIKM59PQP4tn2hcGoH/mTbRP7jyZ/cyGmnSPMdqnixu6rtdv2hF8unFL8PnmLcGXG7eEawGf2hKuH8SntoSrEZ/bEq5GfG5JX4+4dUn3B40cR3/W2GYS+iM2EvqzrKmE8wd1fz451YeoJxcjod+QzCSkeD6K9OFq628SGueiPzUMMwkhnBP6Le5UQq7nhDpzFLd/1PVnnueRLMvUUZTGwujPMqdmdXsfyRZnEj5ce+aZUWiZDrQy8/+bZ4dqcer/V/rfWrit//9rf99/2z7sT398N/KmpNN++/2ws19/vhwfPrz6/O8Tr/DdytPp8WH34+W0U9L7Fyz9x9dQ0l1o+b4/G+m/9c+sutzryxC91G/FQ9RLuqv7mvpT0eT9/Zs69h8=", "file_map": { "20": { "source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub(crate) struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub(crate) fn hash(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub(crate) struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index c91402d6596..c89912f1374 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/no_predicates_numeric_generic_poseidon/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -63,8 +63,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "20": { "source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub(crate) struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub(crate) fn hash(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub(crate) struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 0c7160e5f8f..e62c7fdcf71 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1cyY7jyBFNSqKqpVqk2nq+wTcmk2SSPhXg6vb6E8klP8MgYP+BAV98MeCTgTkM5jK3AWb+Ya5zmMv8xohVDCkUDFFUF7OrG+gEurlEMpYXkZFryRPPxd/889r7WXudi26BOg/tNXhZkSPyClzq6X0mek4+Ez2nn4mes89ET9+RnntJoFG6CbDGeQ0wvjhcwMCf25tF+zxB9BGDQC6I3DH5p0FULhj7RtRfLVqeZ274J8D/jRv+Aej9x3rHH9sCci/bZw9hCd8AbYJofyK0KaL9mdBmiPYXQsOx+ldCwzH+t5bW6Hstdvdv2/sF0d9FnGEMxvbTLaP/BNnWlD/UOzwGypXH5ALvx9qJXdv2/84N/xD4v3fDX523cfb31jEQm292rtj6DGJk4SZGlEfkCbFrd5gG8pfCaW6RHpEH+lB8II4BuyWj65qheeR+ychZMnI4XrgtNc/nbjApwMYL0S1AuzxgIy1T8oz1bvD9J4pJWo/KxDF5SWgYp6v2fsHoOiJO1SWRJxidV0g2zru0cDiB3qfihONiRWgXiLYmtEuGL2B4hd6PiGE8NB+A/KVw6tNtPrgi+lB8aD5YMbquGRqOYUzDclaMHI7XckRe5yPyghijfUlTHtprkKpKZ1KWqYqDTCdhZjcjSR0raQsZF8aWOjNplldVkassC5RNsliHRaISG5nYLEQ3dwJvabSNK2tMqa3aMAtjk8nUqqAo0lIrpWxRmFxvyEUWWBmVVSrzoojD1GaZiksuv+7p/sKyEN38uuUdR8akidGqyFOjojiMqzjPqzKpIpUbKbO0SpPAxlZlcRAmqdWytFGcybysouexBI1f4B0GWVnY3Iab/2JtM5sE0QbNqNTSFIk1NtXhRrwtdBToIoiqPAmlScJUF6aQYUJjHWMDctfo/YjtUg/NEyB/Kbpx6SJPrIk+h9oJYHfN6LpmaDRPXDNyrhk5HK/liLzOR+R1MSKvKwc2LhjaeDEkQ4iJG9EtQLtFsmlffodouD+khRtb4Pnnv08YW2Cf3RIa9sEdoeG8cE9kgFyfkTEjNKhr2qtbHwXBDeIrRDeOsL4+g4N/wLaK6O9oPMPqf0lk4/WLseRycwjv49g8uK8A+UvRjTsXfcUl0YfiQ/uKK0bXtTgcY31j1ytGzhde4/Hqm0MNiUdODm4fdEx9Qb5/aK/By4rk5rS03TrKtWZouwX5S9H1h4t2y40luPig/Tn+ds3QaBzeMHJuGDmueV18onp9sfHDbOzriz80N2H8oC2sRLc9wpjV9TiN4jUT3XE/1m0iunhhXH3y7j/ttRkv/9/bfUNzwZD+g1srcrzOth2PnTGymz2q/wreJh/ZdIZseleLPZyg/u+9Hc//te9WjGw6BnW0vh/1rYcELysh2DCtd7qfIbuaMqud2KUbvL5usebWZXwkt/k3dJ2ir8/DczjwV99c3PG+c8zhj/NNU2a1E9ks/ni/iOLP5Qhuf6nPXzg3AKZr0fWNT2h4HAkyV6Lb39AxJm7vD+01LG2aZ1FQxWkWVFElldZVECutrKmSzMhSx9FmrVbF1WYRMw3yJEmySEebdd2wKIvS8dwv4WLCR3Y1ZVY7kW24mMB+pzHBrbFz/caQNowx5WIC5yWMiUD2h1VRpmkp4yzReRGrPE0368phFZQySZNEbtaGizwxpghLZdO4CjfrwrqqbB4WMtss6Dtu75rzLc41TZnVTmSzvsVzvSG+5faPhvp2SHunvh0Zg5TDH/fjTZnVTmSz+OP8NCTf4voU/762yOVUbu+MGxuDTO6sUGsOO6cfcwzkEXlgI36H5S+F0zjazqsvRBdzzkeO+4zs1D4a9HG0t5T05QSf0acZe81FN4YwXtycDMvA8UDt5mQ/1s9XbmxPzxXRNXBcd05oUPeX9ur6bCG3Pn5M/zmizdA9fp4x3+Nc4ZP6vxJ75x/R3jmRjc86jiQ3pVhMEGaCkYtpHI4TQpsc+Bbw4+wbGduTz02deh4I9D71PBDGgp6bwu3+itAmDF/HGA4+Hwjyl6KLpYu+akb0ofjQNWCf0XXN0Dxy7zNyuJzP8ZoSHWj7acpCdP3+GmMNeLcUfHt9GEefrf+mDK4egys9742/XTM0ek6Di5MZI4fjtRyRFz3D4Kg/0dxYHApdF8GYc2c6T82HYFPD/8cT8iGOR/q3A5xvuTYNvqJn6pvy0F6DF5Uwdzz2yagPBIMVd/54qH9A71P7KxyrS0LDY8dzQuvrrxxhOLi/Avkfq7/ixu99/dWC0XXN0LBvaOxMmXeTHl7gy9UB3kI4X0MOKF5434ibp0xEN5721n3Ju9+1hnD7RnMGu3kPdh6jDz0HOzI+OT1Tjgt3Jozm95eMd8GmU/M7jiO6B4r9RsfCODbp+QeQw80Bp4QGdbP2hvYRY8cwN6cDWY3fuH1Z+vcb3H5P3/4Ety+N94Bo28brlfAt4HLrBBcZ0XOSuADtHsnGOtLCxSfofWr/hnG6JzTsy7foHus3Ef17sq+4Ts7ui90iHf163ybsmylTn8bdPVMfn4OlZ6qxf68JL269D6+5PdY7O57q1LvvQcfXwBPrSPHs27dtCsWTw5/by12LLtY3hIZzCsjkcg/tL47F9ft6vz6Xe/r2sm+Z+jc9umL7b8Vx2VzM9OHbp+ux+L4humL97sVx2VjXd0TXtyfq+hVTH+esO6Ir1g++/dT29DBm/gB87l6AD81VXyHadQ8+d6+IT99+dt+ZBQ6fY2dMaH7pa5ecbNxWH+udHU916t33rxlvGAOKZ98YqykfmufW4nDu4PYwh/SbOF8/1mLPxmNnzlzirtPnOd6Tri1/ONNGywzRcf1/tAzwHAuuL/kRF6uNtMpYE5uyjApDx/FNweN4/Df8jtfhY26/Ggo3z/IY3aEc28v4CbUJWo/KxDE/JzS87nJ2QB58D79Dgb+DZ7pHP2H40Gc698N86F7fv4gPX2Ovj9sbomtCdL7alEO/JUExxPY5itHBew10r8jR3kfvXhHXph2f19meI+DWmSY9+jhaa4tAH25tcsrog881HNpPx22HO4NAzzVMjsh+rJ+vK3G4ffT5GfN6R3hxecQT3ZzD8XpPeHF4cHkQ6jXtduz+y2iVFmFU6DxWRiVH+y+YS8xrZGu9/81Z+wzrsLQ+8PNJ/W9aBk08fIty01NdRl5T74eeet6B6xMP5t2s3n+3qLv1p3W3/vZvEOuujkA7RzQ8RmzKRfuM8cK8QA+f1P++ZQA+eYO+ge/XjPw3RP6e3sw7uuZ7ztQ/Z+o3/vmOjLuw7WPn7SeZhD9+R3WD2PnSH/bj+gn1h+oT6w/DL/3h7vvX6A9xu50ydT3CcyoOj4sF884ThzGjv/XXlIf2KpWSQVBqaUurYp2FuUxUktjI6iSNShtHptSVjIwKs0oHVqZVpWNV6MRmZZFYauukx7ZT5wEYv98ABrZwleFXAAA=", - "debug_symbols": "tZnBbts6EEX/xessRHKGQ/ZXiqJIU7cwYDiBmzzgoci/P45GR00WNgL5ddN7XIdHEskRSfj37vv+28vPr4fTj8dfu0+ff+++nQ/H4+Hn1+Pjw/3z4fE0/vf3bvJ/St59Kne7UiIkQiNqhEW0iD6HTBEpIiwSFgmLhEXCImGRYZERfQ6dIlJEjigREqERNcIiwqJhqWGpw1JH5IgSIREaUSMsokX0OWyKCIuFxcJiYbGwWFgsLBYWC0sLSwtLC0sbFhshERpRIyyiRfQ5+hSRInLEsLQREqERNWJY+ogW0edI07Tk8KTkkIECCKBABQxoQF8gTQDmhDlhTpgT5oQ5YU6YE+aMOWPObs4OBRBAgQoY0IC+QJmABGAumAvmgrlgLpgL5oJZMAtmwSyYBbNgFsyCWTB7daQxo5PXR0ACMlAAARSoC3hhJHXwP64O/sfmoEAFDGhAX8BLIyABGSgAZsNsmA2zYTbMDXPD7CWTmoObffZ62QQoUAEDGtAX8BIKSEAGMHfMHXPH3DF3zH0x52kCEpCBAgigQAUMaABmL6s8OSQgAwUQQIEKGNCAvoCXVU4OCXBzdiiAAAq4uTgY0IC+gJdVgJvFIQNuVgc3Vwc3+5N6WQUY0IC+gJdVQAIy4AuNP9e81MygQAUMaEBfwMsqIAG+gPkje1kFCKBABQxoQF/AKy4gAZi9Bot3lNdggAIVMKABfQGvwYAEZMDN3r1egwEKVMCABvQFvAYDEuBmcyiAAApUwIAG9AW8BgPc7APnNRhQAAEUqIABDfAFf4xX8RoMSEAGCiCAAhUwoAFuHnVRvAYDEpABiddp8dKT7FABA1zo2yQvvRm89AISkIECCKCAm8XBgAb0Bbz0AhKQgQIIoADmgrlgLpgFs2AWzILZS0+8N7z0AipgQAP6AvOOb4YEZKAAmBXzvKJVBwMa0BeYF7sZEpCBAgigAOaKuWKumA2zYTbMhtkwG2bDbJgNs2H2ShHzTfUEJCADBRBAgQp4hzcH7/DuMMw6+T59AhKQgdFKk0MD+gJeBQEJyEABBFCgAm7ODg3oC3g5BCQgL6BcS7mWci3lWsq1lGspT6E8hfIUlaeoXKtyLZ8SAQIoUBfwcdf56JIAb+7HFx93VQdvrq+vdzvOVl+fz/u9H63eHLbGEezp/rw/Pe8+nV6Ox7vdP/fHl/mPfj3dn+Z8vj+Pb8ew7E/fRw7hj8Nx7/R696f1dLnp2NwvjceGdG2u79unK+2Tv3hCMDZWqyH1d4Z8xaCF+x+b0W0G3/othrzN0CqGquWSQS8bxiphi2G8+uuWe6ja13voeskwXe3JVWCXxvJa+5Zo/+b6H2+f12EYO5GLc+maYFq7YOx8p0tdcFUxDmEoxulikyLLqhhjeVFRbp4NV+9irM/rXZS8TdGZEGNbvO0uRNa7GG/aTQq1VVE39kUteVWIblPY2heWy+2KuqFAx4aYWTHlDQVW0jqrimxoL5nrSym3tZctLxhZy3usiVvaN9prvviCyXb7atVuX67a7etVu3nBKun2Fav9zSVL19eL2sUZVeTmES1684heV3xoRK8rPjai7eYRvXoX/+eItr5pEzBORevC1zYufFr/KLa97Ms6r4Ztm2IcjNa1M/cNfTlOnnTmOGBe3MxIvaxo6/6+vZ0R9uFbsEo/lDalLQ9harcapN9mGAvPunLVN+ecVLcZygZDFQTvyvvDI1HX3XltbVN73nI2vb/+l/Hp/uFwfvdD36ubzof7b8f98vHHy+nhzbfP/z7xDT8UPp0fH/bfX857N/35tXD881nGOiLSv/jvQePjKOy70sw/pvlbvZNsX179Zv4D", + "bytecode": "H4sIAAAAAAAA/+1cSY7jyhFNaqqWapBq6P5n8I5zkl4V4Or2eAlOeQyDgH0DA954Y8ArA14Y3nhnwL6Dt15486/xxSqG9BQMUdQvZlc30Al0c4hkDC8iI0eVo17KfPvPae9n7XWhuoXqPLZX93XFG5GXa1NP5yvRc/KV6Dn9SvScfSV6zi3peZAEGqWbAGuc1wAzV8cLGfi/9mbZPk+APmIQeEsmd0z+iRuWS8G+EfUPli3PCzv8Y+L/zg5/l/T+eb3nj7aQ3Ov22QEs6RuiTYD2C0abAu2XjDYD2q8YDWP114yGMf6bltboe6v29x/a+yXT30acIQZj++le0H8CtjXlZ/Uej4FyvVNyifdTbcWuXfv/aIe/T/w/2eEfXLZx9tvWMRSb7/au2PmMYmRpJ0YCh8lTat/ukEbyV8pqbvEcJo/04fhQHBN2K0HXjUBz2P1KkLMS5Ei8sC01z5d2MCnIxivVLUS7PmIjL1P2jHo3+P4eYpLX4zIxJq8ZDXG6ae+Xgq4j4lRdM3lK0HkNsjHv8iLhRHqfixPGxZrRroC2YbRrgS9heAPvR8QwGpoPSP5KWfXpLh/cMH04PjwfrAVdNwINYxhpKGctyJF4rUbkdTkiL4ox3pc05bG9uklQ6dTzyiSI3FTHfmq2I0kdBZ4pvKjITKnTLEnzqiryIE3dwMRppP0iDmITZlG2VN3cSby9TJuoMllWahNsmflRlnqJCdyiSEodBIEpiizXW3KRusYLyyrx8qKI/MSkaRCVUn490P2VZam6+XXHOwqzLIkzHRR5kgVh5EdVlOdVGVdhkGeelyZVErsmMkEauX6cGO2VJoxSLy+r8GUsweOXePtuWhYmN/72v0ib1MRuuEUzLLWXFbHJTKL9rXhT6NDVhRtWeex7WewnusgKz495rCM2JHcD70dsl3poniD5K9WNSxt5YsP0OdZOCLtbQdeNQON54laQcyvIkXitRuR1OSKvqxF53ViwcSnQxoshz6eYuFPdQrR7kM378gegYX/IizS2wPnnH88YW6DP7hkNffDAaJgX3jMZJHcuyJgxGtXN2qtdH7nuHfBVqhtHqO9cwGF+xLaK6W9pPCPqf81k4/rFWHKlOYTzeWwe3FeQ/JXqxp2NvuKa6cPx4X3FjaDrRh2Psb6x640g5xuv8Xj1zaGGxKMkB9sHH1Nfse8f26v7uuJJc1rebi3l2mxouyX5K9X1h412K40lpPjg/Tl+uxFoPA7vBDl3ghzbvK6+UL2+2fjjbOzri39sbkL8qC2sVbc90pjV9jiN4zVT3XE/6jZRXbwQ1zl796f22oyX/+rsv+G5YEj/Ia0VWV5n243HLgTZzR7Vn5Vs0xxsugCbPtbqACeq/1Nnz/Mv7bu1IJuPQS2t74d96yHu64pPNkzrve4XYFdTZrUVu3SD199arKV1mTnIbf4NXafo6/NwDkf+6puLW953jiT8Md80ZVZbkS3ij/tFHH8pR0j7S33+wtxAmG5U1zdzRsNxJMlcq25/w8eY2N4f26tfmiRPQ7eKktStwsoLtK7cKNCByao4zbxSR+F2rTaIqu0iZuLmcRynoQ6367p+URal5blfLMXEHOxqyqy2IjuTYgL9zmNCWmOX+o0hbRgxlWIC8xJiosB+vyrKJCm9KI11XkRBniTbdWW/cksvTuLY264NF3mcZYVfBiaJKn+7LqyryuR+4aXbBX3L7V1LvsVc05RZbUW26Fuc6w3xrbR/NNS3Q9o79+3IGCQS/tiPN2VWW5Et4o/5aUi+xfoc/762KOVUae9MGhuTTOmsUGuOOKcfcwzkMHlkI75D+StlNY528+or1cVc8pHlPiM9t48mfSztLcV9OWEu6NOMvRaqG0OIlzQnQxkYD9xuSfZT/XKVxvb8XBFfA8e6C0ajuv9vr7bPFkrr46f0XwBtBvf4PBO+x1wxZ/W/Z/YuPqO9CyYbzzqOJDfhWEwAMyXIRZqE44TRJke+Jfwk+0bG9uxzU+eeByK9zz0PhFjwc1PY7m8YbSLwtYzh4POBJH+lulja6KtmTB+OD18Dngu6bgSaw+7nghwp50u8pkwH3n6aslRdv7/FWIPerZTcXh/H0Wfnv6mAqyPgys9747cbgcbPaUhxMhPkSLxWI/LiZxgs9SdaGotT4esiiLl0pvPcfEg2Nfz/c0Y+xHjkvx2QfCu1afIVP1PflMf26r6q+LnlsU/KfaAErKTzx0P9Q3qf219hrK4YDceOl4zW119ZwnBwf0XyP1d/JY3f+/qrpaDrRqChb3jsTIV3kx5e5Mv1Ed5KWV9DdjleuG8kzVMmqhtPB+u+7N1PWkOkfaOFgN2iBztH0Iefgx0Zn5yfKccinQnj+f01412y6dz8jnHE90DRb3wsjLHJzz+QHGkOOGU0qpu2N7yPGDuGpTkdyboEnaT1hL49iFN7QLz94hoDfUu231mx3Qv4OUks0jlJ1JEXKQZJ73P7MMSJn4XEvTI6CylhyH9jQ7pMVP+e7Buuk4v7YuibeX1o0wPQpkJ9HpPvhfroX8Jow+pzn/A2Lp2teKr3djzXqfffk45vgSe2Y46ndF4E63M8H3owQIw2qos1P9uE8XoM62Ox+6k+rC/lnr79asluaU96Leh3p07Lxlh5qg/r35+pa1/Mo/y1oN+DOi0bdf3IdH1/pq4fhPrYpu6ZrqjfB0ZDG7FffuZdd3m+xZ4S4sPbVh8WTeHYfSfU/wB1eNv6Dmj42zyOz/s3xKdvP7vvzIKEjxS72C55fsH44W1Wko3t+Kne2/Fcp95//5Z7yKjjkFwu/YalD0/Eif/eCPF8YDQc098yOaf2Vp9qdWDjqTNnNnHXycsc71nXlj+daeNlBnSs/7uWAc6x6PqaP+JidOaZIDNZlJVlWGR8HN8UHMfjb/gtr8NH0n41FWme5Qi6Uzm1l/FfaBO8HpeJMb9gNFx3uTgij76nv0OB39Ez36OfCHz4M5/7IR++1/cH5sO32OuT9ob4mhCfrzbl2N+S4BiifZZidPBeA98rsrT30btXJLVpy+d1ducIpHWmSY8+ltbaQtJHWpucCvrguYZj++nYdqQzCPxcw+SE7Kf65bpWx9tHn5+R10fGS8ojjurmHInXJ8ZLwkPKg1Svabdj91+ZDpLCDwudR0EWxCf7L5pnLGqwtT785qJ9pnVYXp/4zVn9v7cMmnj4B+Sm57qCvKbev3vqOUeuzzyEd7P68N2y7taf1t36u98g1l0diXYJNBwjNuWqfUa8kBfpMWf1/9UyIJ+8g2/o+40g/x2Tf6C38I6v+V4K9S+F+o1//snGXWj72Hn7WSbjj++4bhQ73/rDfly/oP4w+ML6Q/9bf7j//i36Q2y3U6Guw3hO1fFxsRLeOeo4Zvxv/TXlsb16QeC5bqk9U5og0qmfe3EQxyY0Ok7C0kRhVurKC7PATyvtGi+pKh0FhY5NWhax4bZOemw7dx6A+P0AQmTJgeFXAAA=", + "debug_symbols": "tZnRbts4EEX/xc95EMkZDtlfWRRFmrqFAcMJ3GSBRZF/X45GR0kebATy7kvucWweSiZHJOE/ux/77y+/vh1OPx9/77789Wf3/Xw4Hg+/vh0fH+6fD4+n8d8/u8n/lLz7Uu52pURIhEbUCItoEX0OmSJSRFgkLBIWCYuERcIiwyIj+hw6RaSIHFEiJEIjaoRFhEXDUsNSh6WOyBElQiI0okZYRIvoc9gUERYLi4XFwmJhsbBYWCwsFpYWlhaWFpY2LDZCIjSiRlhEi+hz9CkiReSIYWkjJEIjasSw9BEtos+RpmnJ4UnJIQMFEECBChjQgL5AmgDMCXPCnDAnzAlzwpwwJ8wZc8ac3ZwdCiCAAhUwoAF9gTIBCcBcMBfMBXPBXDAXzAWzYBbMglkwC2bBLJgFs2D26khjRievj4AEZKAAAihQF/DCSOrgH64O/mFzUKACBjSgL+ClEZCADBQAs2E2zIbZMBvmhrlh9pJJzcHNPnu9bAIUqIABDegLeAkFJCADmDvmjrlj7pg75r6Y8zQBCchAAQRQoAIGNACzl1WeHBKQgQIIoEAFDGhAX8DLKieHBLg5OxRAAAXcXBwMaEBfwMsqwM3ikAE3q4Obq4Ob/U69rAIMaEBfwMsqIAEZ8IXG72teamZQoAIGNKAv4GUVkABfwPyWvawCBFCgAgY0oC/gFReQAMxeg8W/KK/BAAUqYEAD+gJegwEJyICb/ev1GgxQoAIGNKAv4DUYkAA3m0MBBFCgAgY0oC/gNRjgZh84r8GAAgigQAUMaIAv+GO8itdgQAIyUAABFKiAAQ1w86iL4jUYkIAMuDA7KFABF/ruyEsvoC/gpReQgAwUQAAF3CwOBjSgL+ClF5CADBRAAAUwF8wFc8EsmAWzYPbSE3UQQIEKGNCAvsC845shARnArJgV87z7qw4GNKAvMO8CZ0hABgoggAKYK+aKuWI2zIbZMBtmw2yYDbNhNsyG2StFmm+qJyABGSiAAApUwLvoDqML9fnslaLJ9+kTkIAMjFaaHRrQF/AqCEhABgoggAIVcPN8PGhAX8DLISABeQGlL6UvpS+lL6UvpS/lLpS7UO6icheVvip9+ZQIEECBuoCPu/phxcc9wJurgzevDt68vr7e7ThbfXs+7/d+tHp32BpHsKf78/70vPtyejke73Z/3x9f5g/9fro/zfl8fx7vjqHbn36MHMKfh+Pe6fXurfV0uenY3C+Nx4Z0ba4f26cr7ZM/eEIwNlarIfUPhnzFoIXrH5vRbQbf+i2GvM3QKoaq5ZJBLxvGKmGLYTz665ZrqNrXa+h6yTBd/SZXgV0ay2vtW6L9u/4/3z6vwzB2Ihfn0jXBtH4FY+c7XfoKrirGIQzFOF1sUmRZFWMsLyrKzbPh6lWM9Xm9ipI3KaQzq8fmddtViKxXMZ60mxRV3qZFtW2KkleF6DaFURxjC1xuV9QNBTo2xMyKKW8osJLWWVVkQ3vJ9C+l3NZetjxgZC3vsSZuad9or/niAybb7atVu325arevV+3mBauk21es9n8uWbo+XtQuzqgiN49o0ZtH9LriUyN6XfG5EW03j+jVq/gvR7T1TZuAcSpaF762beErWt8U2x72ZZ1Xw7ZNMQ5G69qZ+7ar6OtVyLRlyRmHV8ZjnFEv7ofkykOzrUeE9n5S2acvwSo3UdqUttyEqd1qkH6bYaxd6+JX3x2VUt1mKBsMVRB8eEJ8eiTqusGvrW1qz4PSpo/9fx2v7h8O5w+/Fb666Xy4/37cLy9/vpwe3r37/M8T7/Bb49P58WH/4+W8d9PbD47jz18yliKR/tV/Uhovx7PhrjTzl2l+V+8k29dXv5h/AQ==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_0.snap index 83410eb2c3b..a565b613194 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_0.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZlNbttIEEbvorUXrK7qv1wlCALHUQIDgm0o9gCDwHefLhUfbS8oeMiNvydL/UA2q9hN8O/h5/HHy+/v9w+/Hv8cvnz9e/hxvj+d7n9/Pz3e3T7fPz6M//49TP4n9cMXvTnoFCERKUIjLCJHlIga0SLCYmGxsFhYLCwWFhsWG1EiakSL6JfIU4REpAiNsIiw5LDksORhKSP6JcoUIREpQiMsIkeUiBoRlhKWGpYalhqWGpYalhqWGpYalhqWGpY2LG2ERKQIjbCIHFEiakSL6Jfow9JHSESK0AiLyBHDItPIOmebs0fKNFQiDgIkQIGhFHXIQAEq0IA+g0yAAAlQALNgFsyCWTAL5oQ5YU6YE+aEObnZHApQgQb0Gbz4AwRIgAIGYFbMilkxK2bDbJgNs2E2zIbZMBtmw2yYM+aM2RtFioMCBmSgABVoQJ/Bm0Oqg/+mOfhvukOfwdsiQIAEKGBABgpQAcwVc8PcMDfMDXPD3DB72yQvbG+c5NXrrRPQZ/D2CRAgAQoYkIECYO6Y+2xO0wQIkAAFDMhAASrQAMyCWTALZsHs3ZSSQwYKUIEG9Bm8mwIESIACblaHDLjZHCrQgD6Dd1PKDgIkQAED3FwcCuDm6uDm5uCLi5/pZXm5gAAJUMCADBTAlyw/L++mgD6Dd1OAAAlQwIAMuNlP2bspoAF9Bl+GAgRIgAIGZACz96D6tHgPBvQZvAcDBEiAAgZkoABu9nn2Hgzw5Xc0UfIeDBAgAQoYkIECVMCXdZ9578ELeA8GCJAABQzIQAHc7HXoPRjQA9R7MECABChggJuzQwEq0IA+g/dggAAJUMAANxeHAri5OjSgz+A9GJDilqveetYcDMiAC7tDBRrQZ/DWCxAgAQoMc54cMlCACjSgz+CtFyBAAhTAbJgNs2E2zIY5Y86YvfWyOChgQAYKUIEG9Bm89QIEwFwwXxY7n15vvYACVKABfYbL8ncBARKgAOaKuWKumCvmirlhbpgb5oa5YW6YG+aG2Tslm0MDfFqy79F9WoqDAD4t1cGnpTn4hHeHDBTAzf319ebAw8T35/Px6M8S754uxjPH0+35+PB8+PLwcjrdHP65Pb1cfvTn6fbhks+35/HtuODHh58jh/DX/eno9HrzNnpaHzr2rPPgsc9ahueP4+XKePGbQQjGxmExSP9gSFcMWTn+scfaZvDLNRvSNkMrGErWNUNeN4y7YJ0N49ZWthxD8dKYj6HnNUNdN1juNhusvLuaUrYZdM0wXb2ay0nUtXq6Nr4J49/NwefHp6UUxmq/Ws9XLsPYW3IZxu5yWrsMVxXj+QbF2MFvUiRbFKOeVhX7K/LqUajKchSatik6BTG2ntuOwmw5CsuySZHroigb56JoWhSWtynqMhc16X7F6olca5BGh4/N3YYGU1mqSm3DeEvLHUZ133jbcoOxpb2tbjl/a4zPafUGk/ruFVOn3UvmdcWn1szrik8tmqq771FXj+Jzy6bm3evm5xVbFs683ORyXa1rbfvrqu+vq76/rvruurK0v6767roy211Xn1fsrKvWN22IxlPYsgloGzcBubwpti18ulT3sG1T2LTs7Cz1DWvneNJlMscD7erGLl85iLY8b7X3dVk/Cq7cMotxNT70xv8QLDvs0to2ATeJOq0ewbVZrIVLOR7VZct1qLnuNVhfM3wbn27v7s8fXvS9uut8f/vjdJw//np5uHv37fO/T3zDi8Kn8+Pd8efL+eimt7eF489XG28bTPM3f+szPmqfbrRfPsrlW7kx0W+vfjD/AQ==", + "bytecode": "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", + "debug_symbols": "pZlNbttIEEbvorUXrK7qv1wlCALHUQIDgm0o9gCDwHefLhUfbS8oeMiNvydL/dQiq9hN8O/h5/HHy+/v9w+/Hv8cvnz9e/hxvj+d7n9/Pz3e3T7fPz6M//49TP4n9cMXvTnoFCERKUIjLCJHlIga0SLCYmGxsFhYLCwWFhsWG1EiakSL6JfIU4REpAiNsIiw5LDksORhKSP6JcoUIREpQiMsIkeUiBoRlhKWGpYalhqWGpYalhqWGpYalhqWGpY2LG2ERKQIjbCIHFEiakSL6Jfow9JHSESK0AiLyBHDItPIOmebs0fKNFQiDgIkQIGhFHXIQAEq0IA+g0yAAAlQALNgFsyCWTAL5oQ5YU6YE+aEObnZHApQgQb0Gbz4AwRIgAIGYFbMilkxK2bDbJgNs2E2zIbZMBtmw2yYM+aM2RtFioMCBmSgABVoQJ/Bm0Oqg3+mOfhnukOfwdsiQIAEKGBABgpQAcwVc8PcMDfMDXPD3DB72yQvbG+c5NXrrRPQZ/D2CRAgAQoYkIECYO6Y+2xO0wQIkAAFDMhAASrQAMyCWTALZsHs3ZSSQwYKUIEG9Bm8mwIESIACblaHDLjZHCrQgD6Dd1PKDgIkQAED3FwcCuDm6uDm5uCLi//Sy/JyAQESoIABGSiAL1n+u7ybAvoM3k0BAiRAAQMy4Gb/yd5NAQ3oM/gyFCBAAhQwIAOYvQfVD4v3YECfwXswQIAEKGBABgrgZj/O3oMBvvyOJkregwECJEABAzJQgAr4su5H3nvwAt6DAQIkQAEDMlAAN3sdeg8G9AD1HgwQIAEKGODm7FCACjSgz+A9GCBAAhQwwM3FoQBurg4N6DN4Dwa4sDkoYIALu0MBKtCAPoO3XoAACVBgmPPkkIECVKABfQZvvQABEqAAZsNsmA2zYTbMGbO3XhaHBChgQAYKUIEG9Bm89QIwF8wFs7deTg4ZKEAFGtBn8NYLECABCmCumCvmirlirpgb5oa5YW6YG+aGuWFumL1Tshekd0qAf0XxPbp/RXUQwL+iOfhXdAff2k4OGSiAb3Cn19ebAzcT35/Px6PfS7y7uxj3HE+35+PD8+HLw8vpdHP45/b0cvnQn6fbh0s+357Hu0N5fPg5cgh/3Z+OTq83b6On9aFjzzoPHvusZXj+OF6ujBe/GIRgbBwWg/QPhnTFkJX5jz3WNoPvsGZD2mZoBUPJumbI64ZxFayzYVzaypY5FK+aeQ49rxnqusFyt9lg5d3ZlLLNoGuG6erZXH5EXauna+ObMP7dMfj8+LSUwljtV+v5ymkYe0tOw9hdTmun4api3N+gGDv4TYpki2LU06pif0VenYWqLLPQtElhnc4aG8RtszBbZmFZNimKvZVFqdsUmhaF5W2KSnOMbabuV6wezmsN0ujwsbnb0GAqS1WpbRhvabnCqO4bb1suMLa0t9Utv98a43NavcCkvnvF1Gn3knld8ak187riU4um6u5r1NVZfG7Z1Lx73fy8YsvCmZeLXK6rda1tf131/XXV99dV311XlvbXVd9dV2a76+rzip111fqmDdG4C1s2AW3bJkBzeVNsW/h0qe5h26awadnZWerbZtGXWdi0ZfkdN8ucj3FPvLo3zFcumm25ZWvvS7t+FFwpqmKc0A/t9T8Eyya9tLZNwHWmTqszuHYUa+E8jLt92XIeaq57DdbXDN/Gq9u7+/OHZ4Wv7jrf3/44HeeXv14e7t69+/zvE+/wrPHp/Hh3/PlyPrrp7YHj+PPVxgML0/zNHxyNl9qnG+2Xl3J5V25M9NurT+Y/", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 4175d838109..6ca1c181b8c 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_check/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -62,8 +62,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZnRbts6DIbfJde9MCVSlPYqwzBkbToECNIiaw9wUPTdR5r+3fbCgmfflJ+b6oMj65eY5u3wcPr1+vvn+fr49Ofw7fvb4dftfLmcf/+8PN0fX85PV/vt22HwH6kdvuW7Qx6iUJQUJUfhKBKlRNEoNUpYOCwcFg4Lh4XDwmERe42t2FWxUqJolBqljaUMUShKipKjcJSwlLCUsJSwlLBoWDQsGhYNi4ZFw6JhUbOIFbNUK20sdYhCUVKUHIWjSJQSRaOYpVlpY2lDFIpiFhqs5qnyVGWqZiKyqlOtU21RaTAdZQcCJEAGMEAABaCACmgTEMwEM8FMMBPMBDPBTDATzARzcjM7ECABMoABAigABVRAmyDDnGHOMGeYM8wZ5gxzhjnDnGFmmBlmhplhZpgZZoaZ3VwcKqBNIAOAAAmQAQzw4WrgiaDq4H/cHDKAAQIoAAVUQJvAMxJAAJgVZoVZYVaYFWaFWWH23KTBwczJF61nJyADGCCAAlBABbQJPEsBMDeYG8wN5gZzg7nB3GBukzkNA4AACZABDBBAASjAzcmhTeCxCiBAAmQAAwRQAApwc3ZoE3isEjsQIAEywM3iIIACUEAFuNlWXfJYBbhZHdxcHXx/d/N4Tozge7wPH8+KcZSfFuMoPy/GUX5i2NpI45kxAgESwMw8ODBAAAWggApoE3isAgjgp45PnccqgAECKAAFVECbwM+kAALA7BlknwTPYIAACkABFdAm8AwGECAB3Oyz6hkMcLNPlGcwQAEV0CbwDAYQIAHMLD4/nsEAARSAAlrsP8mjJ77CPXoBCeBCv0OPXoALfSV49GQc7kJfCR498dvw6JXBe5EBQIAE8CObHBgggAJQQAW0CTx6AQRIAJgJZoKZYCaYCWaCOcHs0SvJIQEygAECKAAFVECbwKMXAHOGeTzRqgMDBFAACqiANsF4oo1AgASAmWFmmBlmhplhZpgFZoFZYBaYBWaBWWAeg+atpr/1seckQAL4pKoDA3xSffTYBzYHu0H1VeM5U384njP1mfOcBRAgAcysY4fLAAEUgAIqoE3gOQsgQALAXGGuMFeYK8wV5gpzG83v73cHtPE/X26nk3fxn/p66/afj7fT9eXw7fp6udwd/jteXsc/+vN8vI715XizV21iTtcHqyZ8PF9OTu93H6OH5aHWYU6DrSuah8vX8dQZbx0TBHa6zwZqXwypY7CJgsGmaouB6eNNUN5ikFpgKLJokGWD7Vl4F7YRlS33UHzrnO6hyZJBlw0sjScDl09Pk8o2Q14y9NaTzMuh6NJ66o2vhPGf5mD9+OS7zjjejuTF9dx5DNYA4jFYCzgsPYaugrxlCoW12ZsUiWeFradFxf4V2b0LO6jmu8hpm6JhQVh/uO0umOe7YKFNCtFZUTbORclpVrBsU+g8F5ryfsXiG+kFpCLh1optCFimeVVl3jCe07zD5LxvPG/ZYHiON+uW988V4yUtbjCp7T4xc3+TxZFPIsuKzrltzRYSYT3V4h6VO2uxzq1D/bwS9asgLwsK41F+OXP/QTAfFuVz4/AvAsyjDst30JtGLXiY1i7SpiehorsV3NYouktqPjjtX1YbV+WqJopp95nVvYt1bRTn3X3UesWWRkrmfIou7nNcdu8zrPufaN39RNdNRG2bOjqLx9zF1I1djJQPxfLng7R7w5W8c8MV3rnhdgVrNty+YMWG253GdRtuX7Fqw+0rVm24/SU1x9NW17ZmkIf5owqntulzL3/s+rLpU+u6VqTw7mQU2ZmMUnYmoytYk4y+YEUyutO4Lhl9xapk9BWrkpG2dSI/7Op4f759+fb73V238/HX5TRdPr5e7z+9+vL/M17Bt+fPt6f708Pr7eSmj6/Q7cd3trXEKf/wr0/t0j+/5lb9ksbLdscD/Xj3m/kL", + "bytecode": "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", + "debug_symbols": "pZnNbts6EIXfxessNOQMf/oqF0WRpm4RwHACN7nARZF3v3M0OkqykKBKm8znOvzCUDzkpP5z+nH+/vrr2+P159Pv05d//py+3x4vl8df3y5PD/cvj09X/9c/pwFfUj99yXenPESRKClKjqJRLEqJUqO0KGHRsGhYNCwaFg2LhsX8PfXir4qXEqVGaVH6WMoQRaKkKDmKRglLCUsJSwlLCUsNSw1LDUsNSw1LDUsNS3WLeXFL89LH0oYoEiVFyVE0ikUpUWoUt3QvfSx9iCJR3CKD1zxVnapN1U0iXutU21R7VBlcJxkghETIBCUYoRAqoRH6BEKz0Cw0C81Cs9AsNAvNQrPQnGBWgBASIROUYIRCqIRG6BNkmjPNmeZMc6Y505xpzjRnmjPNSrPSrDQrzUqz0qw0K8wF0Ah9AhsIQkiETFAChlcHJEIaAN/cAZmgBCMUQiU0Qp8AGQkQAs2V5kpzpbnSXGmuNFeakZs0ANycsGmRnYBMUIIRCqESGqFPgCwF0Nxp7jR3mjvNneZOc6e5T+Y0DAQhJEImKMEIhVAJMCdAnwCxChBCImSCEoxQCJUAcwb0CRCrpAAhJEImwGwAIxRCJTQCzL7rEmIVAHMFwNwAON9hHu+JEXDGY/h4V4yjcFuMo3BfjKNwY/jeSOOdMYIQEsHNOgCUYIRCqIRG6BMgVgFCwK2DpUOsApRghEKohEboE+BOChACzcigYhGQwQAjFEIlNEKfABkMEEIiwIxVRQYDYMZCIYMBldAIfQJkMEAIieBmw/oggwFGKIRKcKFhYyN6AUJwoWFiiF4AhNgAiJ5hAyB6hg2A6Bl+OqJXYEb0ABnRCxACzAmAK1sASjBCIVRCI/QJEL0AISQCzUKz0Cw0C81Cs9CM6BXMENELSIRMUIIRCqESGqFPkGnONGeaEb0yNmpKMEIhVEIj9AkQvQAhJALNSrPSrDQrzUqz0mw0G81Gs9FsNBvNRvPY+il6zYEgBHgaIBPg6QD3VOwWBK3ioSBoFQuFoNWxee0TIGgBQoDZAG6u+FkIWoARCqESGqFPgKAFCCERaG40N5obzY3mRnOjuY/mt7e7E/v4by+38xlt/IfG3tv95/vb+fpy+nJ9vVzuTv/eX17Hb/r9fH8d68v9zd/1pTpff3h14c/Hyxn0dvc+elge6i3mNNjbonm4fR4vK+O9ZaLAr/fZIP2TIa0YfKFo8KXaY1B5/yUk7zFYKzQUWzTYssEPLf4WfhKVPXMoOESnOXRbMtRlg1rXyaDlw9OUss+Qlwxr+8nm7VDq0n5aG9+E4z+swfbxCY30ON7v5MX9vPIYvAPkY/AecFh6DKsKQc8UCu+zdymSzgrfT4uK4ztydRZ+U82zyGmXQjuT5W3cvlmozrNQk12Kou/botR9ipxmhdo+RWU4vBnMxxWLy7kWkMaEey+2I2BZ5l2Vdcd4TfMJk/Ox8brngNE53lr3/P7aON7S4gGT+uEbM68fsrzyxWxZsXJve7PFUHlPtXhG5ZW92ObWoX3cifWzIC8LivJRfrpz/0IwXxblY+PwNwKuYx2WZ7C2jLXwYXq7KLueRLV6WKF9i2J1S80Xp/+f1c5duamJUjl8Z63OYlsbpflwH7VdsaeRsjmfVhfPOS2Hzxmtx59oO/xEty1E67s6ulx17mLavi4mW3lXLP99kA4fuJYPHrimBw/cVcGWA3ddsOHAXV3GbQfuumLTgbuu2HTgrm+pOZ6+u/Y1gzrMf6po6vtm0edZ6LDrz1bT94vD9hk2dTPFDoerlIPhKvVguFYFW8K1LtgQrtVl3BaudcWmcK0rNoUr7Wtmvvqr+4fH26dP0N/guj3ef7+cp5c/X68PH959+e+Z7/AT+Ofb08P5x+vtDNP7x/D+5R/1vaQpf8VHsP4SGcu94aWML/udDvL1DZP5Hw==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_0.snap index 412e3285cfd..34db516ff11 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_0.snap @@ -58,8 +58,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZS5LbNhCFPhyJ+syM44sABEEQO1fl52ME/OACuQB32SSLVDbZpSq5aMgJ22y1WrQqJmwPqjQg0c3XDw+NDzkr8V/Z9r8Vuh5KIq4L+Lwba/lpRS2IJWPyXL0SnutXwnPzSnhuI/G8mFwD6WHgBlG24naBzv0z1ulYr5F9QWFVSuIuiV/K3KVM/xbkr9MR8yEOvgH8XRx8CbjfdRM+7gvYN2P9vpu0fI+eGcp5vF5NLh9wwbZGtu+JbYNsPxAbztkfiQ3nOXDa9783Yrp+O16nhGOMfMP9XHq83jL816hvQ/m2m/S4M676WNzjqOMv4lL73RTqAyfQYB9HA70i8YSYcgfbIP5BRJ1DakXiAR+qz5polzJcnxnbilynTJyUicNh4Vyhc/XdMnpIbq5/ptww/zc3Yu1vc7mB9fkacuNrx+L2l9WNGuLQNhrn1joaMSdk5DmQpeJaX8BWWvdrfWNVaII21mWVKnRRhDzYosybYHLf2FblXmeutTKosm2t0bUtgmvqIgD2IQ53BWP8wIzL0JajdmxLxJRX+Nk9smP/FmFawY871k2WurVOqabURjpbZC5IWfTKqFArU/vQWOdLV7VtXWnnpA6FMzare3FD7o0H7IQbE2+DaYPvlQ+6B8uMd6oMWtZ12VitdahrX9neXLt+RPKmLVVV1yYrg3PaNNwZVIjl83XH6dInjC8Lb3VdlV7nJjOtqaq2KdpcV14pV7ZlIYMJ2hmZFWWwqgm5capq2nw+VzPZp1yoQtb/MTa4UMi8VzPvs9f3qehDabM+fKhtLm0t87YqMuWLrLS1r1VWQC4dETbdh06ofcE8tvfuQxD/QLjG2odOhA/Vh+5DZ4brM2PDayW24ThnJg6HlSyI9bAg1m5BrDRCH58EPxZCzO+ddG1aOPfye+cCxD+I6705xlxICJ9bcyHyO34BfHYMn/UMnzTieN1aK7iz1JtRG5pD3HcEyvuE8AWKkczExucPLufp+vHwEaw9weL6IMhzieDPiNgGvj+NdeQ8kt8g3Hv5475ub/BvCP9Y52KOP8Qa5uXc+gbXeP7OvYPfsx9yayvW60Sew2eJhFxz2Di2YDAoDj3HnFGf6LPpDVzoP3wjwjhw/0jub3HG91w+PRIb+P481pBPT+iZ2PmEY2G+8G2czk9YG0CjTTfZ6He3bRelH2bg8BviQcch6S77hMdvw/jTOfDE+D8iH9DoWVxreCRYawYL58QB9ePFp5tswPFL6In3G6rncaZPQlzryemPdaJnOaz1mdhw7tJ9jdMa5y7Wmtq4d+qYuttSSugLjDmsi7RskR37/zre428PUH/KP9GC9SpoH/rX9KbJa0/XDSGu96EX7brJjvN4KLvxfov6iP3xdwvs/zv49r8/xmvIiYSJN/j9PeO3ulG/YDBt2+6yLe2u/TfdtT/EPnTXHMF2RDY8x4ZyGu+xXhgLeCTE/6/xHsZkj56B55+Z+HsS/4I304bnOMXaMG14fv0JeGON+770e81LTIKP2yg3yJ0hr/8FLuRa+6khAAA=", - "debug_symbols": "nZbNbqswEIXfhXUWHs94bPdVqqoiCamQEIlocqWrKO/eMcPkZwFq2eQ7hPjDmAPhWu2b7eXrs+0Px+/q7f1abYe269qvz+64q8/tsZdvr5UrHz5Xb7ip0ClA4RWoIEVQsCIqkkItpBZSC6mF1EJqIbUE2UcC2WIBK6IiKfIIdgpQeAUqSKEWVgurhdXCaolqiWqJaolqiWqJaolqiWIJArEkQR6RnAIUXoEKUgQFK6JCLFmQR2SnAIVYwAlxIk0ME8UEIIwT08SsBAfjUoIrIl8CWiALxcUlsIViiyUUXSqh+GQ+ADI970oQsS9HAG8BLZAFMftyCGAL0UKykKfgnQWw4C2gBbJgZm9mb2ZvZm9mNDOaGUfz7baprPOf56FpSuWfbgK5NU710PTn6q2/dN2m+ld3l/FH36e6H3muB9kr69H0e6EID23XlHTbPEa7+aEQYBoMKd+Hh9fxsDAeCE0AKd4NkF8MfsGAKZoBU1pjoNIjNRDgGkNIbAYOs4Ywb0DHdhYopVgzBw75Pocc5gxx3kAh02QgpkcZgNcZcM6w0CfvwiTwTzMIv+6jD7aMPvu58YtXkpKtYgirrkNA9zDMNhpwoQxMdlchJ5pV0LwiOat0em5TfBUsFJLJruRLof8gSHYO/HxX/kVg6xjd/AyWljGyPVswOVh1JeK9T+sVlH+hWGwUPDrpXxv1IVv1rh1eXn5uxTW09bZrps3Dpd897T3/P9kee3k6Dcdds78MTTE93qDk410eihtg/1H+R8smhg2Q+7iVo/8A", + "bytecode": "H4sIAAAAAAAA/9VZS5KkNhAV9aequqfHcxEJIYR2E+HfHMPiowP4BOy8sRcOb7xzhH1RQ5tssrKy6AoPsqcVUS1QJi+fUk8f6ET8Uzb9L0HXQ9mK6wI+H8dafl5RC2LJmDyTN8Jz9UZ4rt8Iz00knheTayA9DNyQlI24XaBzf411OtYrZF8wsSolcZfEL2XuUqZ/C/LX6Yi5i4NvAH8fB18C7jfdhI/7Avb1WH/qplx+Qs8M5WG8TiaXF1ywrZDtW2JbI9t3xIY1+z2xYZ0Dp0P/ey+m6w/jdUo4xtAb7ufS4/WB4b9CfRvK192UjzvjqtfinsY8/iQuc7+fQr1wghwc4uRAJySeEJN2sA3iH0XUOaQSEg/40PysSO5ShusTY0vIdcrESZk4HBbWCp2rH5fJh+Tm+n+kDfNvtRFrf5vTBs7Pl6CNLx2L21+SGzXEoW00zq11NKImZOQ5kKXiOr+ArbTu1/rGqtAEbazLKlXoogh5sEWZN8HkvrGtyr3OXGtlUGXbWqNrWwTX1EUA7GMc7grGeMeMy9CWo3Zs24pJV/jZA7Jj/xZhWsGPO86bLHVrnVJNqY10tshckLLoM6NCrUztQ2OdL13VtnWlnZM6FM7YrO6TG3JvPGBvuTHxNpg2+D7zQfdgmfFOlUHLui4bq7UOde0r25tr149I3rSlquraZGVwTpuGO4MKsbxe91xeesH4svBW11XpdW4y05qqapuizXXllXJlWxYymKCdkVlRBquakBunqqbN57WayV5yoQpZ/8fY4EIh8z6bea9e30vRh9JmffhQ21zaWuZtVWTKF1lpa1+rrAAtnRA23YfOqH1BHdt79yGIfyRcY+1DZ8KH5ofuQw8M1yfGhtdKbMNxHpg4HNZ2Qazdglj7BbHSCH18J/ixEGJ+76Rr08Lay++dCxD/KK735hhzYUv43JoLkd/xC+CzZ/isZvikEcfr1lrBnaXej7mhGuK+I1DeZ4QvUIztTGx8/uA0T9eP3StYB4LF9UGQ57aCPyNiG/j+MNaRdSS/Qrj38sd93dzg3xD+sc7FHH+IdRLz2uDes8H/xPhzY8xp6USeOzHcAI/DxrEFg3FLu3B/Rn2iz6Y3cAEPvgPRuUz3ljnO+J7T/AOxge+PYw2aeUTPxNYMxJrbDxMmZ3PvD9DPdTfZ6He3TRelj2bg8AviQcdv21326RHZ5s4S4P+O8cfjBTl6Iv7cWrtisLBmj6gfzz7dZIO2/yOfeN7RfM6tH0Jc5/PxlRzQsxzONT1jY73ek2usXZxrauPeqWPm3ZZSQl9gzGHNpGWD7Nj/5/Eef3uA+nP+iRasV0H70L+mN01ee7qmCHG5D4H+d91kxzoeyn6836A+Yn/83QL7/wq+/e+38fplje2u4w1+f874JTfqZwymbdNdtqXdtf+6u/aH2MfumiPYTsiG59hQzuM9zhfGAh5b4v/HeA9jckDPwPNPTPwDiX/Bm2nDc5xirZk2PL9+B7yxxn1f+r3mOSbBx22UG2hn0PXfOVPjC6khAAA=", + "debug_symbols": "nZbNjqpAEIXfhbWLrq7qv3mViTGoOCEhaBi9yY3x3aeaolQWTWbY+B3E/miaA3Kvjs3+9rVr+9P5u/r4vFf7oe269mvXnQ/1tT33/O29MvnDpuoDNxUaAQisAAUkcAIvCIIoEAuJhcRCYiGxkFhILI73EYO3PMMLgiAK0ghvBCCwAhSQQCxeLF4sXixeLEEsQSxBLEEsQSxBLEEsgS2OwZbISCOiEYDAClBAAifwgiBgS2KkEckIQMAWMEycSBPdRDYBMMPEODEJwbAHbA5WA2rILp+D05BtIYesizlkX8qBhZYPCMDzs9kMoMFqQA3ZjDmw2eZjgdcQNEQNaQrWaAANVgNqIA1qtmq2arZqtmpGNaOacTQ/HptKS7+7Dk2TO/92F/C9camHpr9WH/2t6zbVv7q7jT/6vtT9yGs98F5emKY/Mll4arsmp8fmNdqUh4KDaTDE9Bzu5uNhYTwQqgBieBogzQx2wYAxqAFjXGOgXCgxEOAag4teDd4VDa5sQOP1LJBLsWYO3qXnHJIrGULZQC7RZCBPrzKAX2fAkmGhT9a4SWDfZuB+3UfrdBltsqXxi1eSoq6ic6uug0PzMhQbnR8wxTJ40rsKfaSigsqKaLTS8b1NYS5YKKQnvZKzQv9BEPUc/Ptd+ReBrmMw5RksLWPw+mzBaGDVlQjPPq1XUPqFYrFR8OqknTdqy1v1oR1mbz+P7Braet810+bp1h/e9l7/X3SPvj1dhvOhOd6GJpter1D88ckPxQ14u83/o3kT3QbIbB/56D8=", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 412e3285cfd..34db516ff11 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_commitment/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -58,8 +58,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZS5LbNhCFPhyJ+syM44sABEEQO1fl52ME/OACuQB32SSLVDbZpSq5aMgJ22y1WrQqJmwPqjQg0c3XDw+NDzkr8V/Z9r8Vuh5KIq4L+Lwba/lpRS2IJWPyXL0SnutXwnPzSnhuI/G8mFwD6WHgBlG24naBzv0z1ulYr5F9QWFVSuIuiV/K3KVM/xbkr9MR8yEOvgH8XRx8CbjfdRM+7gvYN2P9vpu0fI+eGcp5vF5NLh9wwbZGtu+JbYNsPxAbztkfiQ3nOXDa9783Yrp+O16nhGOMfMP9XHq83jL816hvQ/m2m/S4M676WNzjqOMv4lL73RTqAyfQYB9HA70i8YSYcgfbIP5BRJ1DakXiAR+qz5polzJcnxnbilynTJyUicNh4Vyhc/XdMnpIbq5/ptww/zc3Yu1vc7mB9fkacuNrx+L2l9WNGuLQNhrn1joaMSdk5DmQpeJaX8BWWvdrfWNVaII21mWVKnRRhDzYosybYHLf2FblXmeutTKosm2t0bUtgmvqIgD2IQ53BWP8wIzL0JajdmxLxJRX+Nk9smP/FmFawY871k2WurVOqabURjpbZC5IWfTKqFArU/vQWOdLV7VtXWnnpA6FMzare3FD7o0H7IQbE2+DaYPvlQ+6B8uMd6oMWtZ12VitdahrX9neXLt+RPKmLVVV1yYrg3PaNNwZVIjl83XH6dInjC8Lb3VdlV7nJjOtqaq2KdpcV14pV7ZlIYMJ2hmZFWWwqgm5capq2nw+VzPZp1yoQtb/MTa4UMi8VzPvs9f3qehDabM+fKhtLm0t87YqMuWLrLS1r1VWQC4dETbdh06ofcE8tvfuQxD/QLjG2odOhA/Vh+5DZ4brM2PDayW24ThnJg6HlSyI9bAg1m5BrDRCH58EPxZCzO+ddG1aOPfye+cCxD+I6705xlxICJ9bcyHyO34BfHYMn/UMnzTieN1aK7iz1JtRG5pD3HcEyvuE8AWKkczExucPLufp+vHwEaw9weL6IMhzieDPiNgGvj+NdeQ8kt8g3Hv5475ub/BvCP9Y52KOP8Qa5uXc+gbXeP7OvYPfsx9yayvW60Sew2eJhFxz2Di2YDAoDj3HnFGf6LPpDVzoP3wjwjhw/0jub3HG91w+PRIb+P481pBPT+iZ2PmEY2G+8G2czk9YG0CjTTfZ6He3bRelH2bg8BviQcch6S77hMdvw/jTOfDE+D8iH9DoWVxreCRYawYL58QB9ePFp5tswPFL6In3G6rncaZPQlzryemPdaJnOaz1mdhw7tJ9jdMa5y7Wmtq4d+qYuttSSugLjDmsi7RskR37/zre428PUH/KP9GC9SpoH/rX9KbJa0/XDSGu96EX7brJjvN4KLvxfov6iP3xdwvs/zv49r8/xmvIiYSJN/j9PeO3ulG/YDBt2+6yLe2u/TfdtT/EPnTXHMF2RDY8x4ZyGu+xXhgLeCTE/6/xHsZkj56B55+Z+HsS/4I304bnOMXaMG14fv0JeGON+770e81LTIKP2yg3yJ0hr/8FLuRa+6khAAA=", - "debug_symbols": "nZbNbqswEIXfhXUWHs94bPdVqqoiCamQEIlocqWrKO/eMcPkZwFq2eQ7hPjDmAPhWu2b7eXrs+0Px+/q7f1abYe269qvz+64q8/tsZdvr5UrHz5Xb7ip0ClA4RWoIEVQsCIqkkItpBZSC6mF1EJqIbUE2UcC2WIBK6IiKfIIdgpQeAUqSKEWVgurhdXCaolqiWqJaolqiWqJaolqiWIJArEkQR6RnAIUXoEKUgQFK6JCLFmQR2SnAIVYwAlxIk0ME8UEIIwT08SsBAfjUoIrIl8CWiALxcUlsIViiyUUXSqh+GQ+ADI970oQsS9HAG8BLZAFMftyCGAL0UKykKfgnQWw4C2gBbJgZm9mb2ZvZm9mNDOaGUfz7baprPOf56FpSuWfbgK5NU710PTn6q2/dN2m+ld3l/FH36e6H3muB9kr69H0e6EID23XlHTbPEa7+aEQYBoMKd+Hh9fxsDAeCE0AKd4NkF8MfsGAKZoBU1pjoNIjNRDgGkNIbAYOs4Ywb0DHdhYopVgzBw75Pocc5gxx3kAh02QgpkcZgNcZcM6w0CfvwiTwTzMIv+6jD7aMPvu58YtXkpKtYgirrkNA9zDMNhpwoQxMdlchJ5pV0LwiOat0em5TfBUsFJLJruRLof8gSHYO/HxX/kVg6xjd/AyWljGyPVswOVh1JeK9T+sVlH+hWGwUPDrpXxv1IVv1rh1eXn5uxTW09bZrps3Dpd897T3/P9kee3k6Dcdds78MTTE93qDk410eihtg/1H+R8smhg2Q+7iVo/8A", + "bytecode": "H4sIAAAAAAAA/9VZS5KkNhAV9aequqfHcxEJIYR2E+HfHMPiowP4BOy8sRcOb7xzhH1RQ5tssrKy6AoPsqcVUS1QJi+fUk8f6ET8Uzb9L0HXQ9mK6wI+H8dafl5RC2LJmDyTN8Jz9UZ4rt8Iz00knheTayA9DNyQlI24XaBzf411OtYrZF8wsSolcZfEL2XuUqZ/C/LX6Yi5i4NvAH8fB18C7jfdhI/7Avb1WH/qplx+Qs8M5WG8TiaXF1ywrZDtW2JbI9t3xIY1+z2xYZ0Dp0P/ey+m6w/jdUo4xtAb7ufS4/WB4b9CfRvK192UjzvjqtfinsY8/iQuc7+fQr1wghwc4uRAJySeEJN2sA3iH0XUOaQSEg/40PysSO5ShusTY0vIdcrESZk4HBbWCp2rH5fJh+Tm+n+kDfNvtRFrf5vTBs7Pl6CNLx2L21+SGzXEoW00zq11NKImZOQ5kKXiOr+ArbTu1/rGqtAEbazLKlXoogh5sEWZN8HkvrGtyr3OXGtlUGXbWqNrWwTX1EUA7GMc7grGeMeMy9CWo3Zs24pJV/jZA7Jj/xZhWsGPO86bLHVrnVJNqY10tshckLLoM6NCrUztQ2OdL13VtnWlnZM6FM7YrO6TG3JvPGBvuTHxNpg2+D7zQfdgmfFOlUHLui4bq7UOde0r25tr149I3rSlquraZGVwTpuGO4MKsbxe91xeesH4svBW11XpdW4y05qqapuizXXllXJlWxYymKCdkVlRBquakBunqqbN57WayV5yoQpZ/8fY4EIh8z6bea9e30vRh9JmffhQ21zaWuZtVWTKF1lpa1+rrAAtnRA23YfOqH1BHdt79yGIfyRcY+1DZ8KH5ofuQw8M1yfGhtdKbMNxHpg4HNZ2Qazdglj7BbHSCH18J/ixEGJ+76Rr08Lay++dCxD/KK735hhzYUv43JoLkd/xC+CzZ/isZvikEcfr1lrBnaXej7mhGuK+I1DeZ4QvUIztTGx8/uA0T9eP3StYB4LF9UGQ57aCPyNiG/j+MNaRdSS/Qrj38sd93dzg3xD+sc7FHH+IdRLz2uDes8H/xPhzY8xp6USeOzHcAI/DxrEFg3FLu3B/Rn2iz6Y3cAEPvgPRuUz3ljnO+J7T/AOxge+PYw2aeUTPxNYMxJrbDxMmZ3PvD9DPdTfZ6He3TRelj2bg8AviQcdv21326RHZ5s4S4P+O8cfjBTl6Iv7cWrtisLBmj6gfzz7dZIO2/yOfeN7RfM6tH0Jc5/PxlRzQsxzONT1jY73ek2usXZxrauPeqWPm3ZZSQl9gzGHNpGWD7Nj/5/Eef3uA+nP+iRasV0H70L+mN01ee7qmCHG5D4H+d91kxzoeyn6836A+Yn/83QL7/wq+/e+38fplje2u4w1+f874JTfqZwymbdNdtqXdtf+6u/aH2MfumiPYTsiG59hQzuM9zhfGAh5b4v/HeA9jckDPwPNPTPwDiX/Bm2nDc5xirZk2PL9+B7yxxn1f+r3mOSbBx22UG2hn0PXfOVPjC6khAAA=", + "debug_symbols": "nZbNjqpAEIXfhbWLrq7qv3mViTGoOCEhaBi9yY3x3aeaolQWTWbY+B3E/miaA3Kvjs3+9rVr+9P5u/r4vFf7oe269mvXnQ/1tT33/O29MvnDpuoDNxUaAQisAAUkcAIvCIIoEAuJhcRCYiGxkFhILI73EYO3PMMLgiAK0ghvBCCwAhSQQCxeLF4sXixeLEEsQSxBLEEsQSxBLEEsgS2OwZbISCOiEYDAClBAAifwgiBgS2KkEckIQMAWMEycSBPdRDYBMMPEODEJwbAHbA5WA2rILp+D05BtIYesizlkX8qBhZYPCMDzs9kMoMFqQA3ZjDmw2eZjgdcQNEQNaQrWaAANVgNqIA1qtmq2arZqtmpGNaOacTQ/HptKS7+7Dk2TO/92F/C9camHpr9WH/2t6zbVv7q7jT/6vtT9yGs98F5emKY/Mll4arsmp8fmNdqUh4KDaTDE9Bzu5uNhYTwQqgBieBogzQx2wYAxqAFjXGOgXCgxEOAag4teDd4VDa5sQOP1LJBLsWYO3qXnHJIrGULZQC7RZCBPrzKAX2fAkmGhT9a4SWDfZuB+3UfrdBltsqXxi1eSoq6ic6uug0PzMhQbnR8wxTJ40rsKfaSigsqKaLTS8b1NYS5YKKQnvZKzQv9BEPUc/Ptd+ReBrmMw5RksLWPw+mzBaGDVlQjPPq1XUPqFYrFR8OqknTdqy1v1oR1mbz+P7Braet810+bp1h/e9l7/X3SPvj1dhvOhOd6GJpter1D88ckPxQ14u83/o3kT3QbIbB/56D8=", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 70f98315f64..5b03c9d18dd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -37,8 +37,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pdfNbhpBEATgd+HMYae758+vElkWtnGEhLBFIFJk8e6ZprrW9oEoWl+owng+lqWH1b6vnreP558Pu8PL66/V3Y/31eNxt9/vfj7sX582p93rYfz1fTX5g5TVna5XUhEN0a+hEyIhBKEIQ2QEFIWiUBSKQTEoBsWgGBSDYlBsKDaiIfo18oRICEEowhAZURBQMpQMpUApUAqUAqVAKVAKlAKlQClQKpQKpUKpUOpQyoiMKIiKaIh+jTYhEkIQioDSoDQoDUqD0qB0KB1Kh9KhdCgdSprGi9VzPG+eg+2eNbJFdmSaIlOkRGqkRebI8FJ4KbwUnoQn4Ul4Ep4ML01eBpiSl8JSWRpLj+JDipJYhEVZjIWyUlbKSlkpG2WjbJSNslE2ykbZKBtlo5wpZ8o+0Em8KIuxZJbCUlkaS4/iA46SWFxWL8risnnJLIWlsnTMio96yl4Si7C453PlI4+SWQpLZWksPYqPP4rL/l6+BVCUxVgyS2GpLI2lR/EtgUK5U+6UO+VOuVPulDvl7vLYMTJNLIlFWJTFWDJLYaksjYVyouyb7ZoSqZEWmSNLZI1skR3pm+2a4Ul4Ep6EJ+FJeBKehCfhaXganoan4Wl4PkoyeaksjaVH8aFCSSzCoizDk+RlHKCIF5evl6rK0lh6FB8YMS+ZxVdlL76qePFV5XJZr3g1fDgdt1u/GH66PI6L5tvmuD2cVneH836/Xv3e7M/Xf/r1tjlc87Q5jlfHwW4PzyMH+LLbb71d1h+rp9tLe4614/dtXp2/Lk+3l48NwzcfG6TNQupfBLktjBntIYwpnZYI4yeVwvghWCKIzYImuSXk24JOpYYwgLLkGFTTfAwqi4SuFGxadAxm8zFYTkuEXGehLDsPRWUWLC8S6nwequi3hZuf4h/balyduS2K3NpX//wuq83T0JZNQy4fwqKzoPOHGNgiwaZ5b5v0BedRyzyRWtrNvZ36baJNnKf2+aus/30ItfA0aJvSkg9Rc/2uYP17QjHOU/n8Vf73WSiN30NpbdF6Xifq9PX978ezzdPu+OXG8OLScbd53G/j6cv58PTp1dOfN77CG8u34+vT9vl83Lr0cXc5Hn7ImOTxa3Lvdxb+VOt6DOT9xd/9Lw==", + "bytecode": "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", + "debug_symbols": "pZfRbuI8EIXfhWsu4pnx2O6rrKqKtnSFhGjFwi/9qnj39XB80vaCapXecL4Q/MUJM7byvnrePp5/P+wOL69/Vne/3lePx91+v/v9sH992px2r4f+7ftqig/x1Z2uV1IQFdGuoRMiIQShCENkBCwKi8KisBgsBovBYrAYLAaLwWLdYj0qol0jT4iEEIQiDJERjoAlw5JhcVgcFofFYXFYHBaHxWFxWByWAkuBpcBSYCnd4j0ywhEFURHtGnVCJIQgFAFLhaXCUmGpsFRYGiwNlgZLg6XB0mBJUz9ZIvtxjezaFllG1pENmaaRaaSM1JE2Mo8cvjR8afjS8MnwyfDJ8MnwSfelKaALUwpwQiFUQhsQRQpIBCEowQg0K81Ks9KsNBvNRrPRbDQbzUaz0Ww0G81Gc6Y50xwFnSRACUbIBCcUQiW0AVHggEQIswYoIcwWkAlOKIQQ5g5R64BECGHUU1Q8wAiZ4IRCqIQ2IOofEOYozOgBgBKMkAlOKIRKaAOiJwA0N5obzY3mRnOjudHcwhyd0hpApomQCEJQghEywQmFUAk0J5qj21ILEIISjJAJTiiESmgDou0ANAvNQrPQLDQLzUKz0Cw0K81Ks9KsNCvNUWOSAgqhEtqAKDZAIghBCV0oEtCnKtetK8wWUAiV0AZEIUkOyIQY5QExqgTEqHK5rFfcJh9Ox+02dslP+2bfTd82x+3htLo7nPf79eq/zf58/dGft83hmqfNsZ/tK9n28NyzC192+23QZf0xero9tOUxti988+j8dXi6Pbw3Ei/eG6fOhtS+GOS2odduG4ZevdMSQ19raegLxBKD2GzQJLcM+bZBJy/D0AW+ZA6qaZ6DyhKDNachT4vmYDbPwXJaYnCrNLiXRQaV2WB5kaEoDUX0x4abT/KbturbNtvC5VZffVsNxeZqqIuqQbN/GBY9BZ1vossWGWyae9ukLZpDm+dg05J/Qn2uafV6e3X4RlEnVmT9XAzln6dQnDehdUpLbqLk8lODtZ8Z3FiR/rkY/vkpeOX/4LUuGs+dpkxfr3/fjzZPu+OXd85LmI67zeN+Ow5fzoenT2dP/7/xDN9Z346vT9vn83Ebpo8X1/7xS3ov9PXoPl5a4lDLupf0/SWu/hc=", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_0.snap index 1305a1aca08..03fd289cdb6 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_0.snap @@ -37,8 +37,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pdfRTttAEAXQf/FzHrwzs7O7/EqFUABTRYoCSpNKFcq/dyd3xpAHR5X7wr0h+NixZ23yObxOz+efT7vD2/uv4eHH5/B83O33u59P+/eX7Wn3fui//RxG+0E6PPBmoIKoiHYNHhEJQQhGCCIjoDAUhsJQBIpAESgCRaAIFIEiXZEeFdGukUdEQhCCEYLICEVAyVAyFIWiUBSKQlEoCkWhKBSFolAKlAKlQClQSle0R0YooiAqol2jjoiEIAQjoFQoFUqFUqFUKA1Kg9KgNCgNSoOSxv7bYtm5atm9Zlk9GzKNnsmTPNlTPLOnerqX3EvukXvkHrlH7pF71L00WulgSlZKlBqlebHZRElRKApHkSg5SsgcMofMIUvIErKELCFLyBKyhCwhS8gScg45h5xDtklOZEWi5CgapUSpUZoXm2uUFIWimMxWJIrJYkWjlCjVi424zYrNeMpWKApHMc+um806SvfILqDNO9nHsoknOwqbebKd29ST7cHmHoWicJQuk+3C5h9Fo5QoNUrzYisBJUWhKBwl5BZyC7mF3EJuLtM4RklRTFYrHEWi5CgapUSpUZoXW2ooKUrIKWRbbtUye6pn8ayeDWnL7ZrJkzzZ0z1yj9wj98g9co/dY/fYPXaP3WP32D1bYvVy2Qzx0Hk6HafJnjnfnkL92fSxPU6H0/BwOO/3m+H3dn++/tGvj+3hmqftsb/bx2o6vPbs4NtuP1m7bL62Hpc3bdm37feTeet8u3la3rwPaOy8D2SdhdRuBFoW+kw0F/pUjGuEfgsLoS+8NQLJLHCiJSEvCzxqcaEDuuYYmNN8DEyrhMYhyLjqGETmY5Cc1gi5zIKuOw/KNAuSVwllPg+F+L+FxU9xZ1n1p2EsC6WldXX3WhaZp6Gum4asX8LiWUh6Z6h1HgfWuriwUlkm6hgXs34/j+UWqMuASpwHzbwKqPEZtNZ1QNzhyrh8BPdOY9EYBq5jWnUlSi7/TUj7B+LuRM1D3Ydr1bqScb7XC7Ub4bG/2r7sjjdfwy5mHXfb5/3kL9/Oh5dv757+fMQ78TXu4/j+Mr2ej5NJX9/l+o8fJLrpa/vR/p+/vhw3/T73eLG9/wU=", + "bytecode": "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", + "debug_symbols": "pdfdauNKEATgd/G1L2a6e/7yKksITqIsBuMEr33gEPzuO+2aUpIFhUV7kyrb0SdZ7pHQ++Z5erz8fNgfX15/be5+vG8eT/vDYf/z4fD6tDvvX4/93fdN8D+SN3e63UhBVES7hQZERAhCEYZICCgKRaEoFINiUAyKQTEoBsWgWFesR0W0W6SAiAhBKMIQCZERUBKUBCVDyVAylAwlQ8lQMpQMJUPJUAqUAqVAKVBKV3KPhMiIgqiIdosaEBEhCEVAqVAqlAqlQqlQGpQGpUFpUBqUBiWG/m7x7Fz17F7zrCMbMoaRcaSM1JE2Mo3MI4cXhxeHJ8OT4cnwZHgyPOleDF46GKOXwlJZ2ig+myiRRViUxVgSC2WlrJSVslE2ykbZKBtlo2yUjbJRNsqJcqKcKPskR/FiLIklsxSWytJG8blGiSzC4rJ6MRaXzUtmKSx1FB/xmLxEFmFx0H8vH3WUDor/cD7u4l/HB1587z7y4jv1oReXfexRIouwuOyT6uMvvi9fACiZpbBUljaKLwWUyCIsykK5UW6UG+VGuQ1ZQmBxOXsRFmUxlsSSWQpLZWmj+FpDoRwpR8q+3qR4SSyZpbBUljaKrzqUyCIsykJZKAtloSyUhbJSVspKWSkrZaWslPUmX6/bDe9GD+fTNPnN6NPtqd+03nan6Xje3B0vh8N289/ucLn906+33fGW592pf9rnbjo+9+zgy/4webtuP7YOy5u2NLbtF5p56/R187i8eR9c7rwPap2F2L4Isiz0WWlD6NMS1gj92kahL8g1gtgsaJQlIS0LGnIZQgfymmNQjfMxqKwRrGUKKaw6BrP5GCzFNUK2SiHnskpQmQVLq4SiFIroPwuLZ/KbZdVvk1wWWZbW1bfTUGyehrpqGjTlD2HxLPi9ZnGo8zwOmuviwoplmaiBP2b9fB7LV6AuA9l4HnLSVUDld8i1rgN4hSth+Qi+O40lcxi0hrjqlyip/DNh7S+IbydqHuo+XKvWlYX5Wm/SVh1Dm4/B/rjG3fdXu6f96csT3tWt0373eJjGy5fL8enTp+f/3/gJnxDfTq9P0/PlNLn08ZjY//wQy9t+dbj3R4Xby7DtV8r7q+/9Nw==", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 1eec5021a43..dd2bbc59f7b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/pedersen_hash/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -37,8 +37,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pdfRTttAEAXQf/FzHrwzs7O7/EqFUABTRYoCSpNKFcq/dyd3xpAHR5X7wr0h+NixZ23yObxOz+efT7vD2/uv4eHH5/B83O33u59P+/eX7Wn3fui//RxG+0E6PPBmoIKoiHYNHhEJQQhGCCIjoDAUhsJQBIpAESgCRaAIFIEiXZEeFdGukUdEQhCCEYLICEVAyVAyFIWiUBSKQlEoCkWhKBSFolAKlAKlQClQSle0R0YooiAqol2jjoiEIAQjoFQoFUqFUqFUKA1Kg9KgNCgNSoOSxv7bYtm5atm9Zlk9GzKNnsmTPNlTPLOnerqX3EvukXvkHrlH7pF71L00WulgSlZKlBqlebHZRElRKApHkSg5SsgcMofMIUvIErKELCFLyBKyhCwhS8gScg45h5xDtklOZEWi5CgapUSpUZoXm2uUFIWimMxWJIrJYkWjlCjVi424zYrNeMpWKApHMc+um806SvfILqDNO9nHsoknOwqbebKd29ST7cHmHoWicJQuk+3C5h9Fo5QoNUrzYisBJUWhKBwl5BZyC7mF3EJuLtM4RklRTFYrHEWi5CgapUSpUZoXW2ooKUrIKWRbbtUye6pn8ayeDWnL7ZrJkzzZ0z1yj9wj98g9co/dY/fYPXaP3WP32D1bYvVy2Qzx0Hk6HafJnjnfnkL92fSxPU6H0/BwOO/3m+H3dn++/tGvj+3hmqftsb/bx2o6vPbs4NtuP1m7bL62Hpc3bdm37feTeet8u3la3rwPaOy8D2SdhdRuBFoW+kw0F/pUjGuEfgsLoS+8NQLJLHCiJSEvCzxqcaEDuuYYmNN8DEyrhMYhyLjqGETmY5Cc1gi5zIKuOw/KNAuSVwllPg+F+L+FxU9xZ1n1p2EsC6WldXX3WhaZp6Gum4asX8LiWUh6Z6h1HgfWuriwUlkm6hgXs34/j+UWqMuASpwHzbwKqPEZtNZ1QNzhyrh8BPdOY9EYBq5jWnUlSi7/TUj7B+LuRM1D3Ydr1bqScb7XC7Ub4bG/2r7sjjdfwy5mHXfb5/3kL9/Oh5dv757+fMQ78TXu4/j+Mr2ej5NJX9/l+o8fJLrpa/vR/p+/vhw3/T73eLG9/wU=", + "bytecode": "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", + "debug_symbols": "pdfdauNKEATgd/G1L2a6e/7yKksITqIsBuMEr33gEPzuO+2aUpIFhUV7kyrb0SdZ7pHQ++Z5erz8fNgfX15/be5+vG8eT/vDYf/z4fD6tDvvX4/93fdN8D+SN3e63UhBVES7hQZERAhCEYZICCgKRaEoFINiUAyKQTEoBsWgWFesR0W0W6SAiAhBKMIQCZERUBKUBCVDyVAylAwlQ8lQMpQMJUPJUAqUAqVAKVBKV3KPhMiIgqiIdosaEBEhCEVAqVAqlAqlQqlQGpQGpUFpUBqUBiWG/m7x7Fz17F7zrCMbMoaRcaSM1JE2Mo3MI4cXhxeHJ8OT4cnwZHgyPOleDF46GKOXwlJZ2ig+myiRRViUxVgSC2WlrJSVslE2ykbZKBtlo2yUjbJRNsqJcqKcKPskR/FiLIklsxSWytJG8blGiSzC4rJ6MRaXzUtmKSx1FB/xmLxEFmFx0H8vH3WUDor/cD7u4l/HB1587z7y4jv1oReXfexRIouwuOyT6uMvvi9fACiZpbBUljaKLwWUyCIsykK5UW6UG+VGuQ1ZQmBxOXsRFmUxlsSSWQpLZWmj+FpDoRwpR8q+3qR4SSyZpbBUljaKrzqUyCIsykJZKAtloSyUhbJSVspKWSkrZaWslPUmX6/bDe9GD+fTNPnN6NPtqd+03nan6Xje3B0vh8N289/ucLn906+33fGW592pf9rnbjo+9+zgy/4webtuP7YOy5u2NLbtF5p56/R187i8eR9c7rwPap2F2L4Isiz0WWlD6NMS1gj92kahL8g1gtgsaJQlIS0LGnIZQgfymmNQjfMxqKwRrGUKKaw6BrP5GCzFNUK2SiHnskpQmQVLq4SiFIroPwuLZ/KbZdVvk1wWWZbW1bfTUGyehrpqGjTlD2HxLPi9ZnGo8zwOmuviwoplmaiBP2b9fB7LV6AuA9l4HnLSVUDld8i1rgN4hSth+Qi+O40lcxi0hrjqlyip/DNh7S+IbydqHuo+XKvWlYX5Wm/SVh1Dm4/B/rjG3fdXu6f96csT3tWt0373eJjGy5fL8enTp+f/3/gJnxDfTq9P0/PlNLn08ZjY//wQy9t+dbj3R4Xby7DtV8r7q+/9Nw==", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 43eb2882e56..ad109635f9b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -72,8 +72,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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u1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXsVu1exexW7V7F7FbtXsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXYvRa712L3Wuxei91rsXstdq/F7rXu3as2NrCDA5zgMh6XHAwwQYGkTdImaZO0SdokbZG2SFukLdIWactpZ4m6Ng3TNK2HdrMPhSlNMpWpmZwRzghnhDPSGemMdEY6I52RzkhnpDPSGekMOUPOkDP272F/bSpTM3XTME3TemhfUeuQz9tXyopN4/wW/tq70ZvWQ/tKWYfKNM7vhK+9/bxpPXS16aYwpUmmMjVTP1cLqz35vGma1kP7ygaHwpQmmepcc6z21PO65ljtTed11Yba483ryga1t5s3yVSmZuqmYZqm9dDVg9yfwX3VuENpkqlMzdRNwzRv2qPM65pjtdeX11XFao8vb+qmYZrnmmO1h5fXNcdq7y6va47Vnl1e1xyrvbq8ri9We3R5U5nWuUpP7b3kdc2x2nNJ7Xt1NeCmZuqmda5nVXv9WPte7etZHSpTM3XTME3Temhfz+pQnOt81d483iRTmZqpm4ZpmtZD+3pWh5zRnNGc0ZzRnLGvcbWf8aszN03Temhf9+pQmNIkU5n685zuq10dmiY/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", + "bytecode": "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258+sud699yXs+n9+99W/H30mXu7eNNB1siXj+LmyP9uYxzVaje5+3g78hVvPIznnp8are83754zev8+X9q//6PurO/R2trr7eXW1sfeWVujObu3tkZrcTSPo7X1LofX9mN/7St4zpvujOutrfljXNiP+bjm37R7xvE7HPPEow94p4GcY35ylHlcV/fsfWTTe4z6T19mv+Je7rN35O55gP1+rnd7BXt5X+nafVtw2H5MI97tnV7Bs98wkHV89svF4T0G37//s+6s01FOODoDc5T5uXfW6cj/3ONC3hpO2sZzDycd37v9e6T/UVzb7+PWz1O71/7Pwuftbeoen/fEg5eug3vr8V5eMVqre/z94BVw3qO19I2zr/yVnxXbxva2nhX7mt06+i27zxzn+d7cj+oXbzzo5x2F49+P8fjz1nj8t2V/zyh+3bPTJw7j2/9ub/PH/e3b558ZvH8v73g29bsNfPKTD17ezp948Ci/9tbO0hzX38txhN/r1ePv80p5nO39P2OXq3/fh38fxd93tLPFr9/p8aj7e2eLf/CddTvymyNMMdqjcsR+I+wy8of7+PXN2R9+/Yn+cMQfvqP5w+MelT3W34//+PPWfOXXfCP4yhEHN/KVbw0D/PvDWdb9c454/Ww8dFxvo7z33rPv8Waj2uX+/S9Xu/wFd/D6/2rt8hffwevfUrt82Z9v0trl3qbu1S7v+cdXykMda50j37nHC6M9Xce1evZ+nePep/15/je8AlnfWPuujhhyP857+672/S/089Tutcdt0/vzI0ebHs3jqGfFK7HDvS5HXNNxHp8dyNrva7tn0y/XL2Mvd98vY9+76NndGLaftzz80yw1eL8ui0s29F7mNUyLy62VltPS555SrtUvtfu5TSn6dWqu9mRL7CVlu8l+1Uh2CL7PU5xsqClGtxq39lrmzi/ntbZi81yWat1Sop/txEvTtLrk52BdavV4rm8v261pqrmvLuTqaky19dknE+JkGOc8B5/N3FfTzFqNmcIaTJpbSD0sqbnuj2e9HpHdymwWt6Q+r1Mu1nk/l5YmE5wPtvpoVxvWVL0tc1jWyWYbnElrKLXkmKbjOam9bNtqWDMfqUssPizZVoOSHD+zbdnn7G2OKzrpzrXQ/dJmm1tN09LWpVx7wT0z0nfJzVRGE0tavO1TNN24JfJVQrc1pzb5vjYkxuyZ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", + "debug_symbols": "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Yvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3KnavYvcqdq9i9yp2r2L3Knav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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_0.snap index 5323285abe6..18509b0a9db 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_0.snap @@ -68,8 +68,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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k4KUpCLNTpfznYSkJCOxo9hR7Ch2FDuKHZMdkx2THZMdl/OhKzkpSEkq0txpVZx2EpKSjDRITgpSkorEDmGHsEPYIewQdgg7hB3CDmGHsEPZoexQdig7lB3KDmWHskPZcTkf12cPqwC1k5CUZKRBclKQklQkdgx2DHYMdgx2DHYMdgx2DHZczsdYaXa6nO8kJCUZaZCcFKQkscPZEewIdgQ7gh3BjmBHsGM595WKNDst53cSkpKMNEhOChI7kh3JjmJHsaPYUewodhQ7lvNYKUlFmp2W8zsJSUlGGiQnsWOyY7Jj9o5Vo9pJSEoy0iBdO3KlICWpSLPTcn4nISnJSIPEDmGHsEPYIexQdig7lB3KDmWHskPZoexQdig7jB3GDmOHscPYYewwdhg7jB3L+fVaYNWtdhKSkow0SE4KUpKKxA5nh7PD2eHscHY4O5wdzg5nh7Mj2BHsCHYEO4IdwY5gR7Aj2BHsSHYkO5IdyY5kR7Ij2ZHsSHYkO4odxY5iR7Gj2FHsKHYUO4odxY7JjsmOyY7JjsmOyY7JjsmOyY65d+hqau0kJCUZaZCcFKQkFYkdwg5hh7BD2CHsEHYIO4Qdwg5hh7JD2aHsUHYoO5Qdyg5lh7JD2WHsMHYYO4wdxg5jh7HD2GHsMHYMdgx2DHYMdgx2DHYMdgx2DHYMdjg7nB3ODmeHs8PZ4exwdjg7nB3BjmBHsCPYEewIdgQ7gh3BjmBHsiPZkexIdiQ7kh3JjmRHsiPZUewodhQ7ih3FjmJHsaPYUewodkx2THZMdkx2THZMdkx2THZMduBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzgXngnPBueBccC44F5wLzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueJcca44V5wrzhXninPFueLccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzg3nhnPDueHccG44N5wbzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOB84HzgfOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e549xx7jh3nDvOHeeOc8e54zxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOA+eB88B54DxwHjgPnAfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54jxxnjhPnCfOE+eJ88R54rxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOC+eF88J54bxwXjgvnBfOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifOJ84nzifO6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNKHU/pwSh9O6cMpfTilD6f04ZQ+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pwRh/O6MMZfTijD2f04Yw+nNGHM/pw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", + "bytecode": "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", + "debug_symbols": "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eG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhecdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cRz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPZ/ThjD6c0Ycz+nBGH87owxl9OKMPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCiDyf6cKIPJ/pwog8n+nCi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15SvXd49HfHa5d3zES9d3j3fkJcu756PeOny7tURTy7vno547fLu+YiXLu+ej3jp8u7piNcu756OeO3y7vlavHR593TEa5d3T58vXru8e74hL13evX5E/OtHvLkhL13evbwv3h3x0uXdy5rpTdlfurx77shLl3cvr8W7I166vHveVXnp8u75iJcu715uzLw54rXLu+ftoZcu7/7LiFcu7/7LiI+vHfHa5d3zES9d3r28IW8+d752effqhrw54sXLu+cjXrq8e3ktvjziyfdu1+95q9fD6PbGhO5cHz6wvzMhPmpH9Gh6ax36WYeeb02IYMKX3yM9nUDf5oHza/eDvbMO1+9srKPpqbcmnOspn++dUcZl9ptbEf2ck25vTTjfikf0r56QX7sVX+/mWxPG4I3RA89FZRsvT5i8RxyfP8/9fxPaePoOLz57k9jeWovPqpaffe7y+oT5wYXt/Eh/ax1osI059d46dNbhs6vB3zXBzoT2tRP03jrwNnd+dH3tsej9rQl9nKP53lZQsvwf58MfH3/67i8//PKnz/5Zzm//vmb98sN3f/7x+/3Hv/3rp7989n9//b//qP/z519++PHHH/7+p3/88vNfvv/rv375/pp0/b9PH/s/f3i8VM5vuvvHH7/51K4/x+Mq6HrWf/xZjz8/Xtd7Xv9v/bAeH7U9/jOvv9g//fH46Q/747+v1f1/", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 0e626a1efa8..feecb0c1b5e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidon_bn254_hash_width_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -68,8 +68,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZ3RruvGka7fxde5UFd1V1XnVQaDIMl4BgYMJ/AkBzgI8u5HXez62jnAkmlp58b8vPZW/SLFTxLJfy/+47v/+v5Pf/+fP/zw03//5X+/+/1//OO7P/38w48//vA/f/jxL3/+499++MtPz5/+47vH+s94/ld+991o10KuhV6Lfi3GtbBr4dcirsXMhV1T7Jpizyn6XOi16NdiXAu7Fn4t4lrMXPhzSn8u2rWQa6HXol+LcS2eU8Zz4dcirsXMRTyuRbsWci30WvRrMa7FNSWeU+K5iGsxczEf16JdC7kWei36tRjXwq7FNWVeU+Y1pT0ee9n2UvZS97Lv5dhL20vfy9jLPa/teW3Pa3te2/Pantf2vLbntT2v7Xltz5M9T/Y82fNkz5M9T/Y82fNkz5M9T/Y83fN0z9M9T/c83fN0z9M9T/c83fN0z+t7Xt/z+p7X97y+5/U9r+95fc/re17f88aeN/a8seeNPW/seWPPG3ve2PPGnjf2PNvzbM+zPc/2PNvzbM+zPc/2PNvzbM/zPc/3PN/zfM/zPc/3PN/zfM/zPc/3vNjzYs+LPS/2vNjzYs+LPW870bYUbVvRthZte9G2GG2b0bYabbvRthxt29G2Hm37IdsP2X7I9kO2H7L9kO2HbD9k+yHbD9l+yPZDth+y/ZDth2w/ZPsh2w/Zfsj2Q7Yfsv2Q7YdsP2T7IdsP2X7I9kO2H7L9kO2HbD9k+yHbD9l+yPZDth+y/ZDth2w/ZPsh2w/Zfsj2Q7Yfsv2Q7YdsP2T7IdsP2X7I9kO2H7L9kO2HbD9k+yHbD9l+yPZDth+y/ZDth2w/ZPsh2w/Zfsj2Q7Yfsv2Q7YdsP2T7IdsP2X7I9kO2H7L9kO2HbD9k+yHbD9l+yPZDth+y/ZDth2w/ZPsh2w/Zfsj2Q7Yfsv2Q7YdsP2T7IdsP2X7I9kO2H7r90O2Hbj90+6HbD91+6PZDtx+6/dDth24/dPuh2w/dfuj2Q7cfuv3Q7YduP3T7odsP3X7o9kO3H7r90O2Hbj90+6HbD91+6PZDtx+6/dDth24/dPkx19L20vcy9nJey+VHLtteyl7qXva93PP6ntf3vL7nLT/a4wlLkAtagRRoQS8YBVbgBVFQk60mW022mrxsaW1BLxgFVuAFUTA3LGkuaAVSUJO9JntN9prsNdlrstfkqMlRk6MmR02Omhw1OWpy1OSlUZMFc8MS6YJWIAVa0AtGgRV4QU2ee3J/PArWZF0gBVrQC0aBFXhBFMwNS64LanKrya0mL8FaXzAKrMALomBuWJpd0AqkQAtqstRkqclSk6UmS03Wmqw1WWuy1mStyVqTtSZrTV7itbFgbljqXdAKpEALesEosAIvqMm9Jo+aPGryqMmjJo+aPGryqMmjJo+aPGqy1WSryVaTrSZbTbaabDXZarLVZKvJXpO9JntN9prsNdlrstdkr8lek70mR02Omhw1OWpy1OSoyVGToyZHTY6aPGvyrMmzJs+aPGvyrMmzJs+aPGvy3JPH41HQCqRAC3rBKLACL4iCmtxqcqvJrSa3mtxqcqvJrSa3mtxqcqvJUpOlJktNlposNVlqstRkqclSk6Uma03Wmqw1WWuy1mStyVqTtSaXg6McHOXgKAdHOTjKwVEOjnJwlIOjHBzl4CgHRzk4ysFRDo5ycJSDoxwc5eAoB0c5OMrBUQ6OcnCUg6McHOXgKAdHOTjKwVEOjnJwlIOjHBzl4CgHRzk4ysFRDo5ycJSDoxwc5eAoB0c5OMrBUQ6OcnCUg6McHOXgKAdHOTjKwVEOjnJwlIOjHBzl4CgHRzk4ykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykErB60ctHLQykEvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy0EvB70c9HLQy8EoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysEoB6McjHIwysFZDs5ycJaDsxyc5eAsB2c5OMvBWQ7OcnCWg7McnOXgLAdnOTjLwVkOznJwloOzHJzl4CwHZzk4y8FZDs5ycJaDsxyc5eAsB2c5OMvBWQ7OcnCWg7McnOXgLAdnOTjLwVkOznJwloOzHJzl4CwHZzk4y8FZDs5ycJaDsxyc5eAsB2c5OMvBWQ7OcnCWg7McnOXgLAdnOTjLwVkOznJwloOzHJzl4CwHZzk4y8FZDs5ycJaDsxyc5eAsB2c5OMvBWQ7OcnCWg7McnOXgLAdnOTjLwVkOznJwloOzHJzl4CwHZzk4y8FZDs5ycJaDsxx8Xqp+QA0SSKEODcgghwIio5HRyGhkNDIaGY2MRkYjo5HRyBAyhAwhQ8gQMoQMIUPIEDKEDCVDyVAylAwlQ8lQMpQMJUPJ6GR0MjoZnYxORiejk9HJ6GR0MgYZg4xBxiBjkDHIGGQMMgYZgwwjw8gwMowMI8PIMDKMDCPDyHAynAwnw8lwMpwMJ8PJcDKcjCAjyAgygowgI8gIMoKMICPImGRMMiYZk4xJxiRjkjHJmGTgecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueC54LngueC54LngueC54LngueC54LngueC54LngueC54Lngue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PBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzxXPFc8VzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8Nzw3PDc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzx3PHc8dzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vksz/VRnuujPNdHea6P8lwf5bk+ynN9lOf6KM/1UZ7r40FGI6OR0choZDQyGhmNjEZGI6ORIWQIGUKGkCFkCBlChpAhZAgZSoaSoWQoGUqGkqFkKBlKhpLRyehkdDI6GZ2MTkYno5PRyehkDDIGGYOMQcYgY5AxyBhkDDIGGUaGkWFkGBlGhpFhZBgZRoaR4WQ4GU6Gk+FkOBlOhpPhZDgZQUaQEWQEGUFGkBFkBBlBRpAxyZhkTDImGZOMScYkY5IxycBz+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT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7+sVuXWt9/WIW9d67454ca335Yh713pfj7h1rff1iFvXel+OuHet9+WIe9d6Xz+LW9d6X464d6339Yhb13pffhDcu9b7elvcutZ7/0Udn494c0VuXeu9vS3eHXHrWu9tU/XN94tb13pfa3brWu/tZ/HuiFvXer/Bpd5vcKX3G1zo/QbXeb/BZd5vcJX3G1zk/QbXeF//2olbB1evR9w6uHo94tbB1f0R/vGKvDvi44Orm9d4X4+4dY339q9mmS8Oar7BsdU3OLT6BkdW/94Dq3vXePN3a356nm5+/i87Xs/4Br876N413l8Zceca76+MeHw64t413tcjbl3jbZ//E9j2+T+BbZ/XhdrndaH2eV2ofV4Xap/XhdrndaHbO/ibRzX3rvHe3cHbu+85Nz9L5uf/suNXZtz7NLn9/vnex8nNa7yvR9y6xnv7Wfx/I/7z+X9//PMPP//hF78R9R//XLN+/uGPf/rx+/2///33n/78iz/92//9a/3Jn37+4ccff/ifP/z157/8+fv/+vvP369J68++e+z//Md4iP9uPL9G/+fvvtPn/z+fTfcnt+sPWzz/UHT9oOUPnlY//+P/+c/19P4f", + "bytecode": "H4sIAAAAAAAA/+z9B8BuyVGei+4BCTEjCY0QMkhISELk2N2ru1c3YBA554zBpqONjQO2wdmWs3HOOeKcc84555xzzse+99x7z733nOf9Zr71/fNP62dsrW3wsTaMZs8favXXq7rqrbeqq5549Myfl/DPE8/+/UX3/q2vv9Oj5/65/uxbnv23efv+2BNlmce1xicewxofxzrf6cR1PnFHDx7Xet/5f4J3/6L/Cdb44v8J1vguj/7nOEMveUzrfPQu9xYt5ZdyvfjZ710Nrf79kkfP/3P9oH/sVc/8+8k7P39X5ltO2ogn7z33TPnJ+Pbk4vOduP7tyWdlvvjxyE9X+e/yeOSbqw580ltv8u9+lutzr+t4TO/JP+bP6V5+77M9uvNZrs9+yWPSkSfuPe/Rs/If3dvP6/OfevRYdco+ce951/Xc35/rmX/59WfeelvPE/e+96K3Pv9zXL/34jvfu77fd+Wf97/zc/d168X3vncXIH7Ks/KevLM3jx6drpP7Y9ZJ/y2ok+H/jjr5zve+96K3Pv9z/Lfq5N09ua+Td4HrZ771JsPckWef/ftjtp/tKv8x+WnzqsX67z5Lf17y1tt+XPftne987brn13fwrnd//t73nrzzvRe99bnPeerZ/37RnefclXVdx4vv/fxHPvvfr3j23+9y53euv//04vnvcu/5z1n34mv39+XJxc8/ufh56eEHPfv3lz77j3To59/BYnf1VX/e8uy/zdv556rTd8/ffVv0rne+fqYdfKG26Pr8px49Vtt42KJ3vbee+/tz1xY98eiGle/+7tOL7931J3e/d/c5Ty6e8z9K1isePf9939eFu793pp25PuupZ+W9aPE57q7tne79/N2/68+L733tk579t37/m1713M+3et/v+sDerXTzMZ+VQzdfuljraj2vWOzPS++t9aWPZ63uuqaXfzNrfem9tb7szveuv3sfIz569HydfEyf4wXbp+vzn3r0+Hy9eYE6oD/37dPLF2t9evG9+zZl9f5evnjOStZTJ8q66sWTj55/zt/y7L/NGLmE7GrJJQebugk5xR5DnN40Z61vPuetWVur4y+pO9v9vgGhehpx3Nel58g203of3Bamsz41SQ5ptzHPZiu/n/ZqUvcdSBZTnyHmOCfPzSGOFI8Y92Ur2fz83HzaRyot52Gny8UE1j9LMjVvpu0usc66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", + "debug_symbols": "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c8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPBc8FzwXPB82zq+IKl+QWtQAq0oBeMAitYsy8KaBal35HUIIEU6tCADPIi47HLUXkkGeRQQLNoObqpQVK07JKWtJ7VTOrQgAxyKKBZlCZd1KCVpkkKdWg9++c165btGhlJ65lK0lpfS1rr5kmzaO3vmxokkEIdGpBB6xnMpIBm0drfNzVIIIU6NCCDyBAyhAwlY+3b+kha1dyWtB4bSaugm9tq7ccXrR15U4MEUqhDAzLIITI6GYOMQcYgY5AxyBhkDDIGGYOMQYaRYWQYGUaGkWFkGBlGhpFhZDgZToaT4WQ4GU6Gk+FkOBlORpARZAQZQUaQEWQEGUFGkBFkTDImGZOMScYkY5IxyZhkTDJmZWQxZ1ODBFKoQwMyqDKyT6PL7qzPqCc1SCCFOjQggxwKaBYpGesYoZG0HmFJAc2i9OiiBgmkUIcG9HxW/ZHkUBQtZ3pLej62S9J67EwyyKGAZlH6cVGDBFJoZeQWX35sMsihgGZRVv4vapBACpGxXOj5qq79vufWWPt916T12HwV1n6/aT02X4+1328yyKHn8xu5/dZ+f9Ha7zc1SCCFOjQggxwiY1ZGlmE2NUgghTo0oJXRkhwKaBat49amBgmkEFOWM0OS1iNGkkAKdWhABjkU0CxazmwiQ8lQMpQMJUPJUDKUDCWjk9HJ6GR0MjoZnYxORiejk9HJGGQMMgYZg4xBxiBjkDHIGGQMMowMI8PIMDKMDCPDyDAyjAwjw8lwMpwMJ8PJcDKcDCfDyXAygowgI8gIMoKMICPICDKCjCBjkjHJmGRMMiYZk4xJxiRjkjErI+szmxokkEIdGpBBDgVERiOjkdHIaGQ0MhoZjYxGRiOjkSFk4LnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnjueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HkWhIYlORTQLErPL2qQQAp1aEBkKBlKhpLRyehkdDI6GZ2MTkZ67kkOBTSL0vOLGiSQQh0aEBmDjEHGIMPIMDKMDCPDyDAy0vNIciigWZSeX9QggRTq0IDIcDKcDCcjyAgygowgI8gIMtLzmeRQQLMoPb+oQQIp1KEBkTHJmGTMysiq0aYGCaRQhwb0zLBHkkMBzaLl+aYGCaRQhwZERiOjkdHIEDKEDCFDyBAyhAwhQ8gQMoQMJUPJUDKUDCVDyVAylAwlQ8noZCzPrSUJpFCHBmSQQwHNouX5JjIGGYOMQcYgY5AxyBhkDDKW5yZJDRJIoQ4NyCCHAppFToaT4WQ4GU6Gk+FkOBlOxvLc1hm0rC5tapBACnVoQAY5FBAZk4xJxiRjkjHJmGRMMiYZy3PrSfMiyTbTpgYJpFCHBmSQQwGR0choZDQyGhmNjEZGIyM9H0kBzaL0/KIGCaRQhwZkEBlChpChZCgZSoaSoWQoGUqGkqFkKBmdjE5GJ6OT0cnoZHQyOhmdjE7GICM9tySBFOrQgAxyKKBZlJ5fRIaRYWQYGUaGkWFkGBlGhpPhZDgZToaT4WQ4GU6Gk+FkBBlBRpARZAQZQUaQEWQEGUHGJGOSMcmYZEwyJhmTjEnGJGNWRraZNjVIIIU6NCCDHAqIjEZGI6OR0choZDQyGhmNjEZGI0PIEDKEDCFDyBAyhAwhQ8gQMpQMJUPJUDKUDCVDyVAylAwlo5PRyehkdDI6GZ2MTkYno5PRyRhk4HnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84bngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueC54LngueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueJ5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84LnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueN54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54PnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE88nnk88n3g+8Xzi+cTziecTzyeeTzyfeD7xfOL5xPOJ5xPPJ55PPJ94PvF84vnE84nnE89nea6P8lwf5bk+ynN9lOf6KM/1UZ7rozzXR3muj/JcHw8yGhmNjEZGI6OR0choZDQyGhmNDCFDyBAyhAwhQ8gQMoQMIUPIUDKUDCVDyVAylAwlQ8lQMpSMTkYno5PRyehkdDI6GZ2MTkYnY5AxyBhkDDIGGYOMQcYgY5AxyDAyjAwjw8gwMowMI8PIMDKMDCfDyXAynAwnw8lwMpwMJ8PJCDKCjCAjyAgygowgI8gIMoKMScYkY5IxyZhkTDImGZOMSQae04dT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c0odT+nBKH07pwyl9OKUPp/ThlD6c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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index c256092e318..f96690d780a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -47,8 +47,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PKevJQpborElKluisyVKW6K1JWpborcliluiuSWqW6K7Jcpbor0l6luivyUKXKLBJSpcosMlSlyixSVqXKLHJYpcosklqlyiyyXKXKLNJepcos8lCl2i0SUqXaLTJUpdotUlal2i1yWKXaLZJapdotslyl2i3SXqXaLfJQpeouElKl6i4yVKXqLlJWpeouclil6i6SWqXqLrJcpeou0l6l6i7yUKX6LxJSpfovMlSl+i9SVqX6L3JYpfovklql+i+yXKX6L9Jepfov8lCmCiASYqYKIDJkpgogUmamCiByaKYKIJJqpgogsmymCiDSbqYKIPJgphohEmKmGiEyZKYaIVJmphohcmimGiGSaqYaIbJsphoh0m6mGiHyYKYqIhJipioiMmSmKiJSZqYqInJopioikmqmKiKybKYqItJupioi8mCmOiMSYqY6IzJkpjojUmamOiNyaKY6I5JqpjojsmymOiPSbqY6I/JgpkokEmKmSiQyZKZKJFJmpkokcmimSiSSaqZKJLJspkok0m6mSiTyYKZaJRJiplolMmSmWiVSZqZaJXJoplolkmqmWiWybKZaJdJuplol8mCmaiYSYqZqJjJkpmomUmamaiZyaKZqJpJqpmomsmymaibSbqZqJvJgpnonEmKmeicyZKZ6J1JmpnoncmimeieSaqZ6J7Jspnon0m6meifyYKaKKBJipoooMmSmiihSZqaKKHJopoookmqmiiiybKaKKNJupooo8mCmmikSYqaaKTJkppopUmammilyaKaaKZJqppopsmymminSbqaaKfJgpqoqEmKmqioyZKaqKlJmpqoqcmimqiqSaqaqKrJspqoq0m6mqiryYKa6KxJiprorMmSmuitSZqa6K3JoprorkmqmuiuybKa6K9Jupror8mCmyiwSYqbKLDJkpsosUmamyixyaKbKLJJqpsossmymyizSbqbKLPJgptotEmKm2i0yZKbaLVJmptotcmim2i2SaqbaLbJsptot0m6m2i3yYKbqLhJipuouMmSm6i5SZqbqLnJopuoukmqm6i6ybKbqLtJupuou8mCm+i8SYqb6LzJkpvovUmam+i9yaKb6L5Jqpvovsmym+i/Sbqb6L/JgpwogEnKnCiAydKcKIFJ2pwogcninCiCSeqcKILJ8pwog0n6nCiDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf04YI+XNCHC/pwQR8u6MMFfbigDxf0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", + "bytecode": "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", + "debug_symbols": "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xPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhOX0tUdgSjS1R2RKdLVHaEq0tUdsSvS1R3BLNLVHdEt0tUd4S7S1R3xL9LVHgEg0uUeESHS5R4hItLlHjEj0uUeQSTS5R5RJdLlHmEm0uUecSfS5R6BKNLlHpEp0uUeoSrS5R6xK9LlHsEs0uUe0S3S5R7hLtLlHvEv0uUfASDS9R8RIdL1HyEi0vUfMSPS9R9BJNL1H1El0vUfYSbS9R9xJ9L1H4Eo0vUfkSnS9R+hKtL1H7Er0vUfwSzS9R/RLdL1H+Eu0vUf8S/S9RABMNMFEBEx0wUQIT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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_0.snap index 41ec251f6a2..bf187d2ef13 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_0.snap @@ -47,8 +47,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 417832b76e3..8e435c8e4e6 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/poseidonsponge_x5_254/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -43,8 +43,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+29B6DdxnHufymRlEgVUpZb7NgmVVwSJ0FbYJHEiVIdpzrF6W2xANJeeu9K77337vTee++99178kn9ey3t5Ja/k//sgAgcE5x5eWnstKtJNZJL34AwWi9mZb77ZnTlx8MDPaf47cenvJy/9eWL1500Hl//Mn9136c/swf3kCWVlxzXGEw+DMd7wMBjjjQ+DMZ58GIzx1MNgjKePYYzTz9ogadBSfCmWXpwm5vTB4T/zQ7bnHvjzzKV/37D6PKGS5mc2900p32dVd8Z4voTjL8+s5vgY5DdnVjKPQX4268pr3r+Tv32WWQ9OHBzbe6qO+Tmb2zbPdrB6lvneJ4/n3v7E5n4Hm+c82Nz/7MGx6lR+YnO/eTzb+Zn/ftt8zf278ZzYfHby/iufY/7s1P2XP4d+bua/J6yu2+rWDavr7lr9/e5Lfz9mfeyOeV1nd+555vl3N91/sPzM83bj6nfzvM7zfPP6+s1nZ1afnbz/8vucvfTvk6v7rGXN4zi1uf7ipX9fchUHp1ffmb9/3rj/6c39Lxu38bvtvJwxrj9jXC8/96RLf7/l0n/SoTtWvm2tk/q579Kf2dC5qhqHofC56/vQjK4cijbGEFs/9E3vfdt11dD1VRNLX1djGYuu93mo++DbfGtTLpPtXNU3ZV3mrvN1XYxZMfZdaHp+2YxdDHnbhKHLiyHUVZOXfFSWY+GrxuWFj4tunjJkF6Mvu7YfC9d2RVf7LvZN5TNXlxnjbBpXtVnTj1nMxg735UaX+SY637vBx6Jf7PBpS3YMTTYUg++bsWxDXlRVE6IvM1dULu+qOh9zN/quykPjhrHM29wVmR9d6EJb+8VX3mTIzmPnxpavdEMdKje0eZcxSQU/TR7bqm2rvK1H5qQviuj6aohN3sbOl0Mch9DOsm+25ju0MesYTR38UOV9WWd9Vgw1j+L6vGt9LKt+jEis24p37F3u62ao6iEv6jEs4z5jjbvv6y6UTZkPVdsXOZNT1kPbV30+9KFnYoZubLu+b4euq7NQuGLgfVShLttsrMMs+6w131UYilDz3npX5DHPQ553TZ4Xoev6YSgzaUfWdD7zqFFo+bNs+gzlDNVQDtks+xZrTvoii8x31rmYV4yOqZUQXhZDDkMZA68ir7ksq9omq+vou2IY2rrxed8ssm+1ZA8Zi6L1RT4ObdU73lbGqOoyIKWKdV63bVuGbuhdVcYGxe6qUPJ3fFNbVW6WfZs1J23VVKFr2rbLh7xsKz+MI++0iEPTdmPoy9L1WZvnWe6ajBfqfYhF1gx5Fhl4P8u+3Rp36dt2RChzGKuOld8NZafbVRFZLPiGWw3ofKiaIRRoZyh4sDZo0baLnpyz9ITJrYtqbOo8dJ6VHto8urFsmPGhYm7a1uW9C7Gru7zrRhZxHblFOfKKi3YZ93lLdolutGNZN7kfm96NWRt676q8LFzIyxDHukPDu5rXjEKNjD2rs5r1m43M+bJ27jDfZRVyXGLufNY0VVZ0Oau8jKhcm3VN2da8wuiHthxDVVW+6bilazCZLKGxX/DrY0zZWB839lUVYq6lkXd1k/VhHPIqhq7nKUKLmmdFwcexxc42NVPWDxUvofez7DutOem1Inla1zaed8hsVyVLs6maLLjAukfRmGufF21wXRvqsS9KX2Wu4ZUOiw4+1hp3aHnnKG/h+8pjuXixfdu7rMIQYulaRu9iV1VF3nGjPrKsipiVmNwhxHKZ78dZssdmjLEvBpZbrIe+jUNZ+2IsfQhFm7PsUTS0AoPoGp4MhSpCzzV9HboiLOvy8Ybsosaqtox1xHYzrW5sImrds248K7wfWK4tXiywuPp6GFzZ5Xi9dsQydliZWfYTrHGzxvArtcOiVL7OBld3La4LNxB81nexqqsOZcJ8BEwmUxxYAi5vqrosimzxaU+0xo3aZm3vw4iFZW6rtnRZxHpngYXYZ1ko+8hcswxHNCm2XahZXB5/3Za4tVn2S1njxqq1RazrvK+KxmWMOmRyFVqsZWRmyyKEyIsYc25cyRVH/DIOlpuFZV0+yRq38yWmLjKRNR6x6QpsP/586Meuyxwrr4ge64IJjG2GQrOcypCj9KGKY7vM95MN2flQjiyXmrVR9rULwiP4yMaVTTXi2bSscowjCs7awfsVceS1tzXDyPjeLPulrXFjFobYdSWeBxcUG15kXgFaMBmuHYQsCkDLMPgB5ILPZrRoIUui4gvVsi6fYs13P1bCHDhifkZpHg4CiFMXfceTu7qte9+1kogq5ThjhxrlDSufBbHgk6dasgvMnPwB42DWRxQjj2OFugGtavSvGEdWSo5CCvK0csaxLrvYjRF4stjvp1nz3YV8cDx21Jqomzr2fiyywReFq8esLFhKWTay+jshIa7Dqzk+KgAddVzs4AVz3MxgxbL0Q+1jW2Oa8LPMJasuuqbmbtXQl85lYRy1mMAXmNumAhKNg1v05KIlu8zLJmcxx7pnyAGFiSGrskZu3fcxw7Wxbocin5Qn8nLxkz7iUWu0dsGxd1l6wrtDOyq9sroGHpeuHWvNSD+0vFSPVayzTuuyzQAOYCt8RDHkGHXGs8i+25KNVyxGFkbdsfarogT6hKxtIm7O8bL6rmprlk+RAdJjW+TlmI1eX+BB+M4s+x7rXQoY49zbunZ8O2+Y9aIqQuwdbrjLPN54xOUF0AWYEzgEpm9YNR1TFHfY/l5rvgGSBaEDi2XsywLNa7rBOcBqHbuiKsFZrEgiCCCtZ/gN3AfWFnSLeeu7xe883ZoT1Ni5cch6B3wfXc2CwwuPAQWKKCBwou55oX1shGRCx8Pwjgr+Z8DmLHryDGvcseYVgbXzwBBr/CuIitfpPGpWyhuBfEYUBu/UlWgIZjwCa3nGMccfzbKfaY17QM/Q1I7p4H06Xw8sEK3Fohsdd4uF57eu9fLHObaXtdMM3DLDKPfFLPtZ1rgDAY+v+XLfsZzHsWgBIKgAVqQHuNSFbKvLUJAmYA4wDVUXWWSu7vN8WGS/jKkn+VjkvmxRxJIvEj8ACIG1WQFIbocaFJR1IGVWZ3B5KMoB/yfEVRNx7dbly1qyh4AkJs71koTjyUfPUnQs+HwcowIolAfLkLnOYWexwUw8rqnHqPhFv59tzQkKVZQEeoR9qECMgKcSsFM0A+Ehmo29K/ECgL8ur4SoGml/jrnKfTMusl/OlI1nZUj5AJCovIISkDAuMsQKIEdE0zBnKIVvFcMRNhPWVZlsBHHGzsa+vCW7K3NCvFgQLBJBgXEmNITSg0HQA14ZuoghRsVD1U1BAHitBBGxVttFB1/BkI2daAGYbd4GPwKfylY6jLqNLaBiKPoMh+owYHEMznU9sAWXPRLCCVcPi/3OrHc5Ds1IfAe28cQdLd4tr/LaY+XwjE3QWsyZM65x+Hv8Ul1pAVVMmu41y84t2cAYfDYPWiIVR8m77AnmgYFVP/gRTI+qOxmAPsOkDcRFkWWWD5hwt4vTCks2gGEEW7LqXSkj3YOXA5ODyXUKgCJ4fgCT9OAfghFHfBjqThQFuKZeMFtpyUbd0BPgo6+FsAOPS6zJyi4VquHrfRmB81mJayKAYKJB3jEOIEbi7mVOKktPCpYDKDuDMiHKhhEIBH8EG34M0mMirE4hQzcSfuNFBpbtwKrKFBvHdtFvZ+kJQ26rkleFhY0D04rPIZbgzzFHNcaMN0fEw6vE83BvUCzmhYfKGyLMBdvX1pxEVw9dWRd4lVgInvQEbKyfEaoDNI8tHDritGoAS2OhiHdGOCB+jQ/Jdji2seZkAAEqdsFWYH2Y+X5ohE66mpAQdIbHQJ8noxIwME3XNKXYGb61xpreko3DGgmpvcMDl1rQPZQJKxuEgJ/oeGdNyzttXeED5JCCrqL2OfEoGt4sPq215js0OYwPcjoZ8ND4LM/GocbLKbbOe08QR4jFYkRDHLFPHzHJGGM0NouL7Fc09QRYRuiRuZaXODA96B8xSOdbImowFprjUHtsQwEIQhexwjghANbgmh1/8krmfMN6lUy2XERkNtCTnBdW9AJPFTRTw3Q5HCc2Cw1iEWEVfd60EE8EV7PsV7Zkt2CBwJtvxjGrHWEdoII4AXzJ+gcvYEphm7ABeNQKUw82gQcaoG70LIvs51jz3eC0u6ZD8MBiLoGQRNmA8YIIi+kQc+RY7RCT3EuehLmOkbs5qKAdL/4qpmwGRwQVfVaPfKuTKSQQBq02Td6Jt3Ks/RB09wwPgqqiPjBF8FYEsbPsV7Vk51G+sRKMV0AKuwD+Ye3BwvDSGiJvHAZBDv4JlhZXAh9LUNHpMlDXLPs+S3Y3eBSq1/+gBH4IoiLLos1wnz2uLaDLVQQHwnoSZAj3EDESojASPyzr8tUs2RHyTKQjQXGFc8lw44oePBEHzFReaxU1k6YD3wpsAz6hK0RseYKJZU5e3dKTIYdhrMUqgrcxoSzsAkjblRCSUNd1xnyB9ksZ+IzAFdSPp+ft8oKqclk7r2GNmzeE0Rz7EUwCHAH3YMWJLhkt0RVKAgjFfkNNtrBiBAsoXlGClhsIyWKxg69pyM5ZNbhHFgreALtF/MQ0E+MHB+gec/BtIaIDn0DYh82EK4c4yfCEgPx88cWvZc0J3pb1B0dPhA7EKjGLdQe6rIpqmHwGBIziD8cKbxWnwNhjHVylCL1e3uVrW7LLjIcn3BbOBk3AKbaQ6zCO2YgbLwD4bSNmuuX9sZ7GmngqB9NW0EvNsMTcz7VkeyJVfuTPmRWZrp5HhTpFh1soDRHvBSEhqpopIIwiCBWgVywlv/jL17HeJYscXI0RxftgtqHWA0OEzYX/xkPzUlt8+ohBa520pCp551yFG2qA57Ps51njxnbCEwCz6wLDiSgcS8UT9x2risgqwwYQInQEaM7DqbCOxIoAOkBN3SL7dU09cUR5GfTIALgSh5tXItY8kAoqBlLA4w+iqHCMAiuRELbEBojag65YeIjXs8aNyvKs6EHLKnI4RNlOIHY1cYM5ngg+nPAzL71oCOLDHvNL8EzShvTMLPv1rXGDXnHbLDXUDv0CGRMRFI5wZ0B9Cj0EIWzRwtvqxnicgcljScGZg5dm2W9gjnuYdCqD5CjAIyx12eYoKAIdRZwDwEDD+wzNZ1UGAYcKApIYLsChzLLf0NKTOMC3BNjeCrwGmYJBgSriPjLRDofGAiEIrEUjof7gzpbItskwQ/AJiw6+kSW7Im9ASJzhT8APZQdz3ML+NXCFxNSQzLhpDPYgJqHrpdd4CuUbWL4E3rPs51tzksmk4rXJLijfQCQLnQI8RitR6zpDtQnHWt5zRjzBDFcatGwOSZNmGfcbW++SoIuIEkYY+hYtyHBfEHlQaz0LNCgLI4YJY+NH2R0QLIsenfRYIlbXLPtNLNm4cL6Cx40KNAKcP1gfXolf5FM2yhEB43EERyPJKiA1RiWAYuDes8U3vKklG+gIqYAnKeHPsFE1ISB5OdY9CJyAjXcsiwvKcLoxjg8PiPUBOePVlrj4zSzZFSEfLCjUaUlCTvlEwSWYQoA7yweuW7gIewqyw0sQNsPmZPDYJCWqfrGxL7D0BLcQFLi7sRpG6HNoR1F2DMrjgLG4TEktNI+fliEhXhhLN+WWoJqWOXlzSzZjJlgM0HhkJsOExsoWf6UVJLoNIhUojL3GQ5HQgQJqOpI/LSkeUPmy5t/CkJ2B6IGTk80ryb+0XUkCgBmBxCP1QGoBmhn+BrsDfnMeyroSh1sq8wqJO8t+S/NdElqSq2kK/OEgja7wCZUjJGO5sGJbLzvQaKBjwFI64GEMOGMwEfeeZb+VJZvoCFcCN4OJAnxj75qqB/gELQ8QK1MMkigH8DfhZRv7DtBW+S7rAdW7/OVbW7Jh+4ahctDTrVxWQ85BxAbTVPBWIWgq3i9rcQR7g9JEyQBTul4Km+94n7ex5rtCA5hjmAjCL3AUbAZhTi86uYdXYZRKg3oSDm0OAiIbJJocTxlQ7x1H/bbmnBDKeEDvFISgEFj+buxgC2B5SKeBJqBORRwTTxLSu44kBHmgimnkYRfs83aWbFw66XAR0EMP+12BfaIcmnLQPRiNJV6VDBxrUii93fbKNpL4h5yBqJhlv701J8KXAPh6YPai8jwkFNHzJpApwtUx0z3YEuhCLgBQ52IMU9AWxao0y5y8gzXuosdSEYygtmSOyTt54g3CB7E+EVeageNluTGsgCnYMnEcoVZALwc6y35HSzbEBSwESk6SscI3FHVXoAVYFphM3tpIKK/lBXrGikNmjxjloYCJc0oezrKDJTtnCbCsNeetkoG8JHiIEZqxBel4YmAwfQ1XjXXNa1BR7BRJlRgG+O9FdmfJ7kfYo84VEFEBwh9qveiU7a+nhc6ToCo8HCErPAu3Iu9LLqKEsMEMjYtviIZs1G5UpIex6ns0g6GD2yMaAq1S+g4XqW0kQZJI7xCAw1Gg6bU2DBAUzbJ7U09yzBSc3AP4NCrX3BRoV1aWQBCyM8DBti2keWB0gh0QTw/XgrMfoD9m2YM1brgiEgAAkCHTjg2SaYA9snM5iwhNr2EG0G9R+bDSBLaACOy2I8qEgSsWfnA052SKiImWBpEt2QCoBvc0zD/YCrcJOGFugUHiaUDLeGAICWE4pcP8vM/snVaylz1Fl/7+zqvfp9vvVbsTm/sdHNh7AOf7n92MNe14dnsA33kznu38rPcA6rN3McZ63vhs/Wzrz9b3eRfjPpaskwllnUoo63RCWTcllHVzQllnEso6m1DWLQll3ZpQ1m0JZd2eUNa5hLLOJ5R1R0JZj0ko686Esh6bUNbjEsp6fEJZT0go64kJZb1UQllPSijryQllvXRCWU9JKOupCWU9LaGsCwllXUwo666Esu5OKOuehLLuTSjr6QllPSOhrGcmlPWshLJeJqGsl00o69kJZb1cQlkvn1DWKySUlSWUlSeUVSSUVSaUVSWU5RLKqhPKahLK8glltQllvWJCWa+UUNYrJ5T1nISyXiWhrFdNKOu+hLJeLaGsV08o6zUSynrNhLJeK6Gs104o67kJZb1OQlnPSyjrdRPKer2Esl4/oaw3SCjrDRPKeqOEsp6fUNYbJ5T1JgllvWlCWW+WUNYLEsp684Sy3iKhrLdMKOutEsp664Sy3iahrLdNKOvtEsp6+4Sy3iGhrHdMKCsklNUllBUTyuoTyhoSyppz5Gcu/duqY1G4fNrF27auzTOv4iZdFsa81GazatqIWQyuCdq21jdjrd0SY99FbUzSSYFZtlXHotChuHbM+6rrYtRG+5LEfMx15LnvsiJzRZuV2iqdtUOoW25W13lXDF1TRb87B23XsajJ9uetH/IR4U0/hKrUlk1tFGqG3rmuzbtxrF0Rei4N1Rh81fi2yfoq250fsepYZLEcM5eFuhsdU+G0O3ZwbmD0oWhDXvL5GCrnsq5n/qoxD2NfRzc2RT76cjkXcJM5J0U2lKEKGbPat8XYNrHt69zXsY7lELTvx7lYZHml3XzdUIyNj0WMsRhK17o5z76uY3Fi857PrH6fcE9AfWJzv4MDe4/CfP+zm7EmHs+yR+HMZjzb+dnuUThrjPW88dl2j8JZ4z5njftYsk4mlHUqoazTCWXN+r7VQ/3cd+lPHahh3dQuxLEaOxUC6fqyy2POamhiMw5FPYQ2hgIDUw9l5Vlmla+HNo/a7H/GGNMi2+e5q2qX67zvoMoBuQttW7JAOx/yrgvt2GIO/DBWXdu0uerrDMXQIhvjtuzlMuuhZAxx6Pu6qCvXNWXodaiw85k2cHY6udqFMtcB87zKhiZXvYWyqRrXVr0K4MyyzXoo/RBdNdR9NzYOqziGxnWhadtCp2t0HrMYmJch9lWhAgNDrw17mLss5KHcnQGx6qHkWdWOOpLq6rpz+RjCqLOZwfV1GXWCI8trnmbofZH12hadlV2Wj5jgogmuauc1s66HsrU3670DD4W9me9/djPW47I35zbj2c7P1t6cN8Z63vhsbbfXn63vc964jyXrbEJZtySUdWtCWUvtsoM9NqEt8a7anRgaHczW8cSyHbqxxvXmnaqadK4sdDS+kUvH+OSDNgO7pm5WNR8sm1DgmOWgPTZhbN2YISk2ZZGX1TCGsvRRRSD6TlV1ugrD5+vg22ps+k7b7Zt9NkGnSHwcWu3KVV2LyH2K2IISWm3LrErWqs7kl5m23daYjLENVVcU0+HtottrE2LlwSE6wtKOrh+LrCicz11WVl3eAsZ8WVchz8eqb70fuybqbN1YFr3PS261Xfdr2RlmKsTaN8PoukoHerMMM9aqjlbNL4axBE3WOmHlaxXAUMWZtu18AUqLftiumfldr9/zek/QQ2Fv5vufPbhSJ4/D3tyxGc9ha2Seu8cYYz1vfLa1EY8x7vMY4z6WrFsSyro1oazbEsqa9X2fTcDf9plqTHRZFr0bWE55nodYuD5UDQFV7doW6A8w6QhTxjrHMORVF+q+jCzMfTahyL33WZXr9HPXg3RUkijqrI/OnHdd2+mMnY9dpTPQfYzVEL3AhA4nEbbstQlFbAYdJA6uqAYCDU/oJOPWheizdoydTgR5lQqpMAtEWpnLVf0oxxqNbdxnEwoimThUPjRdiZEqXNHoJGs1VKFrmZLM5wUzNEZiqyrITuo0XxjasfeEV2G77i+T3ZdhKjExqPgDltBnfvReNZ4UW+qoWKeSIl2osoqp6ysdkMkBg0Mu6LZdM/O7Xr/n9V6/h8LezPc/e3ClTh6HvblzM57D1sg8d481xnre+GxrIx5r3Oexxn0sWbcmlHVbQlnnEsqa9X1v7BBCKN2gQmEdXEUuIqQcdJyvb4lAiHIKleMpW1UyaruR4AFkkY3iT2LbNHttQtX3HdFIH7K8yXuCnbzly64FCMRRZ9nyrC2JgOBeXKMSjVlfayzwLqCSfK9NGFQHqeULntHpQHCW+wKuqVH1BVW1qBuVbPR5TbRWewcmi4WOWXZdT8iyzyZkzciAQyMjWfd95uuxIXYa+ybPooNr6kEnXoUDuzZ47ObI/xc+TKUUiZG26/7yOcka6Ky8Uv3K6Ak1Q8/kDBW4ZhyqthMwC9y86DsVVOSy3hNTjTpeNtTVds3M73r9ntd7eB8KezPf/+zBlTp5HPbmcZvxHLZG5rl7vDHW88ZnWxvxeOM+jzfuY8m6LaGscwll3ZFQ1qzvtx1caRO2Onq9xfy3Hc949sb8txnzOs/dHcZYzxufbc/iWFj/DuM+lqzbE8o6n1DWYxLKmu3CrIdWPee88DoW6geAnvf9FF4SihOLDhjuUPWVil27GFROslRt0LYeVSMhquJfu5xftGoA54T4o9dBSD/AKeokfwFlX3fwDEDM3Eewc6Wao23RqBaDCivqkKeqoDX1Xp8IzIaw9L4Ax/qiHPsY6rEOnQqMw1PiXVtiiqpqgN61iieNXQ+FqloCKta98IDnrXGrtB5JkbEmkB+4HkqhzRrXNGUXfV10RdVNJMMUhUdSHqHvi8Z51fkr8nqr1/P7WL+LY8KlR7YJ8/3PHlypN8dhE6xY0tLjee7uNMZ63vhsm3ew8Pidxn0sWTcnlHV7QlnnEsqa9X2fTSjgx3IiTRF+LdxUA7SFTS/J15HnnKpJdnCFgTwE+c3oOlflAoplyCDid7UDTZtQj3EgN9CA88h0FvB1JD1VycuBmMtWtf0IPjuorun4uoqP51kfWhWKw/rsx8lYKciDrO5qspFNE1XdsyNL0PqG8L/Nq5bgGrPgGL1rBqLmyNImtxGGJoZ9NoFvd2VRNSBXbIAvh4JMCbkQ0rYlmZLW18qQtNANUXgeywFXkcFK9qHoo4+Pxs5X2oTjip23uYEHE1fenFDW7QllpYydj2ITMlUtyMd8hOxvQ9ZnI2QUWf+yzmsce6EiDBEij2Rf4YbGN4W2LbSdkvdcHvflOXO+q9prkH+F7xUykwkcSU0SYJLnI0Ew1jB0Q4SNKkhHlHmmKlUqb5SXZTPsszckNzsIPRa7a1U0D5uWe9eUo+rfdYWaA6gKWO9GN/SqtNPm+HJMk2vECu61N3kZ4BGaQu1LVBq66EQ3Vr5RacV8ECkYMZ4qQwdWyGDdgDUD6MOr3tjQH4W/v95swnHz95ZN2MffH9UmbPn768UmpLRVx2Ff9sYObdf5AEyG8yrIe8FFtw1J8VaFxuuedQo4Dy5vVEwe9ghIHsAPQzPEshxiu9cm5ABuLSx8eNSunzFT4TVuNGZVCL3qrFZTYZRRlZ5HuPus1Z0G7aPqur15zqECFTiSC6HEvmSNuHlCiQbGHr6sA9XLlnmV1fZjEXJsXK5eOq7IIe72xjxZhM/KVDJz7AhLyEYWQ0b6Dk5w6DzBjusHGMGoCj/cjMnJ4fKG3PnaV4Nf9iyt7c31bhOOid/YaxPW83M9cOzXq01Iafdmfd8bO3QOhzf4vq7Iro9Ez6FzZLBjQ368JOonPghZqHC/vh+ldVgKwMRAYj2rY34VnKCtALGa+v6E0g+sG2KIxleiqskKZn1Oup6UIQ4XRN6RM3MOth/u3Fd7+0Nlfdf3JauxnEq6q9yUapTVDSRH4cmJ+doVQ5sVeaUizR7+mmwk+XqSfp6n3JvnbELU3qypnn7JdzvFBQRMY4VdVGncqsGEVi6Mru6mTUVDC/7ImEXtVjjKvqLrzSYc974iyybs21d0VJuQMlf2SLAJs74/utf2Sh09rr222zzGg9mH+piEss4nlHUuoayt37J8S1aqZRx0ssfFtA3RaFE2DohJjpbEcKMasXlLXNtVwEy1yfCeuBayyjf8bS/ezHJVFyfQDJIVqqYIpf7tgH9VrOsqdGpQScpWMFBlMvuCG7iinwrD7t1rm6vOND52zGOugu7jVJ04NipKyyOocUXsms7hE6tqUMci7wGyUNkD/FTd782Xt12bkx5gmHhqKL826NG1pZcsMQB3UF8beMGsmyrnO5W0dIS/nsHHcX9/QAZGdqBWN4QyqrZ9kcMZNNrtUuEiq3ZgiruxEG0Xx9EX/MJBBLRVoSTF3rg8NH4gTe6gI32r6r0MspUnrfIGkXGSU+DYsywyUb06duCdY9V7tabaxwOyvvupf83QkdT2Kjc6DhEIEMRd6KGkNlORZKKgJoPoDDxbFsmvaCvS3ly82jCo3VUvXjHXPifVzq1gWsY8uJDVZBrUrg59GciXjKRRRK8Qz0AxVnGbW7h8TnoEVmNR60hHSwaj4HUxIRV/gtCaWr0jA9Pi26YLTv2bpkatRaH6wXFvnh8WplYvyUZ126c2StA3TI+rqyHEmvtFht8SoMHFFFyUZx0MEauqUqn+WbbVH1ANwGJVjEyASreyMocCctcRTqqRQFZURVmN2ixViIjtioAeKVgr8673uz4IVn/AnOwTExgackkV4Vj0BJDqJNcOhJFVpQ4CjfjnURvsoXgzX0+tOZqqLVd1tK3+gJmOAfWqbduxbAZMCMxwA2Mc8kxNZQf1ChuzISOBNIQ6BKfyydV0BidWuzVv9QfMvZQB0RDaY11o4Wh7W+hDU4Oxoe6d4DSwM1PXrdh2hfoxlBFmC+O2zInVHzAn4YX6YpLg3oesYJKBpb6v8uktFlinPAwdOL4QMg45+bSWTEEGJd65Xc9Esz9g1airmNa1I0aITas2iUgCxat1IRmHfOwaVWnFSvV16QNkWptp4ysBwrJ2rP6AGdF6BXIW356XVdY0cGx9wzQTMagcc44RILug/qMk6tS3qvExJ/0Q1ZVn2SNj9QcsGtWChuxrY8XYa5YSycoAo0fijzeqUvEsQYA8g+AdE4CEmMWh48ORBTXLtvoD6nxB9Eo/jIV6dNUYt1bdlbpBOcyGgKTNsYkB2652aFkNIdGRwxgwv25Xg97qD1j0rGz0VB0EBl90dVn3HmUeWl81ddepjDlEhG9rdfTqal4DhraGS5nagCyxmNUfUIdGdE6iLwhitJi1eXsqmx3Qd6IkkkHwPbpJTtq1VjX9wqmrxqCa3guvavYHjJkq2Gd933YYCj2sI9TDfUZ1JGJ560Cbx/xVquEtOomXgSsmUYTBWc69XLDGra4AfT8oWdVHss5DnqHjIURcJcY/w40Weaa+F4G0lKsGeU+1j61JYe/Oj1w0ZGcYUXipulPnE9Xp7nNIcSjgoY99K5MiBpjU0KCebGVZOYzAOOJV+b2Li429y5oTzLK6tRSu7PTqeI88CZEzIIGMOiYwm0r0kg3vmhHbVxJg5moCAq7I+4Vru9uUTaaeQZHRB0hE/Ka6ORYFZolUYJ2r15HXyT7UUZ0PC+3SdeS1phan/WKrrP6AmHs8Ks/eTM2gSMoXo3bgQYSTNyARX/oiqE+E+g0Er54gPu9FIXLrctdDxOoPWGB1wBosyx6vGHMW0OBL+DbV4x60mxUyMva1A1N5bAFgqlcs3lbqsZQtvSGs/oCZduRn6Eff5VORaTdBLLL96kLBwFQpH7OEnffiHVxdVigmdp01DxKbZZv9AT0KhQEBU6lQvpYGCVCSnHWtFpUwhLj6qnI6RgkkLbA+fVWrsXRXeniOWbbZHxBhqHfJy2/Lrg8MyOnUJLZZPd5QFUjJgOOsa1Am3qPlQQEoo+qMVzv9fpalJ8VQNh7YqBMgahkHYRrbkTl2wQmEwpB436ldX9fkjnea5SUYSDgDB7LY75exZONI8FHol6w37txnQcW6xxJ8rT6nUKnqnovzV5tt3MGIH1Y5falTvuig1R8QQrgPMah7mop0V+qwEtXBqhxADm3LzKoNIT6oLvBmvJyCe3HVqM3gu96DZn9ANb5QTin4gjlRw1+wt5p98/0cEknnhQehqXyABSNV3IOWobF7cUu7XLnZH1Dks+vHuiLJpYXvdM4t15kVSKpS6fdhKsOvlifEFaOq5wc86Ni0SrLPss3+gHUg09WohQD4qa/KvgWD8LZ6AHeJN3NCrix8FJWcX63+xTVPVwCsAv50lm33B2z0asoylurW3KuvN2S7yLu8HJVXK3m/uF/sjG+5k/aco5jqXNBGt+h3Zsl26txRZWBkJgH+rFTjX+Y5quEtWiKLRLbAB2A49pU3EeJI2BaAAN1uvq3+gKxHso2N8HydaZMSbD1U3KBmJW2lSIEMX1aqk0UV1B4AN0R0AuQCshMJzLLN/oAgvVybhoCrzGUx9a3PhUYGtU/USg8DCxIdbxzxItCTqBLF9V3uyBHMss3+gMRQQS3UsfOurZkSECdqUfPPwFTkXfMA4tKUyKPh3pnsXq3vUdbFN1TWfA+hLIDyoMtSa8T7Mo/AbxIbwLWBea2Zs9gSAOGARkwxXrtolUAlEAzLuzT7A7asu97XonCxbIS8HT4sq5sGA1s1QgEMuy5ky2Kf4S0UNIAiMtJKZGxm2VZ/QMwg6pUBxDCAGfMbfKsOc+r3GLGCDXHDWE619FnsqN8gC1gCsTI1AVtsldkfUBluWOgyIzAhttN7G9WErBvKTH1cmdZBIdTUmb4g1oqMl6B/VK/ZnZ83+wP2I4t4aGrWWat9OCgOLjcH3RJhj1gTph0dGnB7hGY4boHHnuVTB9buoidWf0CiAQBDlJLgKoGWJLrbbtQunJ5VCRYnGw7UaTGTBBJeB1ewV7VavTQYzFm21R+waLKSBH4GiADuEIqpw3cPzMH/ohbMioN/IKDXAWXnI0RFp54QudoAYVRm2VZ/wNyzLn2rLTqQAllVEew2sCm1m6KSvBJ3T5xCygFWQx0fg1qNq8tSkbe7fYRmf8BKcSVRdD8QrMZ+BIPAG4Si80S0OpXngS6gBzX0ypp8BGuhJjVK2nQx39sfkMQei2ZQw6dRil0SHTDLeaWGC2r/SdBHLFsrxtSm/nYEKzVADXW7IPaaZZv9AXlHRTPtplcjULKtYJ42dgAzci21qiz0+APggyLNbOimX2BYOoDjqq+41R+QhCgCY9uoKUah3irwKQFypFYX007IxQ+tDn/yCjHY2F9AV5uVubb654ue3GfNiSxsqSZ7ytMQgReletyzCHUKoveDmoZ0GBucjc54E7KA2LIKbgZLtetZ/mqWbMiipgOudqNaEBFQTRs/uly6g7pXxFg5qxabkGubFtOsoDuEwXVYw2Xcr27JdvJWoL4x6OB90PnU3DueeSTEDu2I6nn5vFIN1aD2ejXe1DYSSB8Cq1n2a1jvssOogs0ITCtk9gNcGByKCxV3JSLu2mFUXRCmnJcJ9GlqglEijVY9dnf2xOoPWMBaqNdQlenIfYShw4qTUe8AH6AKsIUjZqpUB4BLdGg+B8RA4GgjXbPD9lZ/QLgM8aHYeZhANKXC8cOdqEuJ7slyUoRIdMut8JTqc0rYiF/KeVoYxFm21R8QTcXoqd8n+Be6KBLKk9qDwqyQhHoMpM+dmr2FCoaC5GFOpFjmgM1efZ9n2VZ/QLSYAIpl1/DiqqmjZsAOEkiNE23I0AhuR0IXz/w2ysyT9m9K6Wksdv1gXsfWk079a4OC9JE/slE7pJzOzuDigWdqq5TBzwS1pB1gUzKdt8b/AXN3vX2eZ8jOgMNC2/guRWAY0KFG/XLCNqJJdcsiHsNTQI0Rdw7qyEXECivW9OpQtujJ61rjxpNDRBDwqEUnzgAbFbUTK8C4AYzEN2aE4VCvoYldwGcQ35PHZKmq49ws2+oPqMAady2X06ppNDnTQkCZgE/9pjz3AAOVPU4aiq9QY55RVLYCubqolvk2+wOy5IYGp6oeVsQEGatHnq1Wf2iWuDomZ9qaAhEiGK6jXkwH9kDzki/Y5w1MHcT2wwJEdY6FWCRUV4uzvkTogDEn1a13iXWSsoC/tQu0CFDwUG51ttgqqz9gnjuUGM+CtsGVDuqjro2ug1pH11hsYD+kdAnHoRSD6zX5A/wTzELm2sVWWf0Bs7IXV6D8NwuxDHqrOCvoDg9bw+oB3mLcIarVWlKN5fgtmYEw0TfDIvv5huxCga6avbfqGpsRWI8EP2gHrzjyahVkFjr2ik9Xn+eGOBtOVZ0ZPVhgb3/AQvVLcgxcBitDfCNiA2ukvch9jfqpdhBMd0H0CWWQD2rPiv1pfNs2KrE0y7b6AxaQz20lNpTlDA+dTwEKaD5AN7STFyMUkguKuGyMDtEJwT/5gFrtnZa4weoPSNqiK7y4tEY9rommIUdbaNSY11NfP3ivUXdSayXg8cjvCx6D0D9oZc6y38zSE5y22qHBbmc+OnWahzRRG2fSCUQRAyahVsmXQT2xiOmJZAsAYxUwuxicWbbVH1CmouP7iKuYBc941eIQirHJIJcJmUE4IB8d+2sJOkFaxFq1Dhlig5pFv63+gABB6Ite5ZlYd5naaA1ViR0kUYCxrQlQekI/AmFwG/EQgU4Q3QKoI7rb9fOy+gMqbCKCApEALwnjQYPgJ7UDJ3Sa2uuxbhlsjqGC4sS5qzhEh0XpCQDC3v6AanRLsqjnfULuViBlUn+x1tntaizVepRYIs9hbAaQXC+qPWJwwRgZCZ9ssSdWf0BZEVG8pRwP74u1qR0hXucoO8x1rxISUV0eoWdzfDSs7xC1SbWTfVliKas/ILylAvoethUXDu1CzAt9N4CbHeG2Dt+g9OpqF1zdoqgjvxOrSkhLyL28S6s/IHSWejOzPEvGzeIbYCEI1ckSAHvGempwS8AAhMHtCG6xzGCDQJxcvNvnZ/YH7NSuj1FBcBHXi2Iia0cShvxGJu6N4DjDL/cNcBD3qbdChEw+lTxcvTs3+3amDpKs9JBf2keIbtUEVXA0AlkETDiWQr1f1aRRFhjiRFarVQaQbCZwd5Zt9QcEs2HqIWACEWpUtD1C+hYi/1nqQHj8MwCNTB4pTrW6Vsc90mQsoaAKKrNsqz8gSjGKccQVqJwcdKyDoSqxo0R72AFNWQbOmowA3hqLjHWN0ORY4XpnT97Rmm/inFY9EweyUKPOSAGQa1AzSJDANyp3Bu2lTr01fnvolI8pWj2bq4pd3+VgjVstg0mUsATx4oRTgoKwJvB/qLWsdEuojWqoFBOIqiRf07L8WRZQXbtej50lmzxhpx51KvPC2iSbGxWOwZuAJdQrFTaagCHHABIi6kgzIBxAWAgrjYt+R2tOiEIISAq1vSOY5in4Hpwr9D9GSQitI9IP4lEcvnMqPYVhJ77E1/O7WXZv6gmoF86Stx8byESyxSwZqFxoTKws64+k5fAAYMO6djV8bCl7SLKsLXf9Rq3+gGq5SA6oZBkHMUYluh1hdhVJsnaEXcAkyriCnP3UPhFO1uXqC8tFS+xq9gfsVV1QuX0SriwIyKl67PHs+EoIDhFLPdwnCwm7pQM0beBtstLgIGPc9Xp8Z2vcblq/2I+OkWXQ/qB5uA5sbSv+RboSdK4P30d2mzikVvdQ1nuMyrPPst/FepcNPB/cJ0qRKd+JuqseoTLa3A8egxdYiqBosDfwfbkas5MtxJwQuLllTt7VmpMMB6J6j+K3dIQJfhqvC/5R1IvxFnXs1DaU9EkcsRCgcZbpOOQlFm2xVe9mySYG9ZVyOGPQKianBUkHXaj8E4rei9eLvlRbRrWvJMsEe8/VMfK3epmTf2fON0ASbc148BHiCiMKcAd6otIjrAo4f5w2XIDznTqgE1CVWsH4ty7fcY/vbo2bgK5UT+JWeJZoFMYDHAFFCNiGaICRUKYVdoIFAHfQEmhG9bslTi7HHc/2Hta4ochV+AXs0bSi23AmTvu2SXAVBJ0619FncAOYyAJDD4etRQydz8ssqgVrvqc5bow+8cIoMgLKGOOGhtQ51CIvq+zVLJa5wZflAo2oSxQVKsgvTLdgzfeyZKvnMa4EHr4HVrWycXCisScnBWUAugrTOVFBLFVRYP4adHGcGlTH3XmW97ZkT/2WyTWJ6ufNa+844XGuXLQiZsg8sZ5lU2q7qqsk1E+F8rg3pn2W/T7WfI8ksjJRdmSXJRHo0IunG1USlARbqNXeXVi/9vI6IDUSxYIrMF3FMt/va40bXMeqJreDi+lRNqJW7aRR5kHWqFKDaNLTnaIgwBHqD91GHKqUetiN+/0M2WTxAQUoW0fGk1Qj2SLQRCs4hLVTVVUn1pd4U8EbmUEiCxKHYE9tttj1AX5/a05IOD8AkbBE3isPiqfVVhOiU7J0ACrSVU3o2mmsfacrOxErEDT9bv/JB5jzDW0hcqeZtlhAkYIhFU43vFNIbkHPAcNCYN6NajjP79DtDCq/DGFXj+QDLdkYIWY4j4ppnKBPEK9GQqkRUCAuQznJ0xA3QVeJNQQY84pbbdepd31pP8iab9VSxAw5Ub7K10JjZDBhRakm87D0QT1uYXzUcLkiVtZutG7IQNOsLr/MyQdbeqKzoCxL7U4LvD5NCy+XNDH5mHx6aRpwSaYYSCcsrpooORFxR6C563P9IaZs9LjoieuyTtuskFKLtexIMhbq3Duq/ffYwMCP4lhYCwpiHb8DkO18w4dac4KpQyscyZqAQKy/EyfhmxGWFpTTYJYIwfkEVE9wSRaFFUuo1WbKgy3czIdZstEOvoqPh+zDBeTaUUUOExLawQVWiluxqlBjSpkyKVj5USWcyKFrD9As+8OtOclLnVhhqkkv8KJw5SwV4D2uvWYZ4X67gcithJMFzkE9EHfzQiptU2t3OfSPsGTrjGwMynWVJHNgfmAxyPNjR7TdCmaAKJWkiFj6plCuE6yOlVD5L6ig5V1+pDUnJDNYDGT8MHa1Ig8WG3Y3kD8GDovbLHWIWM24y8BDkWgAWFTajRX63V6i+w3ZmU4HkWHN1LlaeW1mAETrwflEOniGqGMLXQcI71tsDcnNAr4Up0HoMuzODH6UNSdwiTkLLstI5oAWYDW8+DlmRgUFWUmE7g0PlyuHoq1MhCiYL1whtqpffPFHW7IZUQeMLFXReVQBZoJUKN2aUErnpfitjjlU2gEDxK+1KcMrOQ4NyuJZbOzHmOMm48RaI+rG5HfaBjXqCEZV1iiz06YTlGaEG4JdhU0gUazdrtonKmplmZOPtWRjOWLIR2kI5pnsg+gfFXUg7Qr7q30u0w5KAnBpqiri6vgX3DovIl+w/cdZ75L8DkwdMRN2aVQNIxQ30wktiE6YWujRYRQzE3S6nNQaoCBT3ADP1hFrzrI/3pDNiHFjoyfDQ0Y1qhYFRqRjabMyvJKOQhbwPyxEqDEYsRb0OKKaedaUu/jyEyzZJRqF78NbDcpbEnFXA2C+UXYfA1II0kN1+wkmwrsB7aLK1kKIE8osc/KJ1pxglSJLBhqvLntYRVadI94gVFd4CaWCu88EpYjLG0jBUA45VoKInlc1LH7nkyzZvLGWCMAV2tGDb6iU0ETZQ66pgskk6yveEAZ/hKTptImwVk4jqkP6Yk8+2dITVQ7OVXZPOVuCKnJqHaASy5tpX0iRKaAAo8OfNuBEDETTaCsWCY5sFQN+ijXfJGtKjCwYBMOvgJoZIm9XaVcvPLcfnHbNaF9XhCkVKAmEs3iiaiToXPTkU8351lY2MaKhrrX3DmiZgQ/wK0TJOEXwU0aAJvSp/WAldJ8jBCQ6JoHYLL7h08xxA8i0CQyCiOzIIHxWk3uAKtZpbB5mKGG98HRYNMeqx5x32DflNFity96WT7fGHbTdGHQ6oonaRlQXWnTEqr1gfqGoVjWTSZ7zvmELCmWuZV3wg3VcbOxnWO+S2HbUIvN4KGAP0AzJnWJTYjPP8lahR2ILiLVWiZSeqGdU8eXKk7BbfNpnWnPS6xQXazgfUFoxgwAHkiNRZIBYtyECkJuxhNaotX0z4EyzkdQVHqPZrcvPssaNLVbiggwgqBjcC64hpmTBl0PHciXAEVSBv4MYYPaI6QptgMPcqL72IvuzrfkGkSjiAJIRaeesG5AqZC5kowcLTuWsBXmAsmNdEue6KftWwWmN+KMFn3yONSeYoV7VtiOxtGOZNDqVQFoHSQLgit0gxWAihOLAgVXWlhAfBHCxXnHUn2uNmzGr/QGsPFlUl8OgZBCljrCTl1thswRdoAL7ZmCCYDkU0zGJeulAxVn251njZrV7TKZXEgDXCK4ZdEAO/8bUjKr5TcKICBDuAFfDuIN280OSiQlpFv3+fHO+24bQDAogqFgejspBPZIAjZhdZhy2Az/j4JyQCBVXkhYgfOtJgPfaLDnL/gJTdogQ69Dc2lCgHeBgQrRZtCsoxGujn0opDNqWhtpBdxYlg9FrgrxdfPEXWnOSYRpq6EvtumFiZd+AOAA3j59QFULBz2lfjXbbQm9g2VD9INZ23O1b/yJr3NA7UPsV5L/2ZqE2nc4YgDQr1rhOAxTCsSNIkzQEtrHqsY9B2zHIjfkFn3yxNW7mGjyFre9H5MJCVaM2Y5c6HgMpCTaGQGjHAJaF8oDKB0WQq1ZVZZRneZdfYshm/Q7Edq04tJ4kBV5HO1C0b1e4B0A3MHpAJdQ63BuIEfLOq/QLwCfuOKUvNd/lSPqFrIDIWKewF6yH5jltZu2nE++kpggh6pipHhVhJ2l6Yv4e19/s9oh8mTUn8P7a491lDrYVdhsKifwHySqofN4c+RGQ91S6euQDkWHalRLLisAEizPL/nJLNg5QSa/gK5nsIkAcg3mCMJt0D/sI4wEpBm/Vt2UhfNyKZCKyhWZd5uQrLNkEUJl2vqqSI/R/xgskjIwwM7zafsC1OHQT11E6uR5IdwjTUds8o7JKs+yvtN5lrkqXNVRJocPDpOBh1YgOql5ldjEApHFlo0A+xGs8EP7ZjT7PFRD2O3vyVda7xP+GHm7QaScj4QHywB6A2FrpHXG7kG48RqvYVcAWwFIrFgBx4fpm2V9tjdt7uUttpPAQOwRh8DRglJzpwVc2GGnCchRlwFHUKi9AzlEHWKAQVRRzlv011rj7B9iTVkNWrV5tGyjUpwUzCOiGWyZFw3TjC0QX4IKIK6P2KoHydvvtv9Z6lySxKp1fIiEN5UCkCfOrgsyNUojTqSynNLUS24TCDnsApz2Qcy1HyMlF9tdZ4yZ+acWaqMInYwOdAXYw0NC9EBINyNApEEYYNBYgSIgQtg9Yx/sMi798oTXfEbiaQxNFHbDDpnQEgRCBrZiUQkUpAN3aJUfeQlv5M9VrUkEWvlP3u9zR11vj9tilWidhotOmY+xd7EIxVYfRTna4SAg17Gvk3TIxgDAi2Qp32hQqbjXL/gZLtrK1U2oZbkB8FXmGStSr0x4Gor4Bw5jLrbNKo7bQ5M20O5oVhlNd5uQbLdklUQ7ohGRiA3RU+QkCboWoLMooZhrWTXlLeF3BgQH2gMBWW4NGbaWeZX+TJbutexK0cJsk3pgIuDGvONJJwUtRm9rED+fk5CPgHiBVcCbaxzUd2Z9lf7P1LhkSCR7ck9opYYCaru5Ug7qBuMS5ex2KUukA3mSvijt9aDXVhYxktju/8y2WbAcVW0HQjNJABQUsbtdp60nUBrm8x7x7AhRyGx0wrujqTCS8un+wRJdxf6slWw2SiNY7nbzUjoLpSBE5fkJOSMACZKj6B005HR4gB4npCQoMMW94pQXbf5slG2zXyKZBiZHycqUqcpMsgx+BQq6gNLSDHGBIVK+AjfWvNkkw2yplvsvVfbshG5YVXhu3wFIW4zNOURl+LlbagUKMwpvVVhy4PteT8ScBBikDvIgq8rLo93dYegImQDD5ZjGX5bRnptLJP8aJIfBgNp0vmvbPuaGUgy8JEFlwAZi+O8f4ndacYN7qVtuXCx2bAl7CiZEFyx5Y6cJqBPlkRjCwubagkSAjpaTb6JzVkpf6LmvcjmfDH/LKSR/ojEcB0gNP6EQDkTwBItQP/BFr0vUkxUG8EQBBkIwP2uXTvtua78qBZDxMAybQay9mBQzHlGuzM1GnDnUiCDOjkB9aJgJnoEyLXDZyFwN+jzUnEBFApLxutYUCMNgSRZTQXR1kciZYgSaNvEUiE4J8WNARaEtwgbkZCKFn2d9rzYkwLCQUVmKoCEu035sAezK9DBErkKsAmJgxP2aOVDoZJlD6UKss9Q5rfp81bq8drFkkj8PwpGkFSD8oZICiBb4R7bF6CIG1B4ZXrLMCZCWCcgJuZ6u+3xx3qbOLakIWlewLo/L0PhMJjUlBvOcCnUuLkD8Eb1DXZU0SOlQRXLvoyQ9YslV4jEAdUoekQg5Fokw6oW+lPDkajxsllaw9bCB9oqcxwByQESMwxpAt6/IHLT0hAQy5qJ1nRP+sIjyCtm2A99U/DYdeT9kuZRx4MO3cbnVsMhQl1Mvu3OgPWePG3OU1eFWrO9exZPg1Ui1oQkds0mEZM3h0iHtAeQgCtaV6kqhFAnz4IvuHzXeJ4cPAAe7g0xCPPSWG0DbYoGZ4jSgCcD8vsKvF1+AsCbygbnDbcbfP9EesOeHtMKJa5y9GUtL47qgTip1vlDAb4HigSzudfGt0QBzTilUTMYPz8bszZD9qySavnQmrd/DQkFwAMSAqZAOxPfGmJ08H+FbmMVPHm3qAX6+1ZymqF8Nu7fyYJRueyukMoIhHbAcRpdJqxKpThTzAHzyHNnWR9fWVjiyT7FSYBiVGRL9g+x+39YToNtc5S0YOYGLlaAHBbhIoh1EMXlQi0tc6BU/gxjTjL8lHErPt+gX+hCWboCW2YizI5+Nwa211LEWoMWiSEVNU39SdDl9iZyGFWKrgTaUhWa9LnPaT5nwLNLRCUDq8hWmRgdXm+xHNHsj/tV5rC4+jDmVOJLZOq2v3NmqzxA0/ZcjOMA092dGIuVfamQCS5wYNsuLxjkE1gUA8ARM51GLuyynNxAqVOWuW+f5pS/a0Y6YrdCALDJxDRBYd5HRNRIWB7sVSDQLQWESIjRIkUGrBem0Oh16dZf+MOd8S5bV/MPCOyFw2Tn6A8BvvMOgcJ+sUHSfLRvYLLo/kEcyVlNzXuzMfP2vIJmrRYUrVR1MxAUKPXLv9RkWovUcESJ+sGNOtDpN5HXS8By2Bi6203XSW/XPWnLAofKPzyxgnnCYyWifSi2ACzg6NqFQONaimQBicyqp5YjlsiQ4M7vLcP2/JhoEtC17joLNWYB2UYGpAJU0DhPIUvTBMDWJQXxOYFaxgCfbSwdhswci/YM0JGe2WOSDcaKd6G/UA+ul1MJCcBihfmxdzjEEns6Nqk7jSyBIoIVrjbv/gL1rvMvfK1Wp0vBvIRlwXj9xpC02BTutQEpy7DnwRahHOqpCmdhjhOkEsy5z8kiW7BLB1JPbJIsqA4BEKHU4jWiMk6UAjQE2i7JKXi1dlCcN1AlRafCx867Lmf9mak1GFc3lwjF2P2Va2C+YLOgYURM60VYp61BHxhskYBtUGAQu4XGFGudsj8ivWu/TaVQ6Hm5EIUHlcKECSzyLbYLqj9rOLQNI52CjVhPmFeu9blWUQfT3L/lVLNt7LMSUQxFAiAB7UmmRwJp/bTJvbNMcQUw7y24dYov9gUehskEvc7Yn/NWu+cY4EO7iDAixDhhGoijWtcrQBzFX3AFbiKyJ4yBLMa6Fdi8pQMGHFCvv8uikbfqHWSVptoAceVzLf2kDI15U4h/CQ68DwsdRFHQipE/XgJIR0Z9m/YckWl0navAIMV0qTgI91arHodGSirGEPAHRKlzRTJoBMVYfOe7ibToe8Z9m/aclWfYXAaIHuUmpRJFCzoxjGipC7LOGstGEYilZ1noEXItu9DvRimJdx/5YlGw4Dy4zJxhdWNeHmQAa06wU5ga4Tf+XwuzraHnJ5C+1kiBBk5K1JTs6yf9sct048d53qujHlvsm0e9M7PAy0AGKk9yMOk+BNFSYhwWrtqNUBSiLnxc//jiU7h2PVjjtYRVJUOmOZE/G0IBEiCacddNOWX61CVRBqBs+j4r8jiup3Pu13Ddnk4FQETgU9kKZzPKQRVKMAI9dkwphjL7OLk29ydZ7S7oBSPqRTXmNZl79nycY8KQ8J1VBiRLXlnfWOHqt8ELn5KflHZAFJDvUNZdCg5167TnuNfHmXv2/IhveBJB3gGNFwKG1gbFmr4ARQXxVAlATFF5PEbFRDlNw9tCGGOUy75nZnaf/Aks1yQb/J/QuMER0owFS1HAhq/JsqFkCuYBSjKqIgGRecK+7WUe9udy7jDy3Z8GujUjskHXRk2KttYF2zMNWVi+XZoTLKSKgxAH6Pt4ERmOr+Eq/t9kD9kTXflbZSFmp+SE5ugFKHsIIM4tti7VVFGTbIYcZlygCmODvABbYgKq2yYOQ/NmTzDtsWJmqECctY5yIIIGnAamQumkpOp8Bd5ypyqro5XKNz07WamKLri5//E0s2tgRQzzLTKZIWwCoaRpxvCfJT0koEvYdhijoR1qtKYqF2Ep3Yzl3s+qfWfIcmogskMrqC7NDQxzHqeCVQn5wumAtCg5zLgHnEgkBUj+otDSkMA0+MsmC2P7PmW9VOlHDt6qZXY8ZKR7CAY3WjqgKEq72K03osmChBYHIvI+amCSSVPsv+c2vcOgBcOS/+DMQ55Drg1A1wMHgJnWhVvRYICnJMkNaYh6g9/3j6HuOy8sV/Yc03GQSSRtiHRjkY/8Du3h51g0EZCbFx7UwzbDp6U0/UdFACifdAxLGLpf7SmhMiaVx332DyyCS6iPPE2A2NYr/RZ+O0mRP9KbVtAcShbQzwVlAABf54sYN/ZcmGnyZ4GWAgIKpaUjJlG3TyGWfXOTUSIa8BDNfJNCCVCmdHnD5URcyIqxY9+WtrTiAbwJPAq6BtCl45UO3LUbmqQifqSS922gGKyYUGAvoEFTpjziAryVLMsv/GHDeSWQuddsOPxFJwVZGEc4Dh6FReoo6q+aZ9FzpTNuCnUcqCNx4UmS7z/beWbFaGzjmjuY2yLCAnaaEL6heIH5oaIeRqhk6SW39jkTWEDTl5mNDtMMTfWXOi+iZO8QBKjmnBGYvxcTopTzpE8RRvZFCFGYD6lP8rFQh0QF1Buln2iwzZZMgU7nXwATkpHgxproIErHEiJVI/2m6i0heoJfiq1kFmL6KFYJTXvTvv+u+tcfeYz5pkKOsSI+0BmGRJyGfBLuXqrkK6HGzRALgAnFHbcoFrUy2tURnIWfbfW/NdV9oYS9wBwQ+qJyM8ZiLR5BwBLoDDVtDWiXjzomcxua02pwgf7s4d/YMlO9Mheewn+E6F0aogMq1V/MicQ+PpSCF5C5ZnD10VyI02blJDuCzw4Sz7/7PmRPVuBgw26wZr34GZ89irSITOL0D8BFgTkGFWk++CJ9ARUyZIg6j8ql/lP1rvEh6DdKv2IfRwV41X7S1tbISpiypYUiqP3Mj7kILux2nHqxwbXBnDWmKS/2DNSSXKX8cecx2ugZ3B+vM9Mj5BO2pGVbhRQzw3iPkk/cpUqyahMvftrq7cf7RkE27BWfmIF6xUV4Z4iglAGyDvsH/K0mGsK26Hg890asqjtGI+vWvLxTf8J2tOKkWN1Ygdbci86yQQ1G4zBWdQjyJTCQJJQwkYBh2IAw1xG+VmiFsW2f/ZGrey86O2TeMQeh3/bsUFTHUZxXESEg/KPQ4eWizX5hnt5oBO1ln9epcT+C+WbEC8Nrr6ri90sotgVceLwa9eJReIIAvia3CteJUGAx6xtFlwaiKqPUyz7H8yZOdQpDkBGCB7qHMmGi62VQUXyEtWUafikXhPjLtO7OnYBFkgqHIys9oLvMj+r5Zs8KU238Ii6bx4L6KkFDgjDQiFWTJDHTaYVNWoA7pOBdnHOuuqQRuAdvvC/ps5J6qDhaFtMP7aBKsuEWpd6FS9cyxU5UMNFwEjEE2i8nK1sQdoZqT26sUO/rM17lG7HUp1lyLWJjAjUM8hUEIrNElCRB0oSN0rxaCHQ8+xBPC2PCYoecHf//3A0sGsEPWf9blOHoG+m4x4Vv0ysESEtECjsavUXlqZXELnESPPUoWcxGEudvB/WHNCyBjRKdKpOQAwj8wnAR75EIAQHjoj4TNqswlZCfK7KiypOm24J5BcsdvX+z8t2Rgp1iVZM68T50Io5bR8pvomqgDKEs+IvDO1liQVycuHZiNO1ymW3d6W/2XNdyuKTZxSScJM0QZJZ9XOzLOgdreZbAqJLqg7VcJ0cDSE0RXmsGFd7ezJv1iyyeOy1gDUCgMLByp2LcAPbOOnnuB4TafKfiReAfTKZ4o9xbjzSng9s+z/bc0JzqkECjaEmDmZHZ296MnOgf3QY/noKQXODIGxiAk7FQfNefmquELkNcv+P5Zs7SjxhHyK1FVNi+vBbm3FugO9EYrkcmc13C7xmlqIq5IJzlRHE0q/YIj/a82JtluX4s90TpdphMMA0wpmQsSSVoxqlE7OWL1TMaxA9UoNRnFIsmtLvPP/zDkh369dKtm0txudyBosKGoNNMaAaUMe70PLV2WmyGuoUTv/51Vzb5er+1dr3NrHB7cBRmYm8MPogpu2cKihA5SnzqLigjttU6i0JQzbwJvh79r1tfi0B/5nM26oSiwaE0q6VsfEdAKh1L7jiuSFq3AtOAcMPLlFgFeDVyL4rFX1Cspod+bjhCFbTVAVOaDJnuBXG5u1XdVNmw8HbbMcVImIMB9zgqMISofrLIVK5bbFYqtuMGRnKlykBDFcNYHlqLIScrhtj/HDxJAnmbYFFLIHSrE3svaEotqyhJmdZd9ozUlQgQXyKQ4qauhULLDFQWQqd1m3OnEEmQ/063SqrNX++EiKJwN9gnyybJF90poT4HemApuMgXUMnUgSCeRKFqBTwfw6kNrB2AJem6kiFyTKoF14CudxRbPsU5ZsXiJJOh3CLCoV4xy0+2fyCqMKNRIbjDrOhIsMKqygfTa4Ox1w6tsVp3TampNCR6pUj7LizZMjgSopcclO3DLkMpiiHoBsOoTTYujLTIfndVqJX6Pws+ybrHfpikptB0EMoHUyRiVDBG9r5x8JrxGc0hFr9tq42mbqu9SOaI42pJBsapZx32zJxryRqyBOUoFS2T3WXC+ABTHTsHSwUB1YAc5XhfKUyHfaWKBz2lWzq214xpqT3mtDE4ZDGQtAB66MJ9E+Qq8MF2EVMAWOwqlyyYgXbiMkcAdnQ4i145TOWuOe1iBZnLzuMEuVto3DekHKBuWl3LS/GXWsdeioUd3GqS3y1HQdmmsZ9y2mnmhTN/4haj8L+laSe3Zedo+0La6txYxPm6M6AKBqobQ6Xq5iC9qFsYz7VmtOsE46bqACTQ42qRu1B1GVMcAgQQUcerXFkSHhSlDMwNICDjkdhoVInGXfZo27yxXVeH0bN6M104tvBWUqvqmLcjKtSsJElaKCYI3wHQ0zo3rGy9q53Rw35GTJCiE718kd8nXcMDlGnJdXK7C8FDrUZmLCe/KYrM9B1fgG0p3DYgfPmXpS6JvFVFWm0BmEMcoPVKixAu1KpZkbHX532uYYVZ2yajGQ6G2f7WpMnbfmBDWIKrnTK1Gp0jVEqtXYqCRTDtmERjSqoYEeqsKDMtM6e6MkJJn3brFVd1iyS6LsQge/gaWDthTAPhI2DZ0SDapcCopXolX7DMCvwHRXa0ebdriNu3zaY0w7iC9UhZaeUJp1OXjtcVJha4CtAHIPcRMxME0LKhzVaI1FxD+dmqru9t7eadoTAo4pi8WKKWOjg3S4KknFDQ01GUvCVNxMrwO8vN9evAThG9ADFV3wyWOtdwkRU5MDUEhXK8UCtHIKLEfWNK9Ym5+hV1Sr22u7WAMrQ2CvtLEOFSw+7XHWnIxKHBI+wfJgMJxXfKemMdDiBfwf8RRJI4xJXsLPwpyqsCeIRRlYbPGi34+3xl2RkpQz7wdB2SxXsVShA3wxPB2Zl04Mb6FjH9rvrG2tudRzxJPkYeGon2DNd9RWKtEZXd+ohBKGQ3URyUHgkp3SKCo+oeIN8jcjxIHO2gXZMeD1YqueaM1JAGrgtpQp4o1q4y6AOGBZnApmQyRpZfaKX0cQPhc22mgtgxZ1Fn6W/VKmHSSdEDOV2gC6ixLA57QYIbGAMKakolR8GCvV6Nh5QDfghgl0lIWIu/NST7LmREWOefciQ+HcIuaiUJkMbbsAR2gXGwkIbfIdoSEI6DsdGWItD7hMzNss+8nmnBQwVUHLoFU+d9peOwZmd3JoGcGEx6gUcIe1ctHAQ2LATpWqgfr18i5f2tTvsqpU0RI/SSgALgTL63CojnGy4B1MLE4eR9+XoGiWUMQNq4Y/cU+xOzf6FGvcmdoytIFsP6Cdd88kNqI1WedqRkbeSgdixqlwKEtWO0i8qGaxKfmuVtNTLdkAB1xaowKlBGEqqzSF1TmoOUbcVqYGbvC8wC00SZBiFCL12lRCEmiW/TRrTmAAiVZblZJSadgMIFuS+FMJ1S5qzwPsl06k4kDB0yQdVbts1FGKUs57ln3BXJdR2lphAnsdERhE4zkVy8BuOZ1pyNQagSkrVBWzm8ouKQcLasGELuO+aNqTqEB3ABqoMK/OGpAqV9WuwalsHzlicotOVcbBXpCgOqEErisEVbCMs+y7TNkq+QKh+0AJQwSrJdWIF63IPmpLZoT3GlVwIdNxjVadNFQvD3YpL3b1T+4232XbaP//dC5admuExQeTE9eIoSAYAuTooDQWS6yPSlFHwJJ2pwJoFh28x8RVOlegRAngSkUS1a1L2YtyOkYWvI6S5jr6qT2cYj+JglT0ViVAhh1Hfa8lm0hUtgGyW5Vh+L7Tpn5Vmc9QeLjlXD1/q2IsVT9JW1hx/hgwXJ+ykbPspxuyYebIZeG4ZbDEpZDpU+IBCg2oWsBNs+75R67ClFOTiB7Xo0rQ2uLWLRj5GeaaZ1KdCrNMyZtepwFGx0PgbrTPWVs40BsVjg8V6lENatjBSEZlSprFDj7TxGzEGGqhgI3FXGX6e/9A5b6sDtxUtya7PQoZTbt7SRaSpuJOMKz1gk+eZc23R5dgWmB1K8wI8Y221at8BniFTAyyndJsTH2nWiidsvmlgnC887CrC/oylmyWDZnQQQdeG3yO0pIKocQwNoGHgIqBwZZx1/72oMoZ2k85gsGINnY1us3YtdRpOdgtXiektpq5Y/rRHkYIjaA8jGihnEC40Wa6XIF9Ueo8L6928Q3Ptt4lN48EpLKyrBSvQshdIJmhjClPBJ8k1wyXT6ohRrEQAG+8G7EOdMUy3y9njVuLUDCdhT5AcLGohXS0JQCj+MBO06pw8m5OVeKBQkUOIsTM5DLys+yXN30xYSVsiMC75kSEfJANJUjRnvJakAqci+bBgrTanExmntuQIyP7s8h+BTOe53uDyvk3OpfnyYd2Olaiym6taFMiJxW4xZdWPSgO59eoC2YGCMfM7Gp0W3MCblBOIS9Q6rzTOWUl9aPOVRPCqzoYdDdkELkF9cqFp3KaK0IsIu7dXovcjElUQBRQQr4d3iQGnVOOlW7nBXWCWuzqYC3xmxYlLAVsBf4B2iPkO+6xMPEJCZBOJxBURArvPhBINOoMjC3BYWZqbahNSuoWNG0eAziKd9f2Dr+rH1ua+q3j0INgTkkCXYsTrdOxSEgq8H6n2sDkOiDjomrSY/90dJknHXX0YfFplTUnaJ7ScRHQi3sgT9RD6ihTKdevZkexUDHahnAZErFSLnCoVbypzbXtepbtzDXPooMxVv2vRtT8VCUESNaorxK5HIgB8jshjzo0gYnMWL6FSqwB9ssd71Ob/AkBfBCbWKsEmTbXAbdxbgR9QoaN+lmQZMXusORHXuZU1BJbwOXFjltvLNnaPKYCzip3BetKMq3Dy6vphkqnBSUACD+ZMoZNJgkOFpUqdKJPbV+XcXszBiRDNKhuGVmsAcANMdiM2hysBtVKPhAKijd1yuZqH1Guzf/qj1uSqV90sLXmG68qdAr50qh0FPGCDi1h/AnbVKRIJQhxn6o7qkbVmWqBaENA2Wq7xSL7FQ/Rb+IWNA7qmKkkoFH6S2W7ilZVxlF13U1lL1SlQ3vPS4JaIjltS10wxCuZvCbJCiI17EXoVO8WX9UqyxCEZNFs2AhtAwgtuXk1cmnJn6u4Ez/EMQuGeGVLNtgRDBNYGy2agocTjUcaHnCNlSb7krfeq4KBNv5WQScWsN3ahDqM+a4+23NMW6Xy0wMrs1TNFK1psjfwTNpRoeIoBGf1A+WtA//PWyS2VYm4Vlm9XU30V7FkEyOoWQBekDxDOZQ8q9IggpW5jmCL4nGwVOSNMd4qzyqDBa7n1We7vkGvauogxC7EDwlAQmpyAdMZoUZ570bn30iWoCRwZThJkuzAboAEmCiKNmt3tTvvs8bNWtQ5toEgc2SSs0I9bZAEHml00CboXJKq1fK3UefWfKaG55BYocRazbJfzfTFhM68FZ3+BUlkZBSzqVo3CTpxg7FTIblOnga8BgusUn+EgVOvVDIbs+xXtzk8gmlSQ2Sb2qi2YYMSLWhjQ/6TmILUPwSIDmc6HdMttc1iaNShJNP5hFn2a1iy26kyRIBnq9RegxSsTtrggVtl64lSpgIA2iCB4mg/r5jClmkk0Ch28fxrmtwMlC7mW51nRx0MxO322oPHula2RQ0+VLSWTKliVh1t1lFx8ioBvNkt3ONrmTZ2qshL8pCArazaoIKFkAIKJAttEVUnbejZfNrUNXK1a3RWqNJBq1U9vNc2Y1e4r1FLQuXzFAxgz3vRsCps76cEuHZbVW5qq92rjw7oVPYBSmiXi36uNW4wDXkJTAcoodP2W6ytIx8HtMXUaVe8j1MAJUpCOVfVpoHlIk+HdV7m5HXMmIQRj6p0hpdBhWEfQKyZDj14lYSA8+DllX1QOS7VHyyFeUoCRuWSdn7neSb3SO5axyCbcSQ/VetIE2lH/HE5QKNge7tRBY2dkg7qaF5PZ9h4t2Rlx12P4te1+So1x4Hh51WO2mpWqzULMKGCo1KwnSnFXwJJAS8CdPmgkpwBxKyM+yz79axxV2pJpUPQuKsqakeEdg36mhfH85Q66auuBz3Rk0oOwGMH1q/KWZGa3e21eH0TQ8B5kdnHf03HqHXYFViivurgnk7lwHuVDCtLMldqqqHjSEHRiupI785fvoElW762B18W8KzqQAJw6pUwGwkMGp3ZJ8OqfgKttgCSTYe+EzuuzoSkIRY9eUPTxvop4elVpokheR1QHoimSPQWwECwC6EEiFYeGj2FH291kKOBUFbr6Fn2G1nvEq0jvwNcz722aXSiNFgp2dRsDMIbHyeCvFeVNqKqQTX7tTWy9Dqbs+jJ8605UX4EVpqwHRQCVguwBTqvrdo5vK0CIKTAHkZYW7/bakrQKtrolZJZOOo3NucbGmqo0BKoRemWDo4yFZl6GAITIQ16pbgd/hQ+QqW1SzWhwznzzV2O8U2sOSEGxBQDY1oV4teWR9WMbUkjgVfVLkxtq1CPulY5apJY+PomTM3L8n6Hq97U9MUqENCpSxp+hMxwn+lwKr54hBbtVI6mwkD5uldh8Fq5NG22yHUasRl2XMGbmfoNt6EWj4NCQdGvdQ0ZEfFCItgh9LQ5Amq5bpRZxsQLd6qBoM7Y7Po0vcC0g2HQZtpeZ7/JwLEo1KZgKtainU/a08qjFWVNlCOKELKDhca1eU6gv8zJm5s6WIxiiYkEnTbvw9c32oswqCmTjyINVdGgVQcdCPCavBJeBPMN6YzrW+bkLUxOqSG5ryI5KJfsH6E6CJiZZGhFLbkQICTNdX6x0DuFl1D1eQATAe/iL9/SWpdkmqq8V+EbKAaPKdUss1AykaiB2dKsMC84Uh0+xAzI9BAEqJnSDiO/lRnP42zxZY2qZmuH9qCD22Rxeh1QYX6Us+zEpfhRO4bJ80JMkDqtggpFLPbkrU0cC7ZTQcBy0MGWSvkpWGmV0lUltkEtiEFEZKVIcmvrrOM9FFOFd0KVHa/5NqYOxiC7ydhVF5DwH/BNONvnvK5C2SmizcpHuX1CYSg+kjXiweHMyCIt435b06e1ekxVXGYF5kIkue6R9TJ7al+M9nlyd6wBUv7ap4voODkROKJdjW4bDxJ4qbSyyllkdT+FUWodCRVDCKWT+4TzbaF9PuhLMb0IFRn2QVTtLPvtTc7U6UwVdpY3owBKBR/hIsjDw3wL7oPrC5X3ggIGCXA/9BoiAagCMbeM+x1MfpDkBRE9ycBMVWm1ZZC3CuaOmY5NQhwB2gZyvFL0QssKgFUECC4ofrfIfkeTR2YylXTG9sB8FZkIXYY9gJFHUT+sSR1DxAREtf4hSxvV9ocss4pMLfg7mHMCjTzk2rihds06X9kpO6kaSxCMBJNVP+2bI/uInuq8Wq4iKK0KhsVdPaXOxBA9dwcCE21oi5WD6u5VDMCRch5VmB8j64hNdFyCTFSv0mStSkTUI45jV6Pb5Kvg5qAz1dujJ0qF51d5WJAwCoESoeHKJisUVDeGCtzMdNQOnYzDqg5Ub+LvIMayG9TnEr6OlDrRNY4FT0Y+EE3MCoxtp+rZhT5wKuiVqWB/rcMTs+zBmpNGOXhy+r1ct3hIHU3RBnPtfSII0p4t3m1QXThlzkEayusBwaeOlbPs0fTFYmOHXG9K9CK+VhVSPeASgrkULAGOazMNKaNR5YHJXAUPxQJVNuxw1TuZ8z1VU5hOPPdgKNksPIQrVMgi04afAl6MGFEkBDE4wAckK3+kfPVu3O9syR50jBvEOmA264l94E3iFbTdE3JABdRI4rLKRa0oooREhACHSCiFLmbZ72L6NM2GmkBlrXYkE7RBHhHZqEyRCtgzrUTwHXF3RYpGbWALFZJVtR4i5SUGfFfTDqorjtaMmufBLJWq2T5qf+ygDlwgb0ItaAKIJ5JsEx/R6ADUqNB2V2f43cxYClSmykBa0TAnsL0qJz6UQipZNR1sVUVq1Rmuya2pIwT87BicKsLszsH8O9OeANAYaUVOCEg2QU8VqVGl8VLyaqFnADqcoyN067RNgsgB4kAxwYIH392SHaYj8y50gGQYJFi8WqfbdDiN3AkrHfMK+YbbrQcoCZU+kwFCXTsx+7Ps9zA5PMCfRw0L5TuxROiEmnABlFWySLX2Rg8sVxVsojX1AtFOfJgLtYTrFgzxniZGBqCiXhg8p0MOxEn1A/txCFS1SVObCHwjZFdHDAxmEPc5qMDvAI5exv1eJh/bKBs36nQu+ReATdN1vSpECP/oqC4wrRG1IrIe2KWCI1h1N4ykeHe+4b1NHoK5hDZvYDB1GE8kXpnDO7RiMsR9YDtUMpDJ9Y3SrTgFwV2As1Kas+z3MTEyXLHwghtL9Yck3IYhJnACPJOFUo5n0FYJVih2noWjPUU5DLb6mTa7uOF9TWyvrnROp1/gzIGcKrpfwprggVHgWvkYpyPvnvyZKkLCuLUg81LFivLdnpz3M20sqBQWTZqRTzVd1Uig0AlMtSkfO6+mpoooKuIRElf4ZfUiVYFq7VKcZb+/+S51VJQEvdrilGrUknXtdIQMVoK7ofZDrdzXqH6g2oYMigGsqHAwpmqZ7w8wfbGaKMEq5sJK5G+0c7ebMmc6XK2zi7k2RHmZEx0AJpsv7kPntcgGL5jtA61xu1yn/cUGRBIl6uTA7MJt5CpWRPTaK6cB8m9BjKpE06o1YKbUAGHErk/qB1njVjeFTI1rvLYQkMBpyIbqBFxNvm+E9CSaVfvrstfpnaERnOJN4oMy7PcS73ywpYO8JB0k6rT/yKndE1LJ2ebK8dSlyp+T0FSjw1bZDsyKymiQGNDO1G6HBz/ExMi1csWNHK/am4BJyH1BTtVOoRrYqhJwa1ShXtyv2tphYpyO0GMEFvz9oWbckKvWEdlyFgoZrT5TM7PI4icDBSiDmSJIGFQjlCnSoe5Ge4yVJxlJuy/j/jATa5aqd0NEhjfx6sHd1lNLDHUPg/FuVYGV/yHGcnotozbk4AiBeuogttjBDzc50169iFjIUC8Ko0lgO1gukiPEgXhzdVrKtMe0aCLqqK4uVaXqU61OGy/j/ggTQxBxk8HVXix4eR2l0Tl9r76rFfRPmJYt2ZEMipkEWs9tfY3DKcQM73r4faRtq0iN8H7Akzo7GEfieJXF8yr4XEOMEkcO2l0FcxqCGmurMFYmngK7stiT+y3ZQZlVp7CXda2tT9pLquLrtY746tiVyhQRFdU62o1v4Ad3BlvVqW7JLPujrDmBUSSDU5JnHbR/mIAQghFcBb/opv1haDJ2NzInqGUt+kE9WTv8NiZsWfMfbfr5Vj0BvThpZeFBb6xG7CGQW6GyOh+QhIG3Vk1t3rm61MJuwNOo9ugyJx9jyda5TQh4Bgh+ILZUhVQYMLJnmZpRkyCO4qvdVOO4ULtMVgPcD64Q17DMycdac6JDZKNagqqKWq62KpjOEiRBgFepf4u2E8OCqNGgjlORlCKAqfQf1n2xVR9n2ipYOu0X13mMVttt1QcLMgJuFiCbaf+SjuMzXkI+goygY+naUidWbJfz+nhr3L1aQiiQJgiBOVISFoqwF42sqgJKV8Ep9erpnKlRfaNC8o3KdGGydjUcPsHEyOKjZDR0Qpw76Lg5q6jO5NjIhPpORVfALfC0ZO9YqzpA3et4fbbay/+JZpyGWpBTaVWSRH1YvfhAkuP4Ra+6+uQu5Eux2V5t1lWlIJAsKWUT2l2fvU86xA4OTCNQ84GOBOR2OqHfUt2xdMpTdlUbOyqpnjZd6CBEBWE5bciaZX+yJZvUJCAKIqCASVHZxwaHqJMq8HoIU1+pnhBUxcSwa5hI3jN2oVaTPXLis+xPMWNAXEkG3s61o0U5bXSPSc9FCoyVgymLETek7L9qODAj2tDRK6OuGvuz7E814zTBVDgegAHBGvPYwcLUvbr6acNZjXeWb27ULLScjh0pj5VBP2qPx4IHP8203wTY5LF02MdjNohy8ASImYreYXq1C4jJUoE5eVMdPymktsRJdbvbz/bpph0kw6JWj9o8pdaFWpfEfADOCBSG62wudYjxhY70eog39TdUlc8w7PY6f4al30SVeHM8MIEYCTmgDwupULtA1Bz3oILC5Ba6TIdp1eQZADRxBz101K5W6mfacRopIMy+9IuVAgk7To1e1NVddaeUilVvZG2vGmBMVb8Pz4q9xLyHRfZnmb5YfWxzvBa5uSGqXnPXgcWUedGf0AWkzYjctBDJUDe8CdE0KqoLYtnV/7bmu4EsI+KrFSuorreKfI3qfAuKU73vQl0s2kr9pzAj3L/QtreIr65JGS968jmmb2AuhLS9Nj4VKkcS1UxqwAWzhghr6kLHH2o9D94Arh0TP0K0kS9udmfIPte0sfl0/hHj1OsAeignIkhnOVEONSQBASiuEm6EFlOpG3WbVBqYLMeCBz/PxmyZmgr22hSaqeFyEIOeaYO86r8pY68td9L8nPU0qP0TCBfuCfO5w1Wfb+KThsXeq5kC4NLp2DjhB0FZmPq69SV0EpgOW0m4OZIt0YFgbUxt1b6yXuKGL7DXDghp2qXVtWqEAZdStmLzCQkJGDK1kJxOklVe1dujtoprXw3RP5m7RfYXmjZWx/rAHMPUHbRR+YKgguSqfVKoDh7RJnTT5MF4o422t4+qWa9T+8WCB7/IxvZqGC1KVmck+6nacq1unw3PAaBv+LjSeTLxy2qUoVKzSh7m6qy06PcXm3FaDbE4dREQPaKq6E6bpCOhQwE0AVCon+ugso1R/SqDeiOxaBsdS3eLnnyJqScqfgUUy2owSqfyfYNKcOjAjcfHyFsyZNWdIDcYnC87yB+VjuB1V7szCF9q2liWDITroFeV6eQfc4QvbHQgHxuKEfHaE5Cr0ERdg7+UF1fXnE7duheu4MvMNa+zlupL3GlTNrxVpbxX6IlNC1VTmBo6qMZIUEexVu05BnFEkFlM3+Ivv9zSb0gcFdaCYMwIcIS+W3V9w1FiQwBsZCkryEi9Ruwiv1VR3HYq7K3OsrPsrzC5Gd+odyls9rSvSSGeguxau02Zf6d9eKynRlsCSNiBzwlzK5URa8lCLPr9ldZ8wz6AVl2nnltkgyCe4SG0L2o6O+VGWVnl2gS3YzEVfxpYk7zsQQholv1Vpt/pmqIIrGbtAO/BEoF1iOlWtUodJtbRHcB+P50u69QnD3MAbw81Uq5qHn21yT0SJdY6r8KQRTlCEvD+iBVYiSxEcsONCpeAD6GQ+VgJUdVJCvB4cacnX2Pyg6yxTDWByik1gvmrBD6iejdoPlRyQm6yVTF5piZXAmJK1mAay0VPvtbEsVF1WTrtfIuEqKo+pNrbKnkH/0E2sNG+XD8FCmo2PJKrQp9q7c5dnfv/OtPGYrIztWOKBGxiu2T7O51OaVQBlIF6nREadDibRArcI+gkI5SvtIVs0ZMXmhwe/lF0NG7NqUxQDps0yhqhB76anJGqYrJ6S1UZ1suZGgd78Wa7mtFfb9oqnV3UiXAUrdNeIlV5ZOUT0CqPp0ZP/VRuPJRTHMTtSpmSoB2Bu3zDN5hYEySAMpdBcYeqwEdF953qG4IByZ2oSQeEKeinCZDT0OykMpRnJwe768XxjSb2gbiHL1UfylbnloOYYqdE4HTsPYaKcBnbqH4n4jxVoxRLjK1R24nFfn+TKZvhVtoop8NyhdoZlo3achBVql2JGqIKMKtJNKGTSrEEtXGqcpnvnT35ZntOnLoDRZ1WynQkwKuKYquUZoHa9NqezoxrF5HK/REtYM4jU6hNIrueLd9icqYjqQ+S/Ewl2KlnzcB+OR14gTVSMQFIKZWJUKd1aJA8tCByr7YMGaZoGfe3mhxeBKiqj57q6Cn1AcvJss+0t4OcGZqvYgjw0+pn4XRsRUVKvdqq6YFn2d9mxoCtirTDFhDXqMtmpTJJsOGDTilqhRY6RepxeqqIlmNforo+Fjo8nu/W5bebGKIH2AC8e51OJROnUB2NVBPqqh9JzGCoVIsfhKbexlFDUB8XHbUDPM6yv8PkZrhSfV7IaGRq86l23RnrJlciitWHe1All6j7i0bRcSev/ayddtMta+c7Ta6AbBHJ4qpS/KFEY+8hGFFGL7PYYa1z7VlW9Nmq6g1EUNU2hbrYdH4Xz3+XaasGnhm6AJcAp64OqwQn2h8xaAPXdDILS1XoICYJUmY9V6SsyrjqjbTg7++2ZLNEYPthLNWMoFGRflE/KricRwg7bWLRqTFtYVM6Ct5X5RI7r+ouq7j4e8x3+UB4PsqMerHaaK92rap6JdgZrk4eDzoyqJ0FCj8oU699bxiKcRn395r4BNKlUZl/5b1GNW8Q8wA0VlsfIkEyakAqLhi0IQj+sJcZczh5BrAb9/dZc5JPe5AI/1SdzXfwV4RkRKaCrA0AgwgQxEpyVrvdem2xAcroFLy6D+56QH2/iSG0WdexAF2ljBwOolElSR26wuIpF68UtHZDtdryEnTkqB5doeA77nLRP2D6HZQBh4U9UQE8phDQoIBYNa3biXAI2mNFqBrB0EEsjmg5nYQj1ljiyx+0xq3in4SOsFy18iAq9wv9j6mSBVTXwKANhaRb4IW0dEd4BHhTbYzP292+mR8y9URhKy+O/1Bcr6rqaIgOcpJZxRERRMIXDwqEuXEFLCbUctOpBYLQxVb9sImrcrX3jVVdKlM/lFFJDYzIwHSKcSQhFhuVJ8Kw41h7ARbtqVUZVPLos+wfseZEfai8GgSRKsFyti2EjFcte3VEGRyqwiQoo60jyE3pvYp6Et2xcOthV5f/R01chbdSZ0eIF/VT0JkrlnV05PgIdsCVVavCQcMDJ9BJBTg0pa0rnZaqdrjqx8w1r46iZIZ1iLtW8xHtoIlqedurWDzkMkqkA/CgP3UwJvdFQgqOkIfA/Myyf9z0Db2qxkEJaPOUKhOXRMXwKUQdOr7o2gpgRMqhVDJigKSu1G8EXlhtuXZ1b3/C5NkanRHo1Hq6VmOJTJltkcrq7tHqOAYGVSXmVJQRniwO2vQYtV0RMnVZOz9pyQbyDp0qIbsiJ7IZnTobkWfsYcXVcVTx/qgmoQS52oQQtW19alVbde1uv+ZPmb4ByhUenkUHSobuIOfFGgGWYNSjyDTtkVENKBLpXNuoNoVX4yUo5mzXz+unrXEX6tqTicrUgTYIPSiOQTvlsUsq+y1Q0jjFOcV0+kFbmhjMVEg57vINP2OOOwPwadPtMBWJH8KImS5ESYrxFm83oJiEKUL/UUsXWi4vVFREvdNn2T9r6bfS+yrL1kOJtVhZ32v3ANa8nwrKqdU82gdkddM2M+FkUGEJwMOf7jDEz5mcUl3oJGvZqOG3TlHnapaqokG4T4DrA1VfYRxGlYYigADNEeoTo6E6/cLb/7xtv9XEcOAOOsKjhpG9uqEDgmCOu6ltpJLajYrI6TSQr1QLhKhB4ffuXN0vmLaK/DvZOsImMn4MHUSmPSYRCrjXoXxCTW2uBmUBNusoGE3GRJnI0cddD79fNGPuRsyGcqgqD4m790RlKkYBZaMmk/AFqnarIllCVSg4mq5OrUrb73zDL5n+kkUG11o6NUKA7IeYJp1V65TiUOoAyKiqqb3KQ5QKPZntrNKOPFUF3dVt+WVLv9Wi0GlbuSqJOHUxBsjDGmo3NoirHxWH60wJTgZEVWuLNuHO2Had3PQs+1fsuBh9woPAUhJQkqQbppKXqrUHMIOCqBvyvkwZHsGrKP8DbW9K4ax2l9/5VUtPnLrxQhXUWC0VR9cREtX6QTviEFXielAoB4cFYQsP8cDJPd6jJ722Ow/4a7YO9oQB6n6i0iNlqZZBzukgkBq0EBxX2phSq7mPDguhj6XqpmJeQCm73P+vm7K1e3lULwaVuoa1a1RSAqdcaYswkLXFVLnOK10F/02mJ6hylvg2skEL9vkNM57XRrmuEfenFoPa1FJoKwt2HT+nfThqSo89UVeLlriQ8BLZOBDA+Q6z/abJD04HCInVceu8ThWwVznHfJpc30xHvoZKlVhH1W4f1XmdNVuMquq222vxWza2154WHZ0hWOt0fFuljsbG+1xp9EENJ3IV+5oo9Wrim8ja437Efixx2m9b+q1KLNAAmYrs6ViGOpnh36LOCeUZCgMRTF6eEUOTNUx228ix5lDkOlI2y/4dU7+96tAS5zB04vpx0JY/p9NHmdKCUCu5WuXl2lzVs2BzvfAqUxHZYcX7/K4le1Qb8bHRuMiJErSCw1XoHoJK3YSVAmhVmAOA0ataeVmp/SUsMnja787P/541J+rZMWXLnNZHpdOVpLK0s68Jray6ApIuoEe8aNFIGBOSXioM51dnJH/fXJfqWA2UF8gM6lil4iOqoquWGDhOoI/HbKkirZ82xateIVYBqwWKWfz8H5g8RK8qW9gigKxIBhGDcSq/OpIRFEnPY4yqH6E+RDCsxMW8iqrwSmYsOPYPTWwPSd6LMy2lzWrjB85reAK1tXdRTe9qAMzUjdmRu4wK0kmaqEhCs+NP/sjEgyw9gUgmhXc4qBKhNk67rszVC13bVXW4001VFbUHCCyu8j463YTrn2X/sTUnPBepxR56lYBKbYCZb1WRLcQUe/VEUY6gCQAqr21VUNWF0BFJGfF9s+w/MfFg26qmv5ItoKo6ohuBSDhTMT8dXlbNGUglwU0H/vQYKe2KIhLAp+xyGX9qzsm0GUTtH0Z1FlbVaTdtkGhGbQtTgyASbKO6biGsnmo+dHIOrNa2XGLXPzPXfK5yGVHl48josLBrHSeuEB+cg/oYnex7RF/Ir2NldcoLlkbndwvw5iz7z00b26pNxqjeW7xK9ZcevbrLj+rMWIIv1KuBwFYMtTYeodcw2rlOvRJQLO/yL2xbpU0PIta0H0snulFuNc3VTmknvqdQ718sSQtVQZ5x7FTm2ckchB2v+ZcmhoD+KrUdu4DQ7pl7eFFyR6O4TRSoI8QkOYC5iTCChC7AdVRES1Q1R3f1v03eZ9qLpdbwLHywLLoCJlc0T9a0JX9UKb3b6gw/ALRoovo3OZUYJi2429f715ZsX6uYnsf4+65Q46hCKwPXQI5haBENPat2OTway6kThRLUPHDAghe7/vN/Y9pYMjngpwc29LqJb4Njq9WyDoUXouXu2tmDOVAOnLACJVXLQ+DHrub/35p2sNTRytJPT9+E6ZAe5JW6a3baaKGzheqbVZcYcsJlEaAqWT0Qma5q0/6dyVflqhupI15qg6U9gao7G0Qm4dV4Dt4Dae5Or3zEqQ0YrVLZI5JMjetuuyT7RSvZ81/n+/77E7vf37h+Hw/mByU8sbnfwSX569+t7392M9ak48myqdTE+n7zeLbzc8OlP+e5+/sTV471vPHZ+tnWn63v8/fGfSxZZxLKOptQ1i0JZd2aUNbtCWWdSyjrfEJZdySUlVJXH5NQ1p0JZT02oazHJZT1+ISynpBQ1hMTynqphLJS6uqTEsp6ckJZL51Q1lMSynpqQllPSyjrQkJZFxPKSqmrdyWUdXdCWfcklHVvQllPTyjrGQllPTOhrGcllJVSV18moayXTSjr2QllvVxCWS+fUNYrJJSVJZSVJ5SVUleLhLLKhLKqhLJcQll1QllNQlk+oaw2oayUuvqKCWW9UkJZr5xQ1nMSynqVhLJeNaGs+xLKerWEslLq6qsnlPUaCWW9ZkJZr5VQ1msnlPXchLJeJ6Gs5yWUlVJXXzehrNdLKOv1E8p6g4Sy3jChrDdKKOv5CWW9cUJZKXX1TRLKetOEst4soawXJJT15gllvUVCWW+ZUNZbJZSVUlffOqGst0ko620Tynq7hLLePqGsd0go6x0TygoJZaXU1S6hrJhQVp9Q1pBQ1phQ1jsnlPUuCWW9a0JZKXX13RLK+ncJZb17QlnvkVDWeyaU9V4JZb13Qlnvk1BWSl1934Sy3i+hrPdPKOsDEsr6wISyPiihrA9OKOtDEspKqasfmlDWhyWU9eEJZX1EQlkfmVDW/QllfVRCWR+dUFZKXf2YhLI+NqGsj0so6+MTyvqEhLI+MaGsT0oo65MTykqpq5+SUNanJpT1aQllfXpCWZ+RUNZnJpT1WQllfXZCWSl19XMSyvrchLI+L6Gsz08o6wsSyvrChLK+KKGsL04oK6WufklCWV+aUNaXJZT15QllfUVCWV+ZUNZXJZT11QllpdTVr0ko62sTyvq6hLJemFDW1yeU9Q0JZX1jQlnflFBWSl395oSyviWhrG9NKOvbEsr69oSyviOhrO9MKOu7EspKqavfnVDW9ySU9b0JZX1fQlnfn1DWDySU9YMJZf1QQlkpdfWHE8r6kYSyfjShrB9LKOvHE8r6iYSyfjKhrJ9KKCulrv50Qlk/k1DWzyaU9XMJZf18Qlm/kFDWLyaU9UsJZaXU1V9OKOtXEsr61YSyfi2hrF9PKOs3Esr6zYSyfiuhrJS6+tsJZf1OQlm/m1DW7yWU9fsJZf1BQll/mFDWHyWUlVJX/zihrD9JKOtPE8r6s4Sy/jyhrL9IKOsvE8r6q4SyUurqXyeU9TcJZf1tQll/l1DWixLK+vcJZf19Qln/kFBWSl39/xLK+seEsv5DQln/MaGs/5RQ1n9OKOu/JJT1TwllpdTV/5pQ1n9LKOufE8r67wll/Y+Esv5nQln/K6Gsf0koK6Wu/u+Esv5PQln/N6Gs/5dQ1r8mlHVwIp2sEwll3ZBQVkpdvTHhuE4mlHUqoazTCWXdlFDWzQllnUko6+x1qqu3JBzXrQll3ZZQ1u0JZZ1LKOt8Qll3JJT1mOtUV+9MOK7HJpT1uISyHp9Q1hMSynpiQlkvlVDWk65TXX1ywnG9dEJZT0ko66kJZT0toawLCWVdTCjrrutUV+9OOK57Esq6N6GspyeU9YyEsp6ZUNazEsp6metUV1824bienVDWyyWU9fIJZb1CQllZQll5QlnFdaqrZcJxVQlluYSy6oSymoSyfEJZbUJZr3id6uorJRzXKyeU9ZyEsl4loaxXTSjrvoSyXi2hrFe/TnX1NRKO6zUTynqthLJeO6Gs5yaU9ToJZT0voazXvU519fUSjuv1E8p6g4Sy3jChrDdKKOv5CWW9cUJZb3Kd6uqbJhzXmyWU9YKEst48oay3SCjrLRPKequEst76OtXVt0k4rrdNKOvtEsp6+4Sy3iGhrHdMKCsklNVdp7oaE46rTyhrSChrTCjrnRLKeueEst4loax3vU519d0SjuvfJZT17gllvUdCWe+ZUNZ7JZT13gllvc91qqvvm3Bc75dQ1vsnlPUBCWV9YEJZH5RQ1gcnlPUh16mufmjCcX1YQlkfnlDWRySU9ZEJZd2fUNZHJZT10deprn5MwnF9bEJZH5dQ1scnlPUJCWV9YkJZn5RQ1idfp7r6KQnH9akJZX1aQlmfnlDWZySU9ZkJZX1WQlmffZ3q6uckHNfnJpT1eQllfX5CWV+QUNYXJpT1RQllffF1qqtfknBcX5pQ1pcllPXlCWV9RUJZX5lQ1lcllPXV16mufk3CcX1tQllfl1DWCxPK+vqEsr4hoaxvTCjrm65TXf3mhOP6loSyvjWhrG9LKOvbE8r6joSyvjOhrO+6TnX1uxOO63sSyvrehLK+L6Gs708o6wcSyvrBhLJ+6DrV1R9OOK4fSSjrRxPK+rGEsn48oayfSCjrJxPK+qnrVFd/OuG4fiahrJ9NKOvnEsr6+YSyfiGhrF9MKOuXrlNd/eWE4/qVhLJ+NaGsX0so69cTyvqNhLJ+M6Gs37pOdfW3E47rdxLK+t2Esn4voazfTyjrDxLK+sOEsv7oOtXVP044rj9JKOtPE8r6s4Sy/jyhrL9IKOsvE8r6q+tUV/864bj+JqGsv00o6+8Syjp5kE7WqYSyTieUddOlz84cXK5v+rnv0p/Zg/y57eDy+Zzvvb7ven5uTHfv+VjzwWo6LltTB5v7nz248t0nHE9+YnO/eTzb+Znf2Tx3p42xnjc+29qL08Z9Thv3eaTLmud5/V5OHPLnwcGVOmTdZ63TJzf3OZnwPltd1c+5A9tW6GdeczdtvnffpX9nD/JnvteZS/JOHuzey/qep1fPs75+/Xf9nNr87t1ufuBP/fGEc5c/37XqwgljPLcZ39vO3Znjmbsj26v5/mcPbJ2+L8148u27vNq8znN31hjreeOz7Vo+a9znrHGfR7qseX2v9XB+H2cO+d59l/6dPcif+TluuSTvpPEc67HdsLl+/Xf9nNr87qP3rG9LD8/smbvTxnisNXyQbn7yM8bzJpS/4KlbV8+9tU+3r36f7t0X+VHt03z/s5uxHpd9un0znu38bO3TOWOs543P1jqy/mx9n3PGfSxZtySUdb2O61FZj8p6VNajsh6V9aisR2U9smWdM2RvY5Tjwam7GGUe1zpGud0Y6w3Gc6yf99Tmd7+5J0a5xZi7W/bM3WljPFYMkXJ+zhjPm1B+M8s/v3ruRLKX+OqO4xm7m+U/5njkL+O/M/3cVLPsx67GfuIgvd487njkl7P8xx+P/GXun3As77Ze5v+JxyI/X+S/1LHMTxln+U86lvEXy/w/+XjkL/r50scz/+0s/ynHIj9b5D/1OOQX+fJ+n3Ys43du5lduWMmffZj83Ituvlxv53zAqYOdr1x/99zq8/X1M7kjmf9wSea5ldz5+9s8yw0beSc287D+bL72v9+yu9d/3NxrPdY533Nuc+/1dS+p3MvMwx6We5nHdsPm+vXf13Mx/+6f9+Ce9Vzvy2meN+buJZUfmz87d3Dlc2/f0UONTc+unudasOlMDlrv6FpzDzcY47nt4Mq1s17jJ89cfs/1mrvR+O4dm+eYr//r1bq76ZJMa91tY4qHem3dsJrLa1lbt+15bzesvnej8bt9McWW+17P/YwTdf0de97bCeO7j9t8Pl//gtV7e+ye9zavy3N7xny9vNNtrvqo7/TJe97pteaqLZ3fl6t+ce3lUXVnvebvSrTmX2OlO/ceYc3vs/FXG/OzEo352asxP/sRru/lQ6jvx5z3PvLejPn+L6m9GWePOK/z3FkY47zx2XbfgpVjvd24zyNd1nYPzPy59efBwdFs8lqnt2vhMPv2vI19m793VPu22ICVfXv9PfZtq0tHtclrDPL8a8QgL7X5fL7+fc/uZL7pmcvvvcZNW9txTGv1yLZjvv/Zgyvn9zhsh2WTLVw5z53lI84f2D5r/vv6s/V9bjLu80iXdbX10e9Z09b62GL0+fo/PLOT+U4PE8xyiXo4Mma5efXZ/Pf1XMy/e49HCEZ//0R49+dXuvNBDxKj/1vWq/uvAyx88/HM3ZH92Xz/lxQWvvmI8zrP3RljrOeNz7a2/lr3oT5SZd22+ff8ufXnwcHRbN/6mqNi4c9PhIW/bGX7vmhj+9bfn8do2b4Tm89OGZ9J/px3sM4ArZ/tKzbPZuVUTu95tvn6r1s921cfMl8HB/Z8zbly6z2cXo318zdztg9PWfpn4an5eisO3u6TXd97bRvPHkHWDXvufatxvRWznTPGdesRZN2259779j5b916P6/bNZ+vvzdddL/mQW1fPv75+/Xf9bPMh37vHD9+6Z+7me+nHisO3783aM2XlVubrzxvXn9tcc3Bgv5v1d9f3mefG0q+DgyvX1WHrYNa3G+/ffbY+K6qfk6vPUmILjedJ53bjWI9RP6dW9z1sra6vv9a1urXP63nfnmVa26ybNzKseHBth7c2c/3Z/N21fd+HsU8cXPncR7Fblo3dPsf63mt7fZge3WBce9Pm2u3ZoMMw9dXkznIsfV3HEfo5ufrsuPV1/bxbfT0uv2bZqC2mtXTsxMGVenKtPn7+7jrOtHRmyyfcbIznJXV+bV7Xh51f2+rd2g6sbcipze/+Yo+/sdanZassjmi+zrKJJw75c77P9nfb+1jv4Wq480WJcGdYcbX/sEd3trp80hjzv2W9+qdj1iuL+zixmasTxjNY37tjI8PyhU8zxrCdw9OHXL/WtfX1/7Kao2xjkw/T4/+z0eObV7KPosfz9c9d6fG/PsJt4OlLQo5LV6252/KGx3TmdJm72425u3XP3K1jmduNuZt/d3vCubvBGM9x+48tx3bYunvc2YPLnm3Wu6Ouu/n6p6zW3RMv/d3ilff5jy2O3nKq83/zvx+/ecYThqx1vsaqi7Cei6dt5uJWYy7O7pmL+fp7V3Nx1yHze3Bw7fHI2dVYH7eZY0vn53taMbEVX8/XXy0m3nIZ6zV1/giy9uHsO43r1zLPbu69HtedR5C1j8N5rHH9nXvuvR7XYzefrb83X2edCzkOmzife1jbxMca83TD5vr13/VzavM7t8cm3rln7uZ7HRzs1v15YzwnjDFsdWAta77+pYzr18+01df1/dbfXd/H4rfu3Fx7bvNvax1YMfG89h6KmPgyn7e672Fr1dp3c9S1us09ruf93Oaztc26fXOfq3FFW5tp8YNr+27hlpNHuOc+PisF/7vv3lYudHvv04dcv/Zj6+vfaLWes3O2zFOHPM8TDpH5JiuZ5Uam5YfeafW7a/VD83j2+aHttfO/rfm31ur8zh+KtXrZHs/7L58bS9/28dzW3K/na7tWrXm2MNuWs92X+7XWqoUN1/HgPg7iKOtFP8exVg8237vaHt31d68Wx11N7j59fSjzA9ervu7LMabKD7xoo6/r67a+5ahrZJ/uH3f8eH5znxuM8WnMH3qE+HH93SetPl9f/4+rmOkjNn76sOefnuv+3WfrM0j6Obn67OGUG9u3VvT3OWa19j/ftPneFius52Pf+NZndw/DG4fFxYdhg09JiA0s7Lm2AdtYbT1HWxy/tdNrfbtescG+3JalP/v84dVs7VbfrHnelw+wxvxgbdW+PSsWL74+K77dr3SD8ay65ss2ts3ar7T+7mH7lX5/Zdu+8hCZBwcHZu53y+GvOSDr+tObMczXf62B9a9m21+4GevN1/j88/Xft3r+b9zY9qPuc17rkn4eDjlmy89fa455/W6369Da27RvHZ7YzNf6d+t1uI9XXeeYn7/BPPvi6dv3PNvBwbXbpO3e5fVcnDuCrPVYt3jr9muUZe2b3vqp04dcv62tMF//E3ti8zWPYvm+x2zG8ERjDI/ZM4b5+p9ZjaE+xF+vbcF6XE/dyJyv//k9GMDi/V50Yve77dxeMK5f837zeCyueP3d9bVWnugwnm/+91lDzsOJS7jWPXNXw15bX73Wi22d12vlEixfZfmxNZfwwj35qK1tvJoNPgyrH+aP1/HQ+vo/uUbubT03Tz1E5p9fI77et7ZS4GvLNp88wn326Z5lI9b6tfUL6zGvv7u+z4uz5q28nIVNt9zuvrN+V9PpdU7zyzY6be0X2I5hH0d1wvj3PL51najD/PTpQ55n/u7WD/zTNfqWs0eQ+c979N/Ss3050Kvp2b485BM337OwyYHxO0sPtzHT1k8dJns7Jv1n5VG3/7byXlvdv/2QMVlrYV9eZ9/+/quthXUcNHNQV9vrcPKWy+//4u6VO7uuibORmeqMxvP28N/bNWvZ9mvNsW91ZX1vy7bvk7Vvr/PV1tWWe7fW1T5Z+2KKC8b1R80TX9h8ZuHMM5trZxt636V/Zw/yZ36Oi5fkrfP7F4x5umFz/frv+jm1+d2TLumyld9/4p65m++lHwvzbd/bRUOWtVdgvv4u4/qLm2v0Y72b9Xct+7kPH+zL7+/D+Q9lDmZfft9aq/vy+1dbq/O8nz+4ct63+f19+e5UOZjZvu/jlvbdc5/dsnyVtUfXijGOknN6oiFre+9Th9x7y7fP11er9VweEmOsx7CPb78aH7Pd+70Pl2wxjTVX1xvPt/br23W1b0/fwcG153e268qa56Psn0x1luRZ13D2aR+mOzh48efCwkGH8TBHOft0lJjoKHL35YeuV146dX5oq6/78kMvibNPd13Dvv+zxnge7rVH33YPjrPWp8W3WFzG2jZb68T6c77P9nfb+1jv4Wr5uXiEeG5ffmq+/jdX8dy4wRDW8x8lx7K1N1t9nXMsN+55/hMHl6+Dtc26cfNM1vs5bN7efTNvV9uzcdie/+9fzdt7bebN4vyseHK+7ph7ISxrbsav6zVncR03bK5f/309F/PvPnDPmrvWenYWVrbmbr3fZTvW45i7CwdXzt2de+buwuqz+e/ruZt/95EJ5+60MR4rNnqw9sp6D1dbdx+/WXcWz7lv3c3Xf9pq3X3SnphnX65lez5oPQ/rmOqOzdmZc4c822dsnu1O49nO7Xm2+frPWz3bZx8yXwcH184Xrnnqj9/MmaXD8z0vGvd8MFzFNj9xYfXZXUeQtS83crdx/Vrmuc291+O6+wiy9p2duce4/u49916P657NZ+vvzded2Vx7XDbu3kvy1jbuHmOebthcv/67fk5tfvd1e2zc3Xvmbr6Xfs4bc7d9b/casu4yZM3XP924fv1MW31d32/93fV9LN7x7s21Fzf/vmDIsWKqNdeqn5Orz447prqwGvOp1X0PW6vr6691rW7f+XreL24+W9usC5v7XI3r39rM9WfrvSufcQR8t++e++zWBeP6o+Z0Lxzh3ta+oe29Tx9y/dqPra//8dV63ubvL6y+Yz3PEw6R+VN7+Lr5na+fax9fdzU/tM3RX1h9dhhnPv/bmn9rra6xvX5Orj477rV6WXy8uu9h+ra+fjuX1txfWF2zXavWPFsYbJtzS5UPffcjxLAnDq587hS5w+1a3bfvel/e+7Ac89W4kKvJfSTkbS4Y11v29PzBlbr8YPM2R9XXdYwRryFv81Dwy/tkPZicyfbe+3Im2/VwGC833ev+3WfXKwe9L592cHC0udyXM7E4nWvdG/1gOOiTe+qSzrVGzxxcqe8J30lxYvO8hz3T1mav+Y+Tm7GeWMm6bx6nz8KQ13Xb18WY5W2Tt5lryr4KZeG6sfO9H2OR5XEo86KJXYhZrJrQhOjzECu/HccpYxwnNp/N1/7rLZeP7+TxzGW23i+9nZtbDmz7se1FZ2Hm+d/b9W3t1bKwxzZHsbVVpw753pZ/ma+/6dKmuKNi0H1r9moY9MKlv1tY4ShcyIk99z5qfLWPC9mO5cAY5/y9hxOesN7jPjxhzaX1Hq1Y9a7NZ+s6y4f5tPnf6/VyfiPn5BG+t83z6O/beG6+9smrXpbfe+nv1rqdx3y97PXa5gjX72X9nrd7vS6u1vmDzRFa+ZzjzhFu8yIXjc/md7Re98fxjmZ9X7+j9T0vrp5nuz7Wa+vU5nfP3vOOrDV8cc/cHWaztutjzelnt15+T8unWPUGtz7l/92+k1lu1ta+fNaF1WcPxdra5rOOurbaPe8tZT5rPffr/jTP2fPeThjf3fanma9/r9V7u2/Pe9vuhb9gjHl+p+s5PI53Oq+79Tu1fNUNB1eu07WfP7X53XP3vNMLq+/t43738bUWx/xg7eWF1TX7dGe95t8w0Zp/+5XuvPEe3bmwGfPZF2PML0g05ueuxvyWj3B9f4dj1ndr7rb2/6H22xdWz7O+fv339dzNv3unhHN32hjPcduK7X6Gw9bde2zW3ax3R1138/VPWa279z4GW7H2je9/jb5x29twvv7Tb9vJ/KBHAKb5iIcY03x0Ikzz31Zx3sc9wm38pz5CMM3nJMIHf7XSnc9/kHbq37Jeffmj2OGKuTsqdnjhIwQ7fGsi7PADqzX5HZs1uf7+hc2Yrf3WFke577zNjavn+d7N86TKjb7o5suvW6/P9Xz+0Ob+sy6u53P93e18ztf/xGo+f/SQd7R+ppv2PNP6s4ursX7r5j1Z62a+p7WvcN9+tnuN69f797bn1Nbr8t4jyNrHk19tL93Fzb3X43r6EWTt23/5DOP6p++593pcz9h8tv7efN2ZzbXHZVefeUne2q4+w5inGzbXr/+un1Ob3/3GHrv69D1zN99LP+eNudu+t2casu41ZM3XP8u4fv1MW31d32/93fV95rmx9Ovg4Mp1ddg6sHJa89p7KHJal/nN1X0PW6vr6691rW7t/nre79l8dmH12d2b+1wtB7q1mevP5u+u7fs+vLnvntea31vb5K0OXjSedzvmq8WX6+9eDV9eTe4sx9LXNabWz8nVZ8etr+vn3errvpzq/Jzr66+2v36rr+u1v83BXlh9dnFzn31nQy19tfZLrWMuC6tvY+v1GObrHu65u/+dMHd3wRiPpWMnDvlzvs/2d9v7WO9hu59Af1/jzhtuO7js2ebvrXHn+rtb3Dlf/2ErPu3Upb9bunNxM+azxpj/LevVbZfm5rj0yuIMDzuPun6GfXuMtrqxvs/TjDFs5/D0IdfP8rZz9LjVHGWH7IvZ6vETNnp8cSX7KHo8X9+t9PhJe/T4kWADLx6zrlpzt+WB7j7mubvHmLu798zd2i/fY8zd/LtnJZy708Z4jtt/bHmgw9Zdtll3Fm+xb93N1/vVuis3687a+3KU/e3b/WlbW7itk3wYFppzF7cdXLm21nPxipu5uNuYi7v2zMV8/X2ruXjOIfN7cGDP7xbfWXsy1+/N4lHWeqD/UsdmWw79WnmUC3vufTUe5a7NvS0eZZ+sfRyOxR08Y8+91+N65uYzizM5s7n2uGzizEusbeIzjXm6YXP9+u/6ObX53fP32MRn7Jm7+V76seL57XuzOBmLD5qvfxnj+vUzbfV1fb/1d9f3mefG0q+DgyvX1WHrwIqJ57X3UMTEl/m81X0PW6vr6691rW7Pfazn/d7NZxdXn92zuc/V+JGtzVx/tsawr7ixmet7nj3CPS+ufnet/MBWB++6xue9YMja3vv0Idev/dj6+nc1cPpW5qlDnucJh8h895XM7fkFyw+90+p31+qH5vHs80Pba+d/W/NvrdX5nT8Ua/WyHO/9l89N6rzMdq1a82xhtrs297lo3Oeo+Gb+7joe3MdBHGW96Oc41urB5ntH4VDv2Vx7WBx3Nbn79PXCpd89qq+2b9nq6wXjPkfV1/m7ax5uH9dw4uDK57bs9bYfijV+a85PHPLnfJ/t77aYbD032/5z1pxM+3COEDOtv7vtPzdff9NqD+IX7fHT6+efnuv+3WcXLv3uetP9ffhFP9dqn7Z9iNbr4uLmexdWnx3GI1rjW/efu3DI+K4VG7zwYYIN1vq2z9Y+lLnYi6sxH8XWrq+/Vlu71bejYoP5nsfNdd24eZ51rnJ+nnX/uQubcR3Gjf1AotzKP634oB8+RObBwX6OabtWTx/s3/e2ta8/fkROfm3bfzIRN/ibq+f/mT3c4L49v2td0s/DIce8b++Bfq51H8B2Ha5t7oXNZ9Y6PLGZr/XvXhxe9f337CPbYp7jwn8v7j4yiz+wfMVRZF0wxrX1U4fF5rO8U5vr/3hPbL7mWCzft+0/9wxjDI/ZM4b5+j9fjaE+xF+vbcF6XNseWfP1f7UHA1h80r4eWVfja+fxWFzx+rvra6080WE83/zvuw05j+S9W9vYbN/erbWduHtzn1S5kp98kFzCXcazbe3aYf74MO7tfzwI7u2ph8j8l2vE1/vWVgp8bdnms0e4zz7dOyrnvC8/tH2GF2fNXzDkHIXLvmCM/8XhG35gT/7vxeGdThj/nse37j+31f97V2OynmfbK27Z23rpoqP6lruPIPP8SmZ5iM88WMnc13/uanq21X9Lz6yxr/Vq+ztLDy9urt36qcNkb8ek/84b49/+28p7bXX/nkPGZK2Fa81zHHUtrOOgmYO62hmNp91++f2teGb93cPimXtXXNVdG5kXjWd6cc5ovMejZzQO9Sv7ZN28596PntHYf0bDrezno2c0Hj2j8XA7ozHb933c0j47vc9uXW2MWx28YIxx372faMg6qp/a8u3z9W+0Bw9Zvncf3361nMTWdu7LmV7c/PvC6u/78jsPJc93YTXm7bral8/Tz7XyfNt1Zc3zvv33Jw6u1OdrxSJrnu8Fj559OlTuLOfRs0/Xz9mnN3yEn336wD04bv2e9737h8PZp4/YxF7z9641P/ePq3juozYY4sLq+9die+d/r39n5Vhu3PP8Jw4uz9Nbec07jPFdbd4+8ZCY9VrP2vzWat4+ZTNv6+fZrjlLx6+X8yJbW3/U8yKfvWfNWT7Ris/37Vey5u70Zu7uOea5u9eYu3v2zN06VrjXmLv5d1+ccO5OG+M57r1SRz1r81WbdbfODRxl3c3Xf8Nq3X3tnphn63uPWq/twmrMz9mcnbn7kGf7ps2zXS2HsX22+frvWD3btx4yXwcHD44v/KrNnFk6PN/zuPbEv7jnVy7uuffV8qFbzto6v7JP1r6zM1fjaLb3Xo/rWZvPrLMqZzbXHpeNm8+DrG3cs4x5umFz/frv+jm1+d1P7LFxz9wzd/O99GOdo9i+N+ssjHUOZ77+ZY3r18+01df1/dbfXd9nnhtLvw4OrlxXh60DK6aa195DEVNd5sNW9z1sre7jNK+2Vrc59PW8P33z2dpmbfn5q8VuW5u5/myd2/6mI+C7ffe8uPrdce712ZcLWcva3vuw/P3aj62v/6PVes6OkL9cP88TDpH5p9eYv9zH113ND217fu7Lk7+4PPj8zh/d73K0/S4Xjfu8OGdnPvEIMeyJgyuf+yjc5aNnZx49O3Pi4Eo9uVZ9nb+75nGu97yNJWufDT4Obvvg4PA1/XDKmVjvcX39UebSeo9H6YH0ksiZzL1bjnPeG/9A3DKN9ZL8GXNsf06uPl9f//hL72w9J/OfJx/EOMcm5GMZxuBC31cxbPu36Wd+x7ccw/1DU/pYVLHpXBnK+qr3vzQNB6fv332+Xkf6uenSv+fYcHv9LO/U5vqnXhIuvbiwWiPTtcb9dN0r7LnuxCF/TjKM3528//Lfnbn/yutvvP/K6+d7n73/yjHOn92y+my9xvVz66V/r+drLWsex6nN9c++9OzzO7l59Z35++eN+9+8uf9l4zZ+t7YxW1k3Gr+br9f7uXezbtbPntCu5vPYTm/kr3+3HdusO8exrioXmhiaPG+rfKhy95Je19HVXWQQ2ZDrn8VL+v6F93VbdFnV9HHsq/Jq9///AR0UOsphyQIA", - "debug_symbols": "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4rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueJ5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG59SrhH6VULASGlZCxUroWAklK6FlJdSshJ6VULQSmlZC1UroWgllK6FtJdSthL6VULgSGldC5UroXAmlK6F1JdSuhN6VULwSmldC9UroXgnlK6F9JdSvhP6VUMASGlhCBUvoYAklLKGFJdSwhB6WUMQSmlhCFUvoYgllLKGNJdSxhD6WUMgSGllCJUvoZAmlLKGVJdSyhF6WUMwS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", + "bytecode": "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", + "debug_symbols": "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4rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueK54rniueJ5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG59SrhH6VULASGlZCxUroWAklK6FlJdSshJ6VULQSmlZC1UroWgllK6FtJdSthL6VULgSGldC5UroXAmlK6F1JdSuhN6VULwSmldC9UroXgnlK6F9JdSvhP6VUMASGlhCBUvoYAklLKGFJdSwhB6WUMQSmlhCFUvoYgllLKGNJdSxhD6WUMgSGllCJUvoZAmlLKGVJdSyhF6WUMwS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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index edeb1d5dd4b..c5aa7590813 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZdNbuMwDIXv4rUXIinqp1cpgiJN3UGAIAnSZIBBkbsPaYpuu8hgIG/yvtR+z5REqfHn8Da93n697I/vp4/h6flzeL3sD4f9r5fDabe97k9H+evnEPQj4vAE4xDJJJqwSTLJJsWkzsLBBEwshS2FLYUthS2FLYUthS0liQFF5BYSkVuiSDGps+RgAiZoQibiY5FsUkzEl8ahBBMwQRMyiSZsIilZRHxlHCrOtVS2b3KtimSTYlJngaBzEBTAAR3IITqwgw0WQm5amlZTCE2hKTalptEUNXkGdkgO2aE41AYUHMBBa44K5BAd2CE5ZIfSIGoOKqADOUQHdkgO2aE00PUCVgAHdCAHDUwK7JAcsoMGZoXaoAYHvUcWFeeFqwryLAwK6EAO8iwEBXaQZyEqSA6SQnGoDXTxMCpoMivE9lDQnKSQHLJDcdAcKRUxOICDVqg5SA5aoY5CG4C0Zm0AA+0trVkbwKA20AYgHYU2gAE6kEN0YIfkoMk6Um0Ag9ogarKOXVuCdOxzS2iFc0vMoLNR7/dx8KPo5XqZJj2Jvp1NcmKdt5fpeB2ejrfDYRx+bw+3+aaP8/Y463V7kasy1un4JiqB7/vDpHQfv9zhsbUWbuZa0mLn//bLzvYA2crUkyAd5QnI2JNA2muWQAl6EgCWUch+XZvAXTOJ2uBtHqh01VDqUkOFtTVwXwIv84ClJyHVAC0hVchLApQfCQCPI4pssBZRMOGjiH8Ukam0gJxDxyBydX/pWko5RZpfjpEef0L3554thdX9FHr8hL6GhD2HAoOPn2Pu8VdvgBR4nR9il58Wf+3xl7zKn8jXL8We/k2YVvkjuD9iz/rFUBZ/Weenvuf7/MeIXX5Y5+dl/lLX/lnWjwm79l9Z/LTOH/uenx/s/4182+72lx8vcXdNuuy3r4epfX2/HXffrl7/nP2KvwSeL6fd9Ha7TJr09SYoH8/AeYRcNuMgP9ie5ccFxY2+muglKUz+S+pXmK/lEWPd3LWwvw==", + "bytecode": "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", + "debug_symbols": "pZdNbuMwDIXv4rUXIinqp1cpgiJN3UGAIAnSZIBBkbsPaYpuu8hgIG/yvtR+z5REqfHn8Da93n697I/vp4/h6flzeL3sD4f9r5fDabe97k9H+evnEPQj4vAE4xDJJJqwSTLJJsWkzsLBBEwshS2FLYUthS2FLYUthS0liQFF5BYSkVuiSDGps+RgAiZoQibiY5FsUkzEl8ahBBMwQRMyiSZsIilZRHxlHCrOtVS5VkWSSTYpJlp8GAcIwQEc0IEcogM72Ggh5KalaTWF0BSaYlNqGk1Rk2dgh+SQHYpDbUDBARy05qhADtGBHZJDdigNouagAjqQQ3Rgh+SQHUoDXTBgBXBAB3LQwKTADskhO2hgVqgNanDQe2SNcV64qiDPwqCADuQgz0JQYAd5FqKC5CApFIfaQBcPo4Ims0JsDwXNSQrJITsUB82RUhGDAzhohZqD5KAV6ii0AUhr1gYw0N7SmrUBDGoDbQDSUWgDGKADOUQHdkgOmqwj1QYwqA2iJuvYtSVIxz63hFY4t8QMOhv1fh8HP4terpdp0qPo2+EkR9Z5e5mO1+HpeDscxuH39nCbb/o4b4+zXrcXuSpjnY5vohL4vj9MSvfxyx0eW2vhZq4lLXb+b7/sbA+QrUw9CdJRnoCMPQmkvWYJlKAnAWAZhezXtQncNZOoDd7mgUpXDaUuNdSueUBeRoEF1o6CexJSDdASUoW8JED5kQDwOKLIBmsRBRM+ivhHEZlKC8g5dAwiV/eXrqWUU6T55Rjp8Sd0f+7ZUljdT6HHT+hrSNhzKDD4+DnmHn/1BkiB1/khdvlp8dcef8mr/Il8/VLs6d+EaZU/gvsj9qxfDGXxl3V+6nu+z3+M2OWHdX5e5i917Z9l/Ziwa/+VxU/r/LHv+fnB/t/It+1uf/nxFnfXpMt++3qY2tf323H37er1z9mv+Fvg+XLaTW+3y6RJX6+C8vEMnEfIZTMO8oPtWX5cUNzoq4leksLkf5x+hflaHjHWzV0L+ws=", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_0.snap index 45031dd9dd0..4c43a3f6dcd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_0.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9WdB5gbxRXHR3eS7qQr0p0pBlOMjeng1Z3OdyYFY5zeSG8kIF9JIwmk98iQnpCQXkgIJglpJCGVFEgMJCQhDVJJSCG9996A9zf7rKenkbA/a/m+/35632p3Z9/8ZnZ2dnZn5r1cSJfc9t/2Jd/a1Vrrhju2IV0nu7fU+qgryYoxR8A4QMA4SMCYJ2AsEDAWCRiHCBiHCRhLBIxlAsYRAsZRAsYxAsZxAsYKAWOVgHGCgHGSgHEZAeMeBIx7EjDuRcC4NwHjcgLGfQgY9yVgXEHAuB8B4/4EjAcQMB5IwLiSgPEgAsZVBIyrCRgPJmBcQ8B4CAHjoQSMhxEwHk7AeAQB45EEjEcRMB5NwHgMAeNaAsaEgLFGwDhFwDhNwFgnYJwhYFxHwDhLwDhHwLiegPFYAsbbEDDeloDxdgSMtydgPI6AcQMB4/EEjBsJGE8gYNxEwHgHAsY7EjDeiYDxzgSMdyFgvCsB490IGO9OwHgPAsZ7EjDei4DxRALGexMw3oeA8b4EjPcjYLw/AeMDCBgfSMD4IALGBxMwPoSA8aEEjCcRMD6MgPHhBIwnEzCeQsDYIGDcTMA4T8C4QMC4SMC4RMD4CALGRxIwPoqA8dEEjI8hYDyVgPGxBIyPI2B8PAHjaQSMpxMwPoGA8YkEjE8iYHwyAeNTCBifSsD4NALGpxMwPoOA8ZkEjM8iYHw2AeNzCBifS8DYJGDcQsB4BgHjmQSMzyNgfD4B4wsIGF9IwPgiAsYXEzC+hIDxpQSMLyNgPIuA8eUEjK8gYDybgPGVBIyvImB8NQHjawgYX0vA+DoCxtcTML6BgPGNBIxvImA8h4DxzQSMbyFgPJeA8a0EjOcRMG4lYDyfgPFtBIxvJ2B8BwHjBQSM7yRgfBcB47sJGN9DwPheAsYLCRjfR8D4fgLGDxAwXkTA+EECxg8RMH6YgPEjBIwfJWD8GAHjxQSMHydg/AQB4ycJGD9FwHgJAeOlBIyfJmD8DAHjNgLGywgYLydgvIKA8bMEjJ8jYLySgPHzBIxfIGD8IgHjVQSMXyJg/DIB41cIGL9KwPg1AsarCRivIWD8OgHjNwgYv0nA+C0Cxm8TMH6HgPFaAsbvEjB+j4DxOgLG7xMw/oCA8YcEjD8iYLyegPHHBIw/IWD8KQHjzwgYf07A+AsCxl8SMP6KgPHXBIy/IWD8LQHj7wgYf0/A+AcCxj8SMP6JgPHPBIx/IWD8KwHj3wgY/07A+A8Cxn8SMP6LgPHfBIz/IWD8LwHj/wgY/0/AeAMB4419ZFS2NtCQa983IDIokhcpiBRFhkSGRUoiZZERkVGRMZFxkYpIVWRCZFJkmcgeInuK7CWyt8hykX1E9hVZIbKfyP4iB4gcKLJS5CCRVSKrRQ4WWSNyiMihIoeJHC5yhMiRIkeJHC1yjMhaZI5ITWRKZFqkLjIjsk5kVmROZL3IsSJwcg8n8nDSDifo6mT8eJGNInDyDCfKcFIMJ8BwsgsntnASCyescHIKJ6Jw0gknmHAyeaIInCTCCSGc/MGJHpzUwQkcnKzBiRmchMEJF5xcwYkUnDTBCRKcDJ0i0hDZLAInL3CiAiclcAICJxtwYgEnEXDCACcHcCIAI/0wgg8j86eJwEg6jJDDyDeMaMNINYxAw8gyjBjDSDCM8MLILYzIwkgrjKDCyGhTZIvIGSIw8ggjijBSCCOAMLIHI3YwEgcjbDByBiNiMNIFI1gwMnW2CIwkwQgRjPzAiA6M1MAIDIyswIgJjITACAeMXMCIBIw0wAgCjAycJ7JV5HwRTPLGJGpMUsYkYEyyxSRWTBLFJExMcsQkQkzSwyQ4TDK7SASTpDAJCZN8MIkGk1QwCQSTLDCJAZMEMAgfg9wxiByDtDEIGoOMt4lcJnK5CAZ5YhAlBiliECAG2WEQGwaJYRAWBjlhEBEG6WAQDAaZXC2CQRIYhIBOfnSio5MancDoZEUnJjoJ0QmHTi50IqGTBp0g6GS4XgQfyfERGh958REVHynxERAf2fARCx+J8BEGHznwEQEv6XgJxksmXuLwkoSXEDTy0YhGIxWNQDSy0IhBIwEPYTzk8BBBJY1KEJWMLt3qhZAyYyml6wFzHHXGhnQ72b2lVnLx9lP/XK0+UwrtS5/5p0uhVZf2XX8tSUpGZwb8yVCqZ1Ozpd+nRctBLmR0nZJ6PdN0Sj6OubQFkxaNO59N3LWciy+4dAYXfzlkWKaSm3lsfMrj80f/j2mYZosn547lm53p0GOFZns6sKCNsdyE82VrwIRbbf6vcbo3belkyvKelDqlnvE9WVsWut+HmsahZtix6LFBs0/zXPNp2IZ3x0rmWL7ZHk853c6beKwu5Si48KvS7Uq6Lppz9PxqJP6ii7+NO7LP5pHXNRjZp+HR1l2R/kcbV58TJzRb+vpZ/yAOlN+LlSl0Xtdc6F+9rveUvcf9/VEI/U/rVLLz9d2OMhMyrH9NfVdwPD5/Blz+FLPJnyTn9FueYiR/9FoORY6pruF0u2B02fBFk0Yb3v7X8+2+mXRdjej0ZXcodKbH7rP33lqXtkETLtdlHUJnObJ6qxEuvb6ZPuOTVjutkIn+qSTrMlkKndc39C9/aqp/OJv8r/n2nb3WyLPjzP5caNX39n6xbR99DhRc+LOMzo3p/0ro/rzuVb6zvKZyVXe6Htb4yyHbdk2vei/W7tT8KWXAY+vhcoRnMMIzEVr1p71mlk91rUzXvd47drV+8+UlhP5dm2roLMNFl4ZiH9NQ6n8akmrofm00DeU+pKHqdNl4siyzsiyp/pFM9NcWVf9o6PP1Md8yxrLJm8XYe6R9Bpxk9ttj9hmQi1zTggt/qtF5cvq/Ejlfy0e2bY9a0qv9FWsLKattqwz1OM+2myuRtPi6TbcHejCEEH8u5iJ6YvfboOOJPc+68cTKh48/RNhVz0iI50PZ6Rl3evx9m3P/9V3Zlkero2CO2/Cnp2u0rS51OvUdO4TezzYNPxEJXzVhlKfiGOy5MfaK0Rs715ehquHrpcse0+18RE+sDHU7byDCN+r0xNqZlQirfRZ5nZpPYy6M/a/8xRCvo3Z8Y3Phm+kaZWJbF522nFmuQhedZxqdvpzFyk2vcjYZCT9hwihPJXSWwUl3nmW35d3vi11Xf//77fGInlg7w5Y5ryd23fQ9aFefWSM99GoabfjRSHhbB2l4zWd7f+i5vk2g8W1I18luLmORtOVc3Nm0GXb+HUnjL0fyMIt3pDHH4/PHt6fHs8mfBPekrzux2O+k9tpYDlte7PkDofO9z9Y7Wh5sG9reE+c4vRqPrc9KEb0FF36r0Xmu02nfT2Ks/v61x0pGr353qITOPPHfz2LXPPaOoeHHTTyx8P7ZoOEvSNdIwxVOZyXCECt3/lliw1cizLFnY7VL3PY62rJVdOnR8Bea9OhzKdZnZeszLHlzrJ/fv8FxpeHw+Vpotqe7Vx5i2dU2mqa96sLb/I99K624eGLPDlsG/T1gj+m59n7NMt9n51qDnvSaaznyS94ct+EvSbftPaTr/G5wLs02akvTjaXGTGNhoT7fmHT6sdh3i37HPz+zbvN8faaRLNawOXVrxz81N7du/dTmpD67ML+0UJ++teOXpM/ON2ZrtfX12mK9NnNL8cf6LG09gkX7PW2/qA2v+gou/FUaNtw8rgiL7ye38SHcdT3C5bqst+uI7Ms32/fF+kttP7KG39H+aXYy6rERc8zWcVhG022bX1aXchRc+GvTbb0mtu9Xz69G4h928bdxR/b5fuSRSPiRSHhcn2tUX7q2ae9323B7nE6/3efZtOygXN8E7tHO/EXOAAA=", - "debug_symbols": "pZfdbqNADIXfhetcjO357ausoipNaRUJkYgmK62qvPvaeEzbC7Kr4SbnI3AOY/Aw8Nm99i+39+fT+Hb+6J5+fXYv02kYTu/Pw/l4uJ7OI//72Tn5odw9wa6jMot3KqCCKqTiVYJKVEkqmuI1JWhK0JSgKUFTgqYETYn8J7JwGLFwWGDJKmWW5FRABVVIxatwWGKJKkklq3BK3nXZqYAKqnBKYfEqYZYiw3WsMkIeYpFCeYwlVc1VpVYeNDhnIPV6AYkIAmTgDSQ1CkhsEsh6PnASyKMCcAZggAYSWAS8QTDgQJQcSAacjCDAychDBnQGnIwyZkQDMuBklCowGESDZJANSgVyBpIslRIakIEkS+0kyVI7Rb3GQMkgV5AWRClZmlCBDDiH5mOCQTRIBtmgVJCmVAADTia5GtKMJLWHPPchRKh/RDlEypJGVfAGwUBOLvVJ+ypkg1JBmlgBDFBPJZ08q68aqsaqqWodmvSzqDQ03e+7zqb083Xqe5nR3+Y4z/zLYerHa/c03oZh1/0+DLf5oI/LYZz1eph4L7dLP76ycuDbaeiF7rsvt1u3lhyqueS42MN/+3luWAC4RC0J6KIlYMCWBJLe1QSKsJbg1xMS5RqQkmvxF/Nnymv+uO5Hb7cQPbT4I5o/YYu/mJ9ci5/kQaV+pAZ/AKs/+NTiL9YA0YVtfvBNflr8pcWf0yZ/JLt/0bsWP8ZNfg/m99hy/7zLiz9v81Pb+e36e49NftjmD8v1i03zZ7l/gbBp/uXFT9v8vu386d/z/9EKALCsQvyCsTUhrK6EWB5MorJ0QSzwVQbkHxH0YBQZvT2IMj/T1yIerqaYltV0fS16eCVyWa5EgaYV/dsYQltCWO4G5p8Je946HE/Tj6+hu2RNp8PL0NfNt9t4/Lb3+udie+xr6jKdj/3rbeol6euTin9+Aa/nCGXPX1a8xW8X5Pfyji+7Mu0gZ9mE+UjcQfH7uwzsLw==", + "bytecode": "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", + "debug_symbols": "pZfdbuJADIXfJddcjO358fRVVqiiNK2QIkAprLSqePe14zhtL8KuhhvOF5JzMp54GPLZvfYv1/fnw/Ht9NE9/frsXsbDMBzen4fTfnc5nI7y7WcX9IO4e4JNR3WSGEzABE3IJJokk2xSTCwlWkqylGQpyVKSpSRLSZaS5UsUkTASkbAkwiZ1khJMwARNyCSaSFgRySbFhE0khTcdBxMwQRNJqSLRJE1SdbhBVEcoQ6xaqIyxlll5Vq1VBg0hOGi9UUEjkgI5RAdNzQoaWxTY7gdBA2VUAMEBHNBBA6tCdEgOEoiaA8VBkhEUJBllyIDBQZJRx4zoQA6SjFoFJofsUBzYoc5AwUGTtVJCB3LQZK2dNFlrp2xzDFQceAZtQdSStQkNyEFyaLomOWSH4sAOdQZtSgNwkGTS2dBmJK098dSHkPUSrSajAzlEBzVpWVPzTlAc2KHOoE1sAA5ot9JOnjTOmmbNs5ZZ56FpP6tqQ9Pttul8ST9fxr7XFf1tjcvKP+/G/njpno7XYdh0v3fDdbro47w7TnrZjXJW2qU/vopK4Nth6JVumy93WLdWTrO5cl7s6b/9sjY8AEKhlgQM2RMwYUsCae9aAmVYS4jrCYV4DigltPir+5l4zZ/X/Rj9EWKEFn9G9xds8Vf3U2jxk/5QmR+pwZ/A60+xtPirN0AO6TE/xCY/Lf7a4ufykD+TP78cQ4sf80P+CO6P2PL8YuDFz4/5qe3+Pv8xYpMfHvOnZf5y0/pZnl8ibFp/vPjpMX9su3/59/q/twMALLuQ/MF4NCGt7oRY7yyiunRBrvBVBvCPCLozCsboP0Qsv+lrEXd3UyzLbrq+F92dCa7LTFRo2tHTMpfIbQnfqkg/E7ZytNsfxh9vQzfNGg+7l6GfD9+ux/23s5c/Zz/jb1Pn8bTvX69jr0lfr1Ty8QtkP0eoW3mzkiP5d0Fxq//x9RTTBpj1EKYrcQM1bm86sL8=", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 45031dd9dd0..4c43a3f6dcd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/ram_blowup_regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZfdbqNADIXfhetcjO357ausoipNaRUJkYgmK62qvPvaeEzbC7Kr4SbnI3AOY/Aw8Nm99i+39+fT+Hb+6J5+fXYv02kYTu/Pw/l4uJ7OI//72Tn5odw9wa6jMot3KqCCKqTiVYJKVEkqmuI1JWhK0JSgKUFTgqYETYn8J7JwGLFwWGDJKmWW5FRABVVIxatwWGKJKkklq3BK3nXZqYAKqnBKYfEqYZYiw3WsMkIeYpFCeYwlVc1VpVYeNDhnIPV6AYkIAmTgDSQ1CkhsEsh6PnASyKMCcAZggAYSWAS8QTDgQJQcSAacjCDAychDBnQGnIwyZkQDMuBklCowGESDZJANSgVyBpIslRIakIEkS+0kyVI7Rb3GQMkgV5AWRClZmlCBDDiH5mOCQTRIBtmgVJCmVAADTia5GtKMJLWHPPchRKh/RDlEypJGVfAGwUBOLvVJ+ypkg1JBmlgBDFBPJZ08q68aqsaqqWodmvSzqDQ03e+7zqb083Xqe5nR3+Y4z/zLYerHa/c03oZh1/0+DLf5oI/LYZz1eph4L7dLP76ycuDbaeiF7rsvt1u3lhyqueS42MN/+3luWAC4RC0J6KIlYMCWBJLe1QSKsJbg1xMS5RqQkmvxF/Nnymv+uO5Hb7cQPbT4I5o/YYu/mJ9ci5/kQaV+pAZ/AKs/+NTiL9YA0YVtfvBNflr8pcWf0yZ/JLt/0bsWP8ZNfg/m99hy/7zLiz9v81Pb+e36e49NftjmD8v1i03zZ7l/gbBp/uXFT9v8vu386d/z/9EKALCsQvyCsTUhrK6EWB5MorJ0QSzwVQbkHxH0YBQZvT2IMj/T1yIerqaYltV0fS16eCVyWa5EgaYV/dsYQltCWO4G5p8Je946HE/Tj6+hu2RNp8PL0NfNt9t4/Lb3+udie+xr6jKdj/3rbeol6euTin9+Aa/nCGXPX1a8xW8X5Pfyji+7Mu0gZ9mE+UjcQfH7uwzsLw==", + "bytecode": "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", + "debug_symbols": "pZfdbuJADIXfJddcjO358fRVVqiiNK2QIkAprLSqePe14zhtL8KuhhvOF5JzMp54GPLZvfYv1/fnw/Ht9NE9/frsXsbDMBzen4fTfnc5nI7y7WcX9IO4e4JNR3WSGEzABE3IJJokk2xSTCwlWkqylGQpyVKSpSRLSZaS5UsUkTASkbAkwiZ1khJMwARNyCSaSFgRySbFhE0khTcdBxMwQRNJqSLRJE1SdbhBVEcoQ6xaqIyxlll5Vq1VBg0hOGi9UUEjkgI5RAdNzQoaWxTY7gdBA2VUAMEBHNBBA6tCdEgOEoiaA8VBkhEUJBllyIDBQZJRx4zoQA6SjFoFJofsUBzYoc5AwUGTtVJCB3LQZK2dNFlrp2xzDFQceAZtQdSStQkNyEFyaLomOWSH4sAOdQZtSgNwkGTS2dBmJK098dSHkPUSrSajAzlEBzVpWVPzTlAc2KHOoE1sAA5ot9JOnjTOmmbNs5ZZ56FpP6tqQ9Pttul8ST9fxr7XFf1tjcvKP+/G/njpno7XYdh0v3fDdbro47w7TnrZjXJW2qU/vopK4Nth6JVumy93WLdWTrO5cl7s6b/9sjY8AEKhlgQM2RMwYUsCae9aAmVYS4jrCYV4DigltPir+5l4zZ/X/Rj9EWKEFn9G9xds8Vf3U2jxk/5QmR+pwZ/A60+xtPirN0AO6TE/xCY/Lf7a4ufykD+TP78cQ4sf80P+CO6P2PL8YuDFz4/5qe3+Pv8xYpMfHvOnZf5y0/pZnl8ibFp/vPjpMX9su3/59/q/twMALLuQ/MF4NCGt7oRY7yyiunRBrvBVBvCPCLozCsboP0Qsv+lrEXd3UyzLbrq+F92dCa7LTFRo2tHTMpfIbQnfqkg/E7ZytNsfxh9vQzfNGg+7l6GfD9+ux/23s5c/Zz/jb1Pn8bTvX69jr0lfr1Ty8QtkP0eoW3mzkiP5d0Fxq//x9RTTBpj1EKYrcQM1bm86sL8=", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_0/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_0/execute__tests__force_brillig_true_inliner_0.snap index 0d5d71247a4..8d2948a5952 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_0/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_0/execute__tests__force_brillig_true_inliner_0.snap @@ -44,7 +44,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_min/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_min/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 3d928b8e18a..d2dfd3a2b1b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_min/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_inliner_min/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -44,7 +44,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_slices_inliner_0/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_slices_inliner_0/execute__tests__force_brillig_true_inliner_0.snap index ac771aa08dd..ad6eed05f51 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_slices_inliner_0/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/reference_counts_slices_inliner_0/execute__tests__force_brillig_true_inliner_0.snap @@ -48,7 +48,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "22": { "source": "pub mod hash;\npub mod aes128;\npub mod array;\npub mod slice;\npub mod ecdsa_secp256k1;\npub mod ecdsa_secp256r1;\npub mod embedded_curve_ops;\npub mod field;\npub mod collections;\npub mod compat;\npub mod convert;\npub mod option;\npub mod string;\npub mod test;\npub mod cmp;\npub mod ops;\npub mod default;\npub mod prelude;\npub mod runtime;\npub mod meta;\npub mod append;\npub mod mem;\npub mod panic;\npub mod hint;\n\nuse convert::AsPrimitive;\n\n// Oracle calls are required to be wrapped in an unconstrained function\n// Thus, the only argument to the `println` oracle is expected to always be an ident\n#[oracle(print)]\nunconstrained fn print_oracle(with_newline: bool, input: T) {}\n\nunconstrained fn print_unconstrained(with_newline: bool, input: T) {\n print_oracle(with_newline, input);\n}\n\npub fn println(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(true, input);\n }\n}\n\npub fn print(input: T) {\n // Safety: a print statement cannot be constrained\n unsafe {\n print_unconstrained(false, input);\n }\n}\n\npub fn verify_proof(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n) {\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, 0);\n}\n\npub fn verify_proof_with_type(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(proof_type);\n }\n verify_proof_internal(verification_key, proof, public_inputs, key_hash, proof_type);\n}\n\n#[foreign(recursive_aggregation)]\nfn verify_proof_internal(\n verification_key: [Field; N],\n proof: [Field; M],\n public_inputs: [Field; K],\n key_hash: Field,\n proof_type: u32,\n) {}\n\n// Asserts that the given value is known at compile-time.\n// Useful for debugging for-loop bounds.\n#[builtin(assert_constant)]\npub fn assert_constant(x: T) {}\n\n// Asserts that the given value is both true and known at compile-time\n#[builtin(static_assert)]\npub fn static_assert(predicate: bool, message: str) {}\n\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_add(y)\")]\npub fn wrapping_add(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() + y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_sub(y)\")]\npub fn wrapping_sub(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n //340282366920938463463374607431768211456 is 2^128, it is used to avoid underflow\n AsPrimitive::as_(x.as_() + 340282366920938463463374607431768211456 - y.as_())\n}\n#[deprecated(\"wrapping operations should be done with the Wrapping traits. E.g: x.wrapping_mul(y)\")]\npub fn wrapping_mul(x: T, y: T) -> T\nwhere\n T: AsPrimitive,\n Field: AsPrimitive,\n{\n AsPrimitive::as_(x.as_() * y.as_())\n}\n\n#[builtin(as_witness)]\npub fn as_witness(x: Field) {}\n\nmod tests {\n use super::ops::arith::WrappingMul;\n\n #[test(should_fail_with = \"custom message\")]\n fn test_static_assert_custom_message() {\n super::static_assert(1 == 2, \"custom message\");\n }\n\n #[test]\n fn test_wrapping_mul() {\n let zero: u128 = 0;\n let one: u128 = 1;\n let two_pow_64: u128 = 0x10000000000000000;\n let u128_max: u128 = 0xffffffffffffffffffffffffffffffff;\n\n // 1*0==0\n assert_eq(zero, zero.wrapping_mul(one));\n\n // 0*1==0\n assert_eq(zero, one.wrapping_mul(zero));\n\n // 1*1==1\n assert_eq(one, one.wrapping_mul(one));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(zero, zero.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(zero, two_pow_64.wrapping_mul(zero));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(two_pow_64, two_pow_64.wrapping_mul(one));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(two_pow_64, one.wrapping_mul(two_pow_64));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(zero, two_pow_64.wrapping_mul(two_pow_64));\n // -1 * -1 == 1\n assert_eq(one, u128_max.wrapping_mul(u128_max));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 97df2255c0f..cb7fb713469 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -74,8 +74,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1dTagkVxW+1d3Vr//eez0zyZiMLhIVEY2h+71+f0mUNmaSTJLJfyZLffNmnoIIIiG4CFLgD0hQF0GzEhERV7pScRWCC3EhKLgS3QRxISIRTFCColOTOt1ff/1Vdb/pe/v1ZPpCU9V1T33n3HPOPfe3qiL3dlq58ouy8wod0+uxG01G28+OndlS1yNWJ5SM0XUgY+k6kLF8HchYCSBjCDnj60TO6nUi50ogOV2NhE4raloRUkdLjZgqaMXlJyvo41lUrmf/S5DvsWJ168TXJ/5uZ2u3LsrnUf7NuhttuDzj7xp+NQx+x3zh8WSIj2UxvmWi43sioHkCaJ7IoXkSaJ7MoXkKaJ7KoXkaaJ7OobkANBeApgQ0zwLNs0RTB0znvPtoJ7CNt1bdeOfKymK8V8Lw3o6In3NDnWOe8W+4oPWpGxE/k4f1Y/Fu1WiSoTwR5VWS8XJYXgx5Zt80Rt8OdOxbMeWZLGl6JhnNK0PeBcqrQJ75dMr7DpDjruw8sI8P4ligdqRzSsiPvNK0kgz1YXorw7UY9HdVP0hPeXXIqySjfBrZ/wrwQSyTIyb6D2f/17NjFe6x+9uCf5X4j8gtrrFe6oK+LuhT/31/dt50w77BJ5Ihnj+bdjuGfx/gO+fPZwz/LOBHAfDvD6KfIf4DYfQz6Js9GEb+Af45wK8EwH8ojPwbhv9wEsR/eob/SBj5twz/fBD9D+vvo0Hk3xjgPxZE/7udNMalbeS5LAAG7ivtWruNYzhLlofjpYjyGpDHMR5Tmf5jmVLej5WGuEzH8mA/rU552J812bifkaZ+duzMlra47LGQI6I8oz1H8gWyceck4DrBi/t7qm9q8XjdFfd5sOx5WA8RFt5fJZ0EGp9smqy1AlmR/7rQW20+svZM1voRZa1BHtfhIqw0WfxfF2XjOlc0xquH0cnUYzzjP68x3iS9lkh3DSFrW+RFdN4QfBqCj8IqecRa8YhV84jFcYT118/+d2ZLh2qM6RG/q2KLR/wD1fZ4xL9Yz7GtJ/xd7qM4Nx6D0C+OIwYZ/4YLGhO7RfUG9cMxqClkbYs8rkNNwacp+CiskkesqkesFY9Y3D8INA+1z20JJmVjnutrQR6vjTgqPyYsU1rWj5SHuEzH8qAvmWwx5X05O4aex1P94xLxDtN+XNwN237sHqq1In/424Hbp8vbYdunw8Dt06V91Q/2aN9N1cZ51M/Af5ph8Af6aQXBv3jZ8FeD4G8O/HMtCH5vUL/Wg+B3Nwy/HQZ/4J8nguDv9Az/ZBj77hn+qTD6GfRfb3LDxP3Xm+G6x7nMbkT8nNP9V+PfIFlD9V9vJnlYP9x/PS1kbYs8bsNPCz6nBR+FVfKIFXvEqnrEWvGIVfOIVV/QMjY8YjU9YrU8Yq16xFrziLXuEavtEeuEJ6w08ZrTLHKdXFC5TnmU62yyxFpiLbF8YHFfNE397NiZKXUHffhb3FBuj3t69qyfeKsbT5Z3BnjfRHnvhjzsi3NS82NWprT/c/4I82MYE89Q3rsgz2RbJ9kRI+w4otOJqKy2B415mmwlN25vO09TTNf+mh1THf63PLwHMZ0rHiuotuYm0g/qLvKmn73eqihjRLxvhevHMcYz/g0Xsi4Ox3i3kjysHx7jnRGytl1+3Y0oD/mcEXwUVuQRq+QRK/aIVfWIteIRq+YRq76gZWx4xGp6xGp5xFr1iLXmEWvdI1bbI9YJT1hp4nHZLHKdXFC5TnmU62yyxFpi3bhYYdfZjz4OO015OA7D/iknNQ7DfQr2kNJR9ymYbLxP4Z7sZJH2KThvfLu5e5xxHBpRntF+nHQTaP+l1E3s5mGX7jaP2TFdi3/edo3+yfYwzEr2Y/+wZ2DYZg8vbTaWJtnsfXOymT03wzZ75ga3Gc+NpQnbSE6T7PmBY66Dn1rac8ye+Mwbp0WxZ179/OwC2ZP7Dz54Hx4ebqq9XL7wd64wMNltDiZ2w7nkFukTy7saQJ40mTxrhM88yyAvyv+FzBDpHNxz2Tk/j4f4Kd3zBXRlQTcvm9Qn2CRaMJtwf9XkfwFs8iXSdSPHJkkBXSTo7LrVyzLIiPZknCbo0K7jfGSdymT0X4EyfW0OfoF2iAmfefJcts1Hl4CeafC8JPBxfaPoOaCQ5a2APCUhf0z03yC7hHr3jmofWEfL+D1d/H4J6tW3p4zfL08Zv19esPhdWTCbVMgmJv93wSbfmzJ+f7+AriLo5h2/fwhl+tF1Hr8rRD9t/J41vv54geIrl9kH7ytVeStk3cRYUQMdF8VL9WxECB9dJ3zmyfHb5P8p1KufUwzAOjp4N9KV3y8K6MqCbl42aUywSWnBbMJzySb/K2CTV0nXzRyb/LKAriToOFZh/EZ78pp6C3Ro11W8j4n+V1CmX8/BL9AOVcJnnhxfrT3C+M0YSK/aB4zfK260vNUw5e2x/Ng+qHdkcF/ut2QX7pf1/cgp24faFDqNSJ40Fb3Hr+x0+4y4ZdIB266Uow9fdtvtDP1U9T/Vu1ZUHj/7n4cXCzzWeUngMj/MUy8SR3run/4xM0LK/054362Kmf3sf2eGNKmN4H0wKE87gDwdsPkJwmeeEenQ5H8N4umfC2K/4ad0fymgiwTdvGzSmmCT0oLZhNttk/9vYJO/k65Xc2zyegFdSdBxjMd2G+3J83xroEO7jmOzFpXJ6P8JZXpzDn6BdlghfOaZF4+w3WYMpJ/UxtTdaHkDjVkOpm232e+M/j9kl0DvVpHtNusoDqCjK2mDdeRAR6r9Ue/JwzrDvsFyl4UuK0QT0XWMX3n9Y8yb1M4rv3AT5ML7S6Lsil7h1wQ9+10tY5DSdqkdDzG2mjRXp8a784pV3D4wTx5/m/xrmQ7T+NrOztUcnOGndCcL6MqCbl42aU6wSbxgNonJJib/LWCTM6TrVo5N3lNAFwu6onZctctGP3gPNlxX4/WY6G+DMr13Dn6BdlDtOPLkdhzjl4qPPJ5TcRnHcBxPLQ/bWRyTc7wz+g+S3o7jXaWLsj4VkTyLtpZt8t8Jft+hOpq3PrVRQBcJukVZn4oXzCYcX03+XbDJXQVtGdrkngK6WNBxbAi9PtWHMt07B79AO6j4p9YtjV6tT+XN4XAsVeMknj+1vLz1Ke4LGf2DpLcK3dP3pDcVX40Xfl+hkvjnv7P7tt3SZN+2iN343j3kHxP9o5me0HexHP1rlPNwZ797uLl/uL+1f+lS72Cf9ZSmEugJ39G+7sZ9hduIUPY0XrguWs7haWVgP8f3E/O66QUY5/Cz12i3srhm+mq78XpTpvvUWN/oGJtlVhhlOp/GRqHWhLlfgTaqCplVvw/H/tzO7we2EWNhncXvRHDsVGNr5H1fosvzGYqFx7EWo751xP4Spg/cnfqZff5+VTmIPMXfr1K+FNZu3UF9Uu/urwn9qLX6vPeWx07Pf/H6E7Y/+N5dXqt4PlNKmzDTdDYZlaEuyoPXcE7889QnRNtEOUfD5WscA/LWA/N0jlj8nYiisaj9bzodr2y/f9h3nA79qSnKVdRfboH+GEPR83sIGL9F/NW3ASKiKZKvyI8Nh8cnr0Jf/qs54wnExnYYv9mEbVvVDe2KNDxGMvqvQ3t2Jzy3wf5xfzLEf5FkRWwVq+wbJNzf+RaU/5tw/u8j4LOusGwuR54Hc+R5CWR4ZQoZkM8jOZjfAf32KqOYKgapWMFxE+nR3/ibJNhHaFDeNPHZ1ifSxN/YQnqrhxhb0Fc5toR5P3B3bL6g7HSsYP7rUF7GUPQ8P8X46zn6Qd9BW9r39Xis/wPhO+p7lbg2lqYK5PnsK6Vy7FCMwPfzx8loufH5r7KgZ/9eE/Soe/5eAtqIbaLqFuqc46fdX3XFbQKvxf+kYG0qzHu2h34+8AU3Xu8Uf9MX+vlqAT23cYzP74hRMRLtwH5u9D+b0s95zqwCeaH9fGTcnoyWuwV5qq1mP1f1Qn0Xou0m1wG1XoHtF7fl3Fd4kcZ/3G/qZ/87M6Whzzao3Cwb82+CDpVfMr2aI0R8w5tmzBlmf8P0Y07jP68xp4qZasx51O9psU2u9VtTaTqbLLGWWEusJdZ0WEXzLIswT417m6eZp1b7MdLEcwv/CDxPrb5Bb33qVP43Spon9g3xXh4/G/3/YEz+LzFHoL6RynsYsGz97NiZLW04KoPaD2J6LNP/9Jy/ARy50T4jYuO9TmDhvSiDmutT+sf7Wf+l7CTV+YfIj9Q8SwTXWEbVv1D7YVS9rFMe3le0P1fNX/B8Ee9rY1l5rGh9yLy5try1+2ZGjHNtjDnt/OxyDmW6OZRToPOisSU+N5qmCuTdaHMo81oD4Dl4rvPMfxXKrPyI6SeNBdknVYwsmr8w+tun9LHjnL/AWMI+pvpZqj/AOkf6orEg2qhKeapfptoa1WdRfQ/ulzDuG9AvOlfS99h96ujc+Fg9TdxnQqwHkrePal7eMBZlXwQ+m8f2KdoXsQN1gPubRftHjBfqLhLyTFqTujuHZ96aVN56TR/6Ox/LzlUfE/dxKbvmPfvg3HR9JbX2WzSGQRvWpsAqFfBW/bRaAW+1b5F54/vbivpuVSGTepaU65mK98rv1DqgmiPFudS7wbd5H9o7sS4/HbguK39mH2TsvDpUtF+/nnO9n/3vzJQ2xvbGxEJPysdx/6Bz43X0vmQUz+g/mdniOJ+/U+sh7Pdh9iJN/30V499w47YIMW+u4quqE2HtttEpit9qX4qax+e2o2jchbglosdzux+vfS4znM95wDT2fbo8Wja0TZRzNFy+xrEMdcPPQKDO+9mxM2NyVFbTIcZKnmsw2tehH/McxY1A4zr5fB63Vao8Rv8CyPxFkjnyrt+NjvmIajPVPkaTIaX/A7WL6I9Gh9/e4DYA55AUfZ6OEmibuzTGU/sS6268Xh5HTDb+DaGPEDG5SfKwfngtsyVkVePXvH2JyKcl+LRFHse5JdYSa4m1xFpiLbGWWEusdxqWGkdZn0zNJUbZuRq3hJhPs34fzqc1hKxHHev+pmA+rWhOy3ih7iIhj5qTwb0Yv8vhiWN6vPfRZLQcRv8nGJ/9vmBu3OxbF9j97NiZLXVZB/ZfzRurcV5Eeep5CBznFe2jVWtOdcB4i3RV9A4mtReh6LmfSevibEujf02sWRbV9Qiu8VztpP3M/OyJ2keg1ktxH0+aKpDncwyr1ktHnjNMJutHzUdNqx+zr9rvze9OVPFC+YeKtSZj0TvLMF6ous3zXse9xmGyHXWN482CmIy+XuT/bTeuR44rak1JxQucw3yLYg7qv0wY6Gu4Jun7nQ37O5u7Bxu9g52LW5v7m9tHemfDcn19yPNa1+QaWYGPa319raJ55q2vc7tj9KcqQ8wT2flyff3GXl9fA9/mmIE2tO/3NaegPZ9Da3RW/gaU0fBV3EDZ018/+9+ZKfXG3q2EayYq7sdEfwfo7nxF6wPLG6Jt2Njd3d7buNjp7Vw6OLzU25zUNvjm39va3znY3+l293rdy73u1rz5H2xtXzy4IkTncveqOibxH3xPIRnmY783TSvZf2tHmN7wYqK/G+LrR2kvYiz4pXSPFNBFOcerGOJaJRm9Vk/G6cvJOL3xbiTjMlpeE/Ji4tPK/qO+EMvkiIn+HLRBaarBPXZ/W/CvEf8RucU1jLeMVRbXsD94bybjYE0QePteO7vKk/DxGstmvhOkXu1tH+5tbl7sbu5durzX3Z5Ur/4PwW8Nc4W8AAA=", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_0.snap index e3b2ef4208f..ed5e0edece0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_0.snap @@ -74,8 +74,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tdvdbt22EkDhd/G1L8QZcjiTVymCwk3dwoDhBG5ygIMg716OqKWdXOyNlEZuypXY+iJLorZ+6q93fz7+8eXv359e/vr4z927377e/fH69Pz89Pfvzx8/PHx++vgy/vbr3Zb/qXH3Tu7v2jaHMgeZg86hzqHNwebQ797pGHwOsQ+2zaHMQeagc6hzaHOwOUzFhlLHEPvQtzmUOcgcdA51DkNpY7A59Dn4HGIffJtDmYPMQedQ5zAVn4pPxafiU4mpxFRiKjEUG0OdQ5vDUPoY+hyGEmOIfSjbdozlGAdUtgwlKjEWKWVE2YhCCDH+ySIZ+c1jAxbJb64ZCbaMSjRirGGxjE44EUdoOj0j/1HPyGMhV0yVqEQjUs6fSzvhRB5fuc51IwohhBKVaEQebfmT1k44EUfsx25uhP3o3UMIJVLO7bMfxXsY0Y9Nl8fyjDjC2Kp5RM8QQolK5Irlds7DeI88kGcUIlcst3MezjMq0QgjOuFEHJEH94xCIDuyIzuyIzuyIztyIAdyIAdyIAdyIAdyIMchy7YRhRBCiUo0wohOOIGcM0V6RiGEUKISjTCiHyE4cuxTybkjnmFEfnNk5Jlvy8hz3zhWZZ87OZZjlGPUY6zH2I7RjrEfY4qSEUfknJlRCCHyrKoZlcgza650zpkZeXZtGU7EETlnNLddzpkZQqScWyHnzIxGGNEJJ+KI/TNgj0IIgWzIhmzIhmzIhpzTSXMf5HSaIYQSlWiEEZ1wIo5wZEd2ZEd2ZEd2ZEd2ZEfO6VTzKMnpNEOI/ETL/Z7TaUYjjOiEEzFDczrNUCKXkoxcn8hwIo7IqVI1oxBCKFGJRhjRCSfiCEEWZEEWZEEWZEEWZEEWZEVWZEVWZEVWZEVWZEVW5IpckStyRa7IFbkiV+SKXJEbckNuyA25ITfkhtyQG3JDNmRDNmRDNmRDNmRDNmRD7sgduSN35I7ckTtyR+7IHdmRHdmRHdmRHdmRHdmRHTmQAzmQAzmQAzmQ9/nVMpyIGXWfX3sUQgglKpGyZRiRcs9wIo7Y5+AehRBCiUo0wgjkglyQBVmQBVmQBVmQBVmQBVmQFVmRFVmRFVmRFVmRFVmRK3JFrsgVuSJX5IpckStyRW7IDbkhN+SG3JAbckNuyA3ZkA3ZkA3ZkA3ZkA3ZkA25I3fkjtyRO3JH7sgdeZ+DnhFH7HNwj0IIoUQlGsHi+7SKjPzmmlGJRhjRCSdiRtun1R55S7VlCKFEJRphRCeciCNyWs1ALsgFuSAX5IJckAtyQRZkQRZkQRZkQRZkQRZkQVZkRVZkRVZkRVZkRVZkRa7IFbkiV+SKXJErckWuyBW5ITfkhtyQG3JDbsgNuSE3ZEM2ZEM2ZEM2ZEM2ZEM25JxWbX9qUQghUs5HGDmtZjTCiE44EUfsjxn2wNkfJ+QRvj9QKBlOxBH7Y4WWUQghlKhEI4xI2TKciBmW82tGyj1DCCUq0QgjOpGyZ8QR+/zaoxBCpBwZlWiEEZ1wIo7Y59cehRACWZAFWZAFWZAFWZEVWZEVWZEVWZEVWZEVuSJX5JxftmUoUYlGGDFkKxlOxBE5v2YUQgglKtEII5AbckM2ZEM2ZEM2ZEM2ZEM2ZEPuyB25I3fkjpzzyyTDiE44kfL+ZHAjCiGEEpVohBGdcAI5kAM5kAM5kAM5kAM5kOOQ+7YRhRBCiUo0wohOpLw/EI0jcg7OKIQQKefjz5yDMxphRCeciCNyDs4ohBDIgpxz0CzDiE44EUfkHJxRCCGUqASyIiuyIityRa7IFbkiV+SKXJErckWuyA25ITfkfQ72jEo0wohOpOwZccQ+B/cohBBKVKIRRnQC2ZD3ORgZhRBCiUo0wohOOBFHOLIjO7IjO7IjO7IjO7IjB3IgB3IgB3IgB3Ig5xzsW0bM8JyDMwox5F4ylKhEI4zohBNxRM7BGYVALsgFuSAX5IJckAuyIAuyIAuyIAuyIAuyIAtyzsEuGYUQQonjssdz6vU9OuFEgjVfoGxEIRK0DJ3XP75fXu7RiOOuxHOi9Z5vYDaiEELkiuU350Sb0QibNyO+36Pt4UQcsd+j7VEIIZSoxPGczXNa9f1v4oicVjOG43kg5bSaocRwPLfhfke2hxH9iJxEntswp4zn1sgpM6MRRoylfH8ZNdbHc6vmlNkjp8yMQuT65BbLKeO5qjllZjTCiJRzG+aUmREzYn9JtWUUQgglKtEII4YcJcOJOCKnzIyUJUMIJVLWjEYY0Qkn4oicMjMKoUfkPo2a4UQckft0Ri5Vv327v+PN6O+fXx8f88Xod69KxwvUTw+vjy+f7969fHl+vr/738Pzl/2b/vn08LKPnx9ex1fHZnh8+XOMA/zr6fkx69v9Zent+qLj5YMdS8t423AC7UehXBfGo6sDGM+uFpav+SRrLt/8bct3XVn+XP9xT7+wfMtrprl8L29cfmX7t7yzO5bv15b368uXzgEwXuat/PvB8uOGamH58ZKaHTjeT6+sQXS2YPS6snyeCN6yAqXoKYz3w0sboV02gq1txhoXoSwJfh4JWywJZevndii6tA7RLsL1nRm/7ngeP8NlQ8bi4RCXw8GXhLy3OoS+tg7tckgunRft3I62dDDYuQK2dDj2wiYY930rW0Dk3Avj1faSUPUUlj6bfliHFm8V7Op+vPkJfx6NMl7NLwm9nEJfFC7r4G1J8H4KsbYdzlOL6FZWhPHO+yLEkhAc1DLe0K1tye0iXF0HfesJ8iYQ5/FQwr/bkv9BOC8aZPv+qvOnN4OdV00jlw7JLpyfZDytuSbkO6Prc3M7z9JS+pWf4qZQ9fy4G28tl1ZivDeAGI/+lwjL/2dkEnb98uU2cfnAsuuXsTf2h27niW5Ms6UJ3q2fwvWP3XbrbOvnzUCJ6xcwN4mfmhy3hTdODhVjFVR85Uyncp6nVLeV6aV62Z1aY0kwOYW1Q2qcIBFqebMgS1vyMsO11u3NQlsS2uWnMHur0Ne2g19+Cu9vFZauAH4Ulo7JdjmqxwvyNaFehKW92Yq+VbicH1pf2pKtxk8It85ysl0ePG3fn2r/g1D65TzZloTv1+HamTY/X3/hJYCdB2UZ7wbXPnwvd6w37tVuXZD93N64LfzM3vj5dbi2N/zW/mxcx4iv3PL2836vX7+mvLX8+ak53vosLO/CJhzvSd64/MqjRD9v2X3pdtfrdi5/9fTqv/BZpMu5ArqyA+N8FBlLj688zieRZeVJpPdzB8bKtYJscU7C8UjxB+H9+NPDh6fXH34Z61tar08Pfzw/Hn/868vLh++++vn/n/gKv8z16fXjh8c/v7w+pnT5ja7xn99ivMwKk/f3d+NtyG+q91Xf5+8W5ZfE7kNL/rHkH8dFTWh//y1X7F8=", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 8b1d135f00e..c0ba5e10da0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -70,8 +70,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "5": { "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: TypeDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u128 {\n fn eq(self, other: u128) -> bool {\n self == other\n }\n}\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl Eq for str {\n fn eq(self, other: str) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: TypeDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u128 {\n fn cmp(self, other: u128) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 9ee8393eba4..9e6a7db0c00 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -150,7 +150,7 @@ expression: artifact } } }, - "bytecode": "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", + "bytecode": "H4sIAAAAAAAA/9VaW2sbRxQeybuWVhdLdnq/Jb3f3dVdTm8qlAQSiMGBhCbgIMnx79j3/ojSH1IKfWmhUOhD6UvfCi30V3SOPSN9e3RmbcW7JjNwmNXOt+d8c/bMzJlZldRp+VJLyVwHpi5BfU2li22bmDq+WOnkqCsuimPJA45lDzhueMAx8IBj6AHHTQ84VjzgWPWAY+QBx5oHHOsecGx4wLHpAcctDzi2PODY9oDjtgccdzzgeMUDjs94wPFZDzg+5wHH5z3g+IIHHF/0gONLHnB82QOOr3jA8VUPOL7mAcerOXKUziSpfl3LG1re1PKWlre1vKPlXS3vaXlfywdaPtTykZaPtexq+YQ4aaEDyK6Wnpa+loGWoZaRlrGWPS3XtXyq5TMtn2v5Qp2emy5IoAPpII4OuuggiQ5q6CCEDhpoI08bZdqI0kaPNlK0UaGNACXalMhSokiJGCU6lEjQQk0LIS00NJHTREkTEQ10GkgUqBQIV4HDtafJOWoZVP+ZOjJ1GdpzPBjsRMxunvrH8bgfqXTJmX8vUss4yl9/N45AZwH844rR83Wy1M/7oqC+kSx9eSNJ4yzmJmBuOjC3AHPLgbkNmNsOzB3A3HFg9gGz78AcAObAgbkLmLsOzD3A3HNg7gPmvgPzADAPHJiHgHnowBwC5tCBeQSYRw7MDDAzB2YOmDnD2DguZpz3+8WOk27cVOmxoaAv1nZQjO1OidlTrJ+K2a+pIuek0w9saM/y4f6x102LSZZ8SqwtSFb7YdvCJN0PKrQ+7wKOx1YZcHtwfV2lOZSFPpSEPhQZX+N42C84hmLpHfD3EyRp29iG7yAAf+4y/xQRc+ifosb3FeVe+2w8VBK1KBvMn+gj67Mq4llbBG1BkrZTM78DsIO6LI+Q4cfmd8vUm/CMfb4t2N9k9lO8hXvoI65rQ7hn8ZRbd8x13QjF0E/Am/v9cubY0w0LifWp9b1k0/YJ8XitzDXe+8rU1N9fWP82VNp//J71X1vJayiVpvBcyVErtRrbaCcS+pajr8dttfqeQ2Z7E3jlZHeRS1eK6ddCf7UY/Ys5MCpGf8fqrxWjv2v114vR3+M5Gr5riqd9uI/jOlSr+QvGZMjw34POA3PdUtnrB/5GezjG+Pjjf/Ca5OOnxVzXMPoCB+eA9d/iv2E8m+z5SU48d1j/uS2XTysZPm2oQnzaCRmfw6fQRyUlx3nE8Pb5TcBHgk9Dhp+Zmua/X5lOfGZDuef/kOEfg87fHDrLDp12Hs7af9h+BdCW596NOPwOPPgaHTJOmENk5QJ8DCNemlPaajX+N9XZtqU4kfy5yPtMHbC2ibkfX6jI/sQ9HPdnI6NPSq36syng0WfWR221Ota4P6W8Dt9Nlj9x3qISQFvR/kzlsUm6T1nxptT6/rQ+kvxZYbqkvTqO9yx/Yn5JJUjSHCbmfnyhsv54b2T0San1/cnHu+TPrFyl4NxfzD2y5q2y0Ef0Gc9NvjW1tM+S4keaC6T9yXnmXVyDbZxJvm6sqavGdEUX0FVnumoX0FVluuqCLsWe4+s7zptKyflFJGBL7HdZsCW9N9uGcYc+cM055QwOZ+mvZ+iX+JfPqV/iw3N2i//O1PTO/jXX0rmpjXni3GI6+ZhwjWPEhwwfQH+lHKPK8FtqWXgMKrXqq5aA3wKMtW/7hvNj6xy2sW88b26vyXVbwLcBs8W4Ir/tNbnWzmE7i+uOgN/O4Ir92FmTa/2SuQYCV47lex1p3moybEvA8jgtC7a4HfyN4wx9zOeVLUF/a039QYb+4An5u9ZBPm9Z/A+mJv/9aK6z1mfEca5Knb2v4W0B6LXnR0XmkKPx8s8zNn+1e2ZeAmhH/M/mN4557M/kCXkej6ad4970eDqYHh3151N+9qDAd/UC7E9HvfG825+PZoPetDe8dPvd8Xi4153F/dHR/Pio37ts+/PBcDbvD6bx484JnbPsS9+BcE9ExX5Lwm9NiMdcDPF/WKyWP801/1aI9gj3Twau5KhPdAj3giR9T/oGhd/mLN7ariWrHG1bHdpCZqdhfqO/UJflETL83+a3fSf4Pc0+3xbsV5n9FG/hHv82VxfwdQFP7+cvq8/U2Pe8/z9wYpPpx3ucm42dIsZVT89m4+lgNpp2h51ZPz5rXP0PQ1Bjpo09AAA=", "debug_symbols": "tZfdbuIwEIXfJde5sGf821epUEVpukJCgCistKp4951JfJJ2JadR0N5wvgD+sMOMk3w2b93r7dfL/vh++mienj+b18v+cNj/ejmcdtvr/nSUdz8boy8+N0++bYIZwg5BQ/AQbgg/RBgiNk9JIg2R+4hmCDnKbZPEYo2kaCxJupK+ZCgZS6aSMtzKT2RT0pakklxSfUHSlwwlY8lUMg9pjQGoMSoQgAEO4AEBEAEJkAtYA4DZwmxhtjBbmC3MFmYLs4WZYCaYCWaCmWAmmAlmgplgJpgZZoaZYWY1OwUH8IAAiIAEyAWcAag5KRCAAQ7gAQEQAQkgZrICXsxECmImVhAz6W95MZNXEDPpv+zFTLocL2ZSj4+AVEALPmuqpgfRsFFwAA8IgAhIgFxAO2AACyAAzBHmCHOEOcIcYdZeYl1fUrOuL6lZ16f9xbo+bTDW1WiHsa5CW8zp8L7HesgF+m4y93vbYDN4uV66TveCL7uD7Bnn7aU7Xpun4+1waJvf28Ot/9LHeXvs87q9yKei7I5vkiJ83x86pXs7jTb1oU57sR/sOI3D/ffxtj6eg8evc4imZqAZg8mjgayvGbhukIrkYpDCyzWD+5+GYLRye0MwrnomQ93gLeOv8FJENUOcMYRIMITIqwzZjoZMawzJjnNIzq46k96NZzLXa3KmKG2mBIdwjqMkrKrKekXYubJMuh8Mk0ip+nfYubokbzANYUuVhfzgIJ4cHNY58jSPUJ/HzAmNerswnNAY/ZqtJpowGULVkGcU2Ucocqj2GM1tmCZiHU5uQlYpLE2K1bNwk8Kvm0VCrzty4dFZkIurFBR4vADRw+eCaWVl+QWVNb/t8bjt0aqtN/GXjdOsMlBcsPWynbsGhTxdg6rLYHq4xZgfbrFZxbIW+2EWS1psfhaLWmzpLGZabFaxrMWWzuLfFtvI0Xa3v3x7rr2r67Lfvh66cvh+O+6+fHr9c8YneC4+X0677u126dQ0PRzLyzOZ3BKbTdvIXfazC60PG330kwObXWtz1kOr35TyJubNXSf2Fw==", "file_map": { "6": { diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 9ee8393eba4..9e6a7db0c00 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_11294/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -150,7 +150,7 @@ expression: artifact } } }, - "bytecode": "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", + "bytecode": "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", "debug_symbols": "tZfdbuIwEIXfJde5sGf821epUEVpukJCgCistKp4951JfJJ2JadR0N5wvgD+sMOMk3w2b93r7dfL/vh++mienj+b18v+cNj/ejmcdtvr/nSUdz8boy8+N0++bYIZwg5BQ/AQbgg/RBgiNk9JIg2R+4hmCDnKbZPEYo2kaCxJupK+ZCgZS6aSMtzKT2RT0pakklxSfUHSlwwlY8lUMg9pjQGoMSoQgAEO4AEBEAEJkAtYA4DZwmxhtjBbmC3MFmYLs4WZYCaYCWaCmWAmmAlmgplgJpgZZoaZYWY1OwUH8IAAiIAEyAWcAag5KRCAAQ7gAQEQAQkgZrICXsxECmImVhAz6W95MZNXEDPpv+zFTLocL2ZSj4+AVEALPmuqpgfRsFFwAA8IgAhIgFxAO2AACyAAzBHmCHOEOcIcYdZeYl1fUrOuL6lZ16f9xbo+bTDW1WiHsa5CW8zp8L7HesgF+m4y93vbYDN4uV66TveCL7uD7Bnn7aU7Xpun4+1waJvf28Ot/9LHeXvs87q9yKei7I5vkiJ83x86pXs7jTb1oU57sR/sOI3D/ffxtj6eg8evc4imZqAZg8mjgayvGbhukIrkYpDCyzWD+5+GYLRye0MwrnomQ93gLeOv8FJENUOcMYRIMITIqwzZjoZMawzJjnNIzq46k96NZzLXa3KmKG2mBIdwjqMkrKrKekXYubJMuh8Mk0ip+nfYubokbzANYUuVhfzgIJ4cHNY58jSPUJ/HzAmNerswnNAY/ZqtJpowGULVkGcU2Ucocqj2GM1tmCZiHU5uQlYpLE2K1bNwk8Kvm0VCrzty4dFZkIurFBR4vADRw+eCaWVl+QWVNb/t8bjt0aqtN/GXjdOsMlBcsPWynbsGhTxdg6rLYHq4xZgfbrFZxbIW+2EWS1psfhaLWmzpLGZabFaxrMWWzuLfFtvI0Xa3v3x7rr2r67Lfvh66cvh+O+6+fHr9c8YneC4+X0677u126dQ0PRzLyzOZ3BKbTdvIXfazC60PG330kwObXWtz1kOr35TyJubNXSf2Fw==", "file_map": { "6": { diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 7db840cbf19..0424f45a638 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -71,8 +71,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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SY7X6wUFJKhAFUqoQR0aEDOCGcGMYEYwI5gRzAhmBDOCGcEMMUPMEDPEDDFDzBAzxAwxQ8wozCjMKMwozCjMKMwozCjMKMwozKjMqMyozKjMqMyozKjMqMyozKjMSGYkM5IZyYxkRjIjmZHMSGYkMxozGjMaMxozGjMaMxozGjMaMxozOjM6MzozOjM6MzozOjM6MzozOjMGMwYzBjMGMwYzBjMGMwYzBjMGMyYzJjMmMyYzJjMmMyYzJjMmM/A88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88DzwPPA88Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPhefCc+G58Fx4LjwXngvPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxPPE88TzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84jlttaCuFvTVgsJa0FgLKmtBZy0orQWttaC2FvTWguJa0FwLqmtBdy0orwXttaC+FvTXggJb0GALKmxBhy0osQUttqDGFvTYgiJb0GQLqmxBly0oswVttqDOFvTZgkJb0GgLKm1Bpy0otQWttqDWFvTagmJb0GwLqm1Bty0otwXttqDeFvTbgoJb0HALKm5Bxy0ouQUtt6DmFvTcgqJb0HQLqm5B1y0ouwVtt6DuFvTdgsJb0HgLKm9B5y0ovQWtt6D2FvTeguJb0HwLqm9B9y0ovwXtt6D+FvTfggJc0IALKnBBBy4owQUtuKAGF/TggiJc0IQLqnBBFy4owwVtuKAOF/ThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvThRB9O9OFEH0704UQfTvTh9OnD7a+u3J5/qEIJNahDA5qm7fmHAmJGZ0ZnRmdGZ0ZnRmdGZ8ZgxmDGYMZgxmDG57soNzWoQ+8Z0Te9Z8T4w/rezRcUkKD3jJibKpTQe4Zemzo0oGlaDh4KSFCByFtuKRYtt6RNBapQQg3q0ICmqZC3PDq01qVsKlCFEmpQhwY0TcujQwExozKjMqMyozKjMqOSnGy/ZPstZ/T5WtQKJdSgDq11zk3TtJw5tGa0TYIKtGb0TckjGtQhZjRmdGYsZw4JWjP2UbecObRm7GNt+XFompYfhwISVKAKkbd+Dh7qEDMGMyYzJjMmMyYzJjMmMyYzJjMmM6Zn7B7ZoYAEFahCCTWoQwNiRjAjmBHMCGYEM4IZwYxgxv5Kk9emadpfavKhgAQVqEIJNahDzBAzCjMKMwozCjO2v7GpmT7fFjs2xkVdLBfrxbzYLvaL4+IE807bX2rc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", + "bytecode": "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", + "debug_symbols": "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1wsKSFCBKpRQgzo0IGYEM4IZwYxgRjAjmBHMCGYEM4IZYoaYIWaIGWKGmCFmiBlihphRmFGYUZhRmFGYUZhRmFGYUZhRmFGZUZlRmVGZUZlRmVGZUZlRmVGZkcxIZiQzkhnJjGRGMiOZkcxIZjRmNGY0ZjRmNGY0ZjRmNGY0ZjRmdGZ0ZnRmdGZ0ZnRmdGZ0ZnRmdGYMZgxmDGYMZgxmDGYMZgxmDGYMZkxmTGZMZkxmTGZMZkxmTGZMZuB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54LnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeC8+F58Jz4bnwXHguPBeeFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5wfOC5wXPC54XPC94XvC84HnB84LnBc8Lnhc8L3he8LzgecHzgucFzwueFzwveF7wvOB5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK55XPK94XvG84nnF84rnFc8rnlc8r3he8bziecXziucVzyueVzyveF7xvOJ5xfOK5xXPK54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzueDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94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+Zn30dto63db2A/j2Va8SBjxaB0mjzCa8eionrxp835rsnw54ZHdkzckV936yePkK3isfpVHj3KDV2rrV2i+fETllxOebcW1ezx6Q/JX++FhwjdH9bOEbx9hyrNHudFuwqPnzc57OesXCb+6Dg8TevliQumsw/sjmK++an70Psz6yq6b8GwdvnnV/CzhpfsR4rNXi7vZfN4DefZYvXvUTpjPEl5fTHglx8MrHz1vvvrdk8/s/nYrnj3Svsbdk6pf3IpnCevLrHlf7tH7MOtrqUl4dA7zq3V49oq13debrT55nKwpPn7KR3uy3g+X67Oz4prtViyefSSafOj0xidm/arloEfnMMkx+cbyKOG+Wsz57HgQ7x483IpW7xGVj17ztvs+TGv1ywn9q1vxdbMeJYzBWdAb73l1jN+cMDkbHN8+Rv23hFjb+j+fzbVvzgfj0VrwjtQb9SBhvnjtPl89H60DH+SO98chz9ahsg7fvOr9XQm6CfHVhPJsHTirna9avnpf1PoooY57bz7bCl5xPjweFPfs/lcFlv47Eu45yLePUr8jYcb/9TOx356gchO+ffb+7QltcC7WvvHidyT0+OaV1qM9qcY6qD9KKPcVZ/n23Px3rMPgFUZ5PdmTSX8gH+2F5MG+RT64fdxXOPFqjxL2r+J8En712cPvSOB9/4jxaB0Ku2FdO/tJQnIGE786m/wdCY3z8hzz0VZwLriuXv8ooVKwKfloKxpWrasyPknovPuwrrH2JGHe/TD1JKHT/O31SXF3UoX51TuTv/32fCz5q/bGb789QsyeX1v//3b7f3v/7fs///jLH79p8//jnyvplx+//9NPP5y//sfff/7zN//7t//9V//Pn3758aeffvzPP/71l7/8+Yd///svP6yk9X/fvc4f//p+c/4P7/O/f/vDd/H+W8n3pzjvz0jH++/l/ff3u1tz/9/60fVrWzHWf8X+2fJ+PfX+o/7bP9eq/h8=", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_0.snap index 949041e4715..da422377b67 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_0.snap @@ -71,8 +71,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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Ljm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjloL0n4JoMcCiihBnVoQBNihjHDmGHMMGYYM4wZxgxjhjHDmOHMcGY4M5wZzgxnhjPDmeHMcGYEM4IZwYxgRjAjmBHMCGYEM4IZyYxkRjIjmZHMSGYkM5IZyYxkRmNGY0ZjRmNGY0ZjRmNGY0ZjRmNGZ0ZnRmdGZ0ZnRmdGZ0ZnRmdGZ8ZgxmDGYMZgxmDGYMZgxmDGYMZgxmTGZMZkxmTGZMZkxmTGZMZkxmTGYsZixmLGYsZixmLGYsZixmIGnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3P6XIZZS6jzWXUuYw+l1HoMhpdRqXL6HQZpS6j1WXUuoxel1HsMppdRrXL6HYZ5S6j3WXUu4x+l1HwMhpeRsXL6HgZJS+j5WXUvIyel1H0MppeRtXL6HoZZS+j7WXUvYy+l1H4MhpfRuXL6HwZpS+j9WXUvozel1H8MppfRvXL6H4Z5S+j/WXUv4z+l1EAMxpgRgXM6IAZJTCjBWbUwIwemFEEM5pgRhXM6IIZZTCjDWbUwYw+mFEIMxphRiXM6IQZpTCjFWbUwoxemFEMM5phRjXM6IYZ5TCjHWbUw4x+mFEQMxpiRkXM6IgZJTGjJWbUxIyemFEUM5piRlXM6IoZZTGjLWbUxYy+mFEYMxpjRmXM6IwZpTGjNWbUxozemFEcM5pj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", + "bytecode": "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", + "debug_symbols": "tZ3bzuPWlXXfpa59oXXYp7xKEARO4gQGDCdwJz/wI/C7t/Yi59ifG6hChdV9Yw3bpblIikOUyFnUvz/95Yc//etvf/zx57/+/b8+/e73//70p19+/OmnH//2x5/+/ufv//nj339+/9d/f3rtf9irf/qdffd+HPfjvB/X9Wiv+9HuR78f437M+7Hdj3ee3Xl259md5++8vh/tfvT7Me7HvB/b/djvx3E/zvtxXY9x58U7b+xHvx/jfsz7sd2P/X4c9+O8H9f1mK/78c7LOy/vvLzzcq/va0MXDMEUrBvaS2ACF4QgBUpuSm5KbkpuSu5K7kruSu5K7kruSu5K7kruSu5KHkoeSh5KHkoeSh5KHkoeSh5KHkqeSp5KnkqeSp5KnkqeSp5KnkqeSl5KXkpeSl5KXkpeSl5KXkpeSl53sr9eAhO4IAQpaIIuGIIpULIp2ZRsSjYlm5JNyaZkU7Ip2ZTsSnYlu5Jdya5kV7Ir2ZXsSnYlh5JDyaHkUHIoOZQcSg4lh5JDyankVHIqOZWcSpaDLgddDrocdDnoctDloMtBl4MuB10Ouhx0Oehy0OWgy0GXgy4HXQ66HHQ56HLQ5aDLQZeDLgddDrocdDnoctDloMtBl4MuB10Ouhx0Oehy0OWgy0GXgy4HXQ66HHQ56HLQ5aDLQZeDLgddDrocdDnoctDlYMjBkIMhB0MOhhwMORhyMORgyMGQgyEHQw6GHAw5GHIw5GDIwZCDIQdDDoYcDDkYcjDkYMjBkIMhB0MOhhwMORhyMORgyMGQgyEHQw6GHAw5GHIw5GDIwZCDIQdDDoYcDDkYcjDkYMjBkIMhB0MOhhwMORhyMORgyMGQgyEHQw6GHAw5GHIw5GDIwZCDIQdDDoYcDDkYcjDkYMjBkIMhB0MOhhwMORhyMORgyMGQgyEHQw6GHAw5GHIw5GDIwZCDIQdDDoYcDDkYcjDkYMjBkIMhB0MOphxMOZhyMOVgysGUgykHUw6mHEw5mHIw5WDKwZSDKQdTDqYcTDmYcjDlYMrBlIMpB1MOphxMOZhyMOVgysGUgykHUw6mHEw5mHIw5WDKwZSDKQdTDqYcTDmYcjDlYMrBlIMpB1MOphxMOZjloG0wgQtCkIIm6IIhmIJ1Q1dyV3JXcldyV3JXcldyV3JXcldyOegbTOCCEKSgCbpgCKZg3TCVPJU8lTyVPJU8lTyVPJU8lTyVXA7GBhO4IAQpaIIuGIIpWBe010tgAheEIAVN0AVDMAVKLgdzgwlcEIIUNEEXDMEUrBtcya5kV7Ir2ZXsSnYlu5Jdya7kcrBtMIELQpCCJuiCIZiCdUMqOZWcSk4lp5JTyankVHIqOZXclNyU3JTclNyU3JTclNyU3JTclNyV3JXcldyV3JVcDvYNXTAEU7BuKAcLTOCCEKRAyUPJQ8lDyUPJU8lTyVPJU8nl4NjQBF0wBFOwbigHC0zgghAoeSl5KXkpeSl53cn99RKYwAU7eW5IQRN0wRBMwbqhHCwwgQuUbEo2JZuSTcmmZFOyK9mVXA6uDSFIQRN0wRBMwbqhHCwwgZJDyaHkUHIoOZQcSg4lp5K3g/7a4IIQpKAJumAIpmDdsB28QMlNyU3JTclNyU3JTclNyU3JXcldyV3JXcldyV3JXcldyV3JXclDyUPJQ8lDyUPJ20G3DV0wBFOwbtgOXmACF4QgBUqeSp5KnkqeSl5KXkpeSl5KXkpeSl5KXkpeSl538ni9BCZwQQhS0ARdMARToGRTsinZlGxKNiWbkk3JpmRTsinZlexKdiW7kl3JrmRXsivZlexKDiWHkkPJoeRQcig5lBxKDiWHklPJqeRUcio5lZxKTiWnklPJqeSm5KbkpuSm5KbkpuSm5KbkpuSm5K7kruSu5K7kruSu5K7kruSu5K7koeSh5KHkoeShZDk45OCQg0MODjk45OCQg0MODjk45OCQg0MODjk45OCQg0MODjk45OCQg0MODjk45OCQg0MODjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjk45eCUg1MOTjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjm45OCSg0sOLjloL0n4JoMcCiihBnVoQBNihjHDmGHMMGYYM4wZxgxjhjHDmOHMcGY4M5wZzgxnhjPDmeHMcGYEM4IZwYxgRjAjmBHMCGYEM4IZyYxkRjIjmZHMSGYkM5IZyYxkRmNGY0ZjRmNGY0ZjRmNGY0ZjRmNGZ0ZnRmdGZ0ZnRmdGZ0ZnRmdGZ8ZgxmDGYMZgxmDGYMZgxmDGYMZgxmTGZMZkxmTGZMZkxmTGZMZkxmTGYsZixmLGYsZixmLGYsZixmIGnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeJ54nnieeNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3P6XIZZS6jzWXUuYw+l1HoMhpdRqXL6HQZpS6j1WXUuoxel1HsMppdRrXL6HYZ5S6j3WXUu4x+l1HwMhpeRsXL6HgZJS+j5WXUvIyel1H0MppeRtXL6HoZZS+j7WXUvYy+l1H4MhpfRuXL6HwZpS+j9WXUvozel1H8MppfRvXL6H4Z5S+j/WXUv4z+l1EAMxpgRgXM6IAZJTCjBWbUwIwemFEEM5pgRhXM6IIZZTCjDWbUwYw+mFEIMxphRiXM6IQZpTCjFWbUwoxemFEMM5phRjXM6IYZ5TCjHWbUw4x+mFEQMxpiRkXM6IgZJTGjJWbUxIyemFEUM5piRlXM6IoZZTGjLWbUxYy+mFEYMxpjRmXM6IwZpTGjNWbUxozemFEcM5pj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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 7fffd1af941..6b81d5ad499 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_5252/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -67,8 +67,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+29BYAm13Wm/Y1YI8sayTLbMjMV3apbkuzIdhIHnMQhhxzbt8hx4sCGObLDcRKHmTZxmJmZmZnBQQc2/G92s//zlqbqq6k5XdMj3bamrelEnu4PTt26de6B99CJ3R0/z+S/E6d/v+z0v5ec/lev37o782f67G2n/03u2k8akVZyVGs8cQzWeMkxWOOlx2CNlx2DNV5+DNZ4xTFY45XHYI1XHYM1Xn0M1njyGKzxmmOwxnsdgzVeewzWeO9jsMbrjsEaTx2DNV5/DNZ4wzFY432OwRpvPAZrvO8xWOP9jsEa738M1viAY7DGBx6DNT7oGKzxwcdgjQ85Bmt86DFY403HYI0POwZrfPgxWOMjjsEaH3kM1vioY7DGRx+DNT7mGKzxscdgjY87Bmt8/DFY4xOOwRqfeAzW+KRjsMYnH4M1PuUYrPGpx2CNTzsGa0yOwRrTY7DG7BisMT8GayyOwRrdMVhjeQzWWB2DNfpjsMb6GKzx5mOwxlsirlFru3R35k/s9d56DPb06cdgjc+I/NynNU7P/w1O03/mbvHC8mYuOf1hJW8pOUrJR0ruUfKMklOU/KHkCiUvKDlAwXcFt0/xn4KzCn4quKjgnYJjCj4puKPgiYITAv8Frgu8Fjgs8FXg5sP5T+CcwC+BSwJvBI4IfJBzL+dZzqmcPzlXcl7kHMj4lnGrJyLjTMaPjAspbylHKR8JdwlPCScdfh0uMawY4hmL+z9wk3b7B/2Np+749+rTf1+yeD9iUl569eq6Men7xJdX7878ibz+/OrdmYwXl34+TPQvO5r1J1eepvOGt59Jf7e67vTa7bfv9/L2xXeWn3n54jMvP+Azr1h85hWrz0z3fDQ8URRHvKf5tbsz99G6t8uP5trFidX1lnu+fG+6/sndUfLvHYnQy+tN61nvzyWr/bnyaNaTTPSvOiL60/1ebdzvcv+vXN3vNUeynrSYePHkYj1rXrzX0VzbHZYXp+ufXK31qHjxXruzn81yfyZevHb6zO379Vy9eu+y28++j+m9yxfvTc9XfPf8xf0t31uuZykfJl49tTubV6Z1H+25SYsjPjfpxXMzX/viuVm8d7zPTeaP+NxkF8/NfO2L52bx3lGfm2t3Z/PYtNfTcz4KnxGfLrlov1+49rvFw+v3Lrv97PuweHh6vksevnZn89b0ubD4vV18Zvmd5T2cMO7hKH16+Dd/XfDveI+37+lvPYNLV++d6xkc8fk+Ykwlye+zO5iHJn648vbd/HPpaj+XezTt2VXLz6/eu3rx3mW3n3mdk6f/vmxxnSWtaR2Xrz7/4tN/X3f63ysW35m+f8q4/hWr65+xbuO15R6taV1qvDZ9XnjqO53+Xfpj0mPPvn1PL+Yz1TXEox+7wC2X/LuLd61kkkFLmbjWD1fsjuQ+D60fpuuf3B2pvpr1wxWr9az3Zyl/1vb29N1TxntLGbl8b3mdK43rvK5oXbs7+/5PHPDvdJ31a+vrLHnn8tV1tnjuiDCzQ/PcdP3XFc9Zz2+L564y1nrKeG/NJ1cZ17nKuM7ritb6eevnttP/ntdO4q+tX7nWWNOaz5Yxm4jP9dD+23T9k8Yeva4wKeuZrX3f5XdPGe+teeOkcR3LTzxOtNa4g8mzfeOKYuj7zKeu60I1uLzP6rYNbe37ruq8r5um6JuuqNrcl8WQt1nT+TSUXfB1uubLM2g7V3RVXuapa3xZZkOSDV0Tqo4Xq6FpQ1pXoW/SrA9lUaU5b+X5kPmicmnm2+Zq434n2tng86buhszVTdaUvmm7qvCJK/OEdVaVK+qk6oakTYYGE8UNLvFV63znet9mXbHGYs6g3YYq6bPed9WQ1yHNiqIKrc8TlxUubYoyHVI3+KZIQ+X6IU/r1GWJH1xoQl3ubeh7GbTTtnFDzVeavgyF6+u0SdikjJ8qbeuirou0Lgf2pMuy1nVF31Zp3TY+79uhD/VE+1prv0PdJg2rKYPvi7TLy6RLsr7kVlyXNrVv86IbWiiWdcEz9i71ZdUXZZ9m5RDmdd/bWnfXlU3Iqzzti7rLUjYnL/u6K7q070LHxvTNUDddV/dNUyYhc1nP8yhCmdfJUIaJ9nXWfhehz0LJc+tclrZpGtK0qdI0C03T9X2eiDuSqsE/gY1CLT+l6hKYMxR93s+YxClrT7osadnvpHFtWrA6tlZEeFgsOfR5G3gUacnHkqKukrJsfZP1fV1WPu2qmfb1Fu0+4VDUPkuHvi46x9NKWFWZB6gUbZmWdV3noek7V+RtBWM3Rcj5XUlMReEm2jdYe1IXVRGaqq6btE/zuvD9MPBMs7av6mYIXZ67LqnTFOytSnig3oc2S6o+TVoW3k2072OtO/d1PUCUPWyLhpPf9HmjyxUttDjwFZfq4flQVH3I4M6QcWN10KGtZz650eITNrfMiqEq09B4Tnqo09YNecWO9wV7U9cu7Vxom7JJm2bgEJctl8gHHnFWz+u+r0U7hzfqIS+r1A9V54akDp13RZpnLqR5aIeygcObkscMQw2sPSmTkvObDOz5fHbuZz7LIqS4wKnzSVUVSdaknPK8heXqpKnyuuQRtr6v8yEUReGrhku6CpHJERq6aqJ9f5M20scNXVGENtXRSJuySrow9GnRhqbjLkINmydZxtttjZytSras6wseQjfj2A+w9qTTieRuXV15niG7XeQczaqokuAC5x5GY699mtXBNXUohy7LfZG4ikfazzz4QGvdoeaZw7yZ7wqP5OLBdnXnkgJBiKSrWb1rm6LI0oYLdS3HKmuTHJHbhzaf9/tBFu2hGtq2y3qOW1v2Xd32eemzIfchZHXKsYfR4AoEoqu4MxgqCx2f6crQZGE+lw82aGclUrVmrQOym211Q9XC1h3nxnPCu57jWqPFAoerK/ve5U2K1qsHJGPT7DHOh1jr5oyhV0qHRCl8mfSubGpUF2og+KRr2qIsGpgJ8REQmWxx4Ai4tCrKPMuSWac91Fo3bJvUnQ8DEpa9LercJS3SOwkcxC5JQt617DXHcICT2roJJYfLo6/rHLU20b7JWjdSrc7asky7IqtcwqpDIlWhw5q37GyehdDyIIaUCxdSxS16GQXLxcJ8Lh9mrdv5HFHXspElGrFqMmQ/+rzvhqZJHCcvaz3SBRHY1gkMzXHKQwrTh6Id6nm/H27QTvt84LiUnI28K12QPYKOrFxeFQOaTccqRTjC4JwdtF/WDjz2umQZCd+baD/CWjdioW+bJkfzoILaigeZFhgtiAxX97IsMoyWvvc9lgs6m9XChRyJgi8U87l8pLXf3VDI5kAR8zOI81AQmDhl1jXcuSvrsvNNLYqwUooydrBRWnHyORCzffIoi3aGmJM+YB3s+gBjpO1QwG6YViX8lw0DJyWFIWXy1FLGbZk3bTO0mCez/H60td9NSHvHbbc6E2VVtp0fsqT3WebKIckzjlKSDJz+RpYQn0OrOd7KMDrKdpaDjzHXzQ4WHEvfl76tS0QTepa95NS1riq5WtF3uXNJGAYdJuwLxG1VYBINvZv55LEW7TzNq5TD3JYdSw4wTBuSIqmk1n3XJqg2zm2fpSPztDxc9KRv0aglXDvbsY+z+IRnB3cUemRliXmcu3ootSNdX/NQPVKxTBqdyzrBcMC2QkdkfYpQZz0z7cdbtNGK2cDBKBvOfpHlmD4hqasWNed4WF1T1CXHJ0sw0ts6S/MhGby+wI3wnYn2E6xnKcMY5V6XpePbacWuZ0UW2s6hhpvEo40HVF7AusDmxBzCpq84NQ1b1O5t+yda+40hmeE6cFiGLs/gvKrpncNYLdsmK3LsLE4kHgQmrWf5VVIUSFusW8Rb18x650nWnsDGzg190jnM98GVHDi08BBgoBYGxJwoOx5o11ayZELDzfCMMv6nR+bMfPJka91tySPC1k4DSyzRr1hUPE7nYbNc2gjLZ4Bh0E5NDocgxlvMWu5xSKt9TuBTrHX38Bmc2rAdPE/ny54DorOYNYPjam3medXVXvo4RfZydqqeSyYI5S6baD/VWnfA4fElX+4ajvMwZDUGCCyAFOkwXMpMstUlMEgVEAeIhqJpOWSu7NK0n2k/zeSTdMhSn9cwYs4X8R8wCDFrkwwjue5LrKCkwVLmdAaXhizv0X+yuEo8rv25TCzafYASG+c6UULxpIPnKDoOfDoMrRwomAfJkLjGIWeRwWw8qqlDqPiZv1NrT2CoLMfRw+2DBdoW4ynH2MmqHvcQzkbe5WgBjL8mLWRRVeL+FHGV+mqYaWcmbTQrS0p7DInCyynBEkZFhrbAkMOjqdgzmMLX8uFwm3HrikQyAj9jL2Nzi3aTp7h4bYaziAeFjTNaQzA9Ngh8wCODFxHEsHgomtEJwF7LsYg4q/XMg4VBGzlRY2DWaR38gPmU1+Jh2G2oMSr6rEtQqA4B1g7BuabDbEFlD7hwsqv7WX4761kOfTXg32HbePyOGu2WFmnpkXJoxiroLKbsGZ9x6Hv0UlnoABVsmq410S4t2pgx6GxuNIcqipJn2eHMYwYWXe8HbHpY3UkAdAkirccvajlmaY8Id3s/rbJoYzAM2JacepdLSHfYy4HNQeQ6OUAt9nyPTdJh/+CMOPzDUDaCKLBrytlm8xZt2A0+wXz0pSzswO3ia3Kyc7lq6Hqft5jzSY5qwoFgo7G827bHYsTvnvektvgk4zhgZSdAJnjZIAIB5w9nww9BfIyH1chlaAbcb7RIz7HtOVWJfOO2nvn7ZotPWHJd5DwqJGzbs63oHHwJ/h1SWGNIeHJ4PDxKNA/XxopFvHBTaYWHOdv2t1h70rqyb/IyQ6u0mcyTDoeN8zMAdWDNIwv7Bj+t6LGlkVD4OwMYEC+jQ5K9HXurtSc9FqB8F2QF0oed7/pK1klT4hJinaEx4OdRqAQETNVUVS50hm8tbc2nW7RRWAMutXdo4FwHugMy4WRjIaAnGp5ZVfNMa5f5ADgkpysrfYo/CodXs057hrXfoUpBfKDTSICHyidpMvQlWk6+ddp5nDhcLA4jHOLwfboWkYwwhmOTdqb9BiafYJbheiSu5iH2bA/8hw/S+BqPGhsLznGwPbIhwwiCF5HCKCEMrN5Ve/zkNnO/Qb1yNlsqomU34JOUB5Z1Mp4KYKaK7XIoTmQWHMQhQir6tKoBnnCuJtrPtGjX2AKBJ18NQ1I63DqMCvwE7EvOP/YCohS0CRmARi0Q9dgm4EA90I3uZab9LGu/K5R2UzUQ7jnMOSYkXjbGeIaHxXYIOXKcdoBJriVNwl63LVdzQEHFfOafbdJmcXhQrU/KgW81EoU4wlirVZU2wq0cZz8EXT1Bg8CqsA9IEbgVTuxE+w0t2mkr3VjIjJdDCrqA/cPZA4XhoVV43igMnBz0EygtqgQ8Fqei0cewuibab2TRbnoPQ3X6H5jA90FQZJ7VCeqzQ7UFeLlosQNBPXEyZPfgMeKisBLfz+fyjS3aLeCZQEec4gLlkqDG5T14PA6QqbTUKapGTsd8y5AN6IQmE7DlcSbmPXmOxSd9CsJYClXE3kaEcrAzTNomB5AEui4T9gtrP5eAT3BcsfrR9DxdHlCRz2fnTax184QQmkM3YJNgjmD3IMXxLlkt3hVMghGK/AaarEHFcBZgvCzHWq4AJLNZDr6pQTvl1KAeOShoA+QW/hPbjI8fHEb3kGLfZgI60Am4fchMsHKAkwRNiJGfzrr4zaw9Qdty/sDo8dAxsXLEYtlgXRZZ0Y86AwBG/ofjhNfyU0DskQ6ukIdezs/yzS3aecLN427LzsaaAFOsAddBHJMBNZ5h4NeVkOma58d5Gkr8qRSbtgBeqvrZ536uRdvjqfIjfc6uSHR13CrQKTxcA2kIeM9wCWHVRA5hK4BQDnrBUfKzvnwL61lyyLGrEaJoH8Q20HpgiaC54N9oaB5qjU4fEGi1E5cUOc+cT6GGKszzifZbWutGdoITYGaXGYITUiiWgjvuGk4VnlWCDMBFaHDQnAdT4RwJFcHowGpqZtpvZfKJw8tLgEd6jCthuGkhYM1jUgHFAAp49EErKByhwEnEhc2RAYL2gCtmHOJ51rphWe4VPqg5RQ6FKNmJiV2M2GCKJgIPx/1Mcy8YAv+wQ/ziPBO0ITwz0X5ra91Yr6htjhpsB39hGeMRZA53p4d9Mt0ELmxWg9vqwmicns3jSIGZ937ek7cx192PPJUAcmTYIxx1yeZWpghwFH4OBgYc3iVwPqcyyHAoACDx4QIYykT7bS0+aXvwlgDaW2CvAaYgUICKuI5EtEOhcUBwAkvBSLA/dmeNZ1sliCHwhJkH386iXRA3wCVO0CfYD3kDclyD/lVghfjUgMyoaQR2LySh6cTXaArFGzi+ON4T7be39iSRSEVrE11QvAFPFjgF8xiuhK3LBNbGHat5zgn+BDtcaNGSOQRNqnndz7eeJU4XHiWIMPAtXJCgvgDygNY6DmhQFEYIE8LGD5I7WLAcenjSI4k4XRPtd7Boo8L5Chq3laMRwPyx9cGVeCEdo1EODxiNI3O0JViFSY1QCVgxYO/JrBve0aKN6QiogCbJwc+QUSUuIHE5zj0WOA4bz1gSFyvD6cIoPjQg0gfLGa02+8XvZNEucPlAQYFOcwJyiifKXAIpxHDn+IB1yy5CnmLZoSVwm0FzEnBsghJFN8vYd7b4BLUQ5Li7oegH4HNgR0F2LMqjgJG4bEkpax49LUGCvzDkbowtATXNe/IuFm3WjLMYgPGITIbRGstr9JVOkOA2gFRMYeQ1GoqADhBQ1RD8qQnxYJXPZ/4FBu0Eix5zcpR5OfGXuskJALAjgHiEHggtADOD3yB3sN+cB7IuhOHmirwC4k6039V8lriWxGqqDH3Yi6MLdELhcMk4LpzY2ksOVFroEJCUDvOwDShjbCKuPdF+oUUb7whVAjaDiML4Rt5VRYfhE3Q8sFjZYiyJvMf+xr2s267BaCt8k3QY1fv45Yss2qB9fV844OlaKqsi5iBgg23KeKoANAXPl7M4YHtjpQmSwUxpOjFsusd9XmztdwEHsMcgEbhf2FGgGbg5neDkDlyFVSoM6gk41CkWENEgweRoygB77zHqYO4JrozH6B2dEBgCyd8MDWgBKA/hNKwJoFMBx/iTuPSuIQhBHKhgG7nZ2fZpLNqodMLhAqD7DvS7wPZppdAUg+6w0TjiRc7CkSaZwtt1p2gjgX/AGYCKiXZr7YnsSwz4smf3WsV5CCjC51UgUoSqY6c7bEtMF2IBGHWubcPotLVCVap5Tzpr3VmHpMIZgW2JHBN38vgbuA9CfVpUaYIdL8mNYMWYAi0TxhFKOfRSoBPt3qINcAEKAZMTZCzQDVnZZHABkgUkk6c24MrreGE9I8UBsweEcp+BxDkFDyfag0U75QhwrLXntYKBPCRwiAGYscbS8fjA2PQlWDXSNS2xitpGnlSOYAD/nmm/xKLdDaBHjcsAogKAP9B61ijaX44HnTuBVbg5XFZwFi5F3JdYRA5ggxgaZt3wbgZt2G6Qp4ew6jo4g6Vjt7dwCLBK7htUpNJIgigR3sEBB6OA00slDOAUTbRfavJJipgCk7vDPm0Va64yuCvJc0wQojOYg3WdifOw0XF2sHg6sBaUfQ/8MdF+d2vdYEUEADBA+kQZGwTTMPaIzqUcIji9BBmAvwXlg0rj2GJEILcdXiYIXDbjg+9h7snoEeMt9QJbkh6jGrunYv+xrVCbGCfsLWaQcBqsZTQwgIRsOIXD/JQL9bIF7ROn/52u+56L1+PlbZWHziObrn9ytda469nnkb3naj3r/Vnnkb2XsdZTxnvLvM/le8vrvJdxHYvW1RFpnYxI65qItO4Vkda1EWndOyKt6yLSOhWR1vURad0QkdZ9ItK6MSKt+0akdb+ItO4fkdYDItJ6YERaD4pI68ERaT0kIq2HRqR1U0RaD4tI6+ERaT0iIq1HRqT1qIi0Hh2R1mMi0npsRFqPi0jr8RFpPSEirSdGpPWkiLSeHJHWUyLSempEWk+LSCuJSCuNSCuLSCuPSKuISMtFpFVGpFVFpOUj0qoj0ro5Iq1bItK6NSKtp0ek9YyItN4gIq3bItJ6ZkRaz4pI69kRab1hRFpvFJHWG0ek9ZyItN4kIq03jUjrzSLSevOItJ4bkdZbRKT1lhFpvVVEWs+LSOutI9J6m4i03jYirbeLSOvtI9J6fkRa7xCR1jtGpPVOEWm9c0Ra7xKR1gsi0nrXiLReGJHWiyLSenFEWiEirSYirTYirS4irT4irSEirZdEpPVuEWm9NCKtd49Ia4qRb/WxyFw6ZvHWtavTxKuZWZOEIc2VbFaMiZhZ76qgtLWuGkplSwxd0yoxSZUCW30sMhXF1UPaFU3Ttkq0zwnMt6lKnrsmyRKX1UmuVOmk7kNZc7GyTJusb6qi9fs6aLuPRUm0P619nw4Qr7o+FLlSNpUoVPWdc02dNsNQuix0fDQUQ/BF5esq6YpkXz9i9bFI2nxIXBLKZnBshVN2bO9cz+pDVoc05/0hFM4lTcf+FUMahq5s3VBl6eDzZKuPhToC9HkoQsKudnU21FVbd2Xqy7Zs8z4o78e5NkvSQtl8TZ8NlW+ztm2zPne1m+Lsyz4WJ1bP+d6L1yPmBJQnVtfb7ewchen6J1drjbyeOUfh3qv1rPdnnaNwnbHWU8Z76xyF64zrXGdcx6J1dURaJyPSuiYirYnf13yon9tO/6uCGs5N6UI7FEOjRiBNlzdpm3IaqrYa+qzsQ92GDAFT9nnhOWaFL/s6bZXsv9kPxaepK0qXqt63V+eA1IW6zjmgjQ9p04R6qBEHvh+Kpq7qVP11+qyvoY1wC5v9UBKW2HddmZWFa6o8dCoqbHyiBM5GlatNyFMVmKdF0lep+i3kVVG5uujUAGezH0rXt67oy64ZKodUHELlmlDVdabqGtVjZj370rddkanBQN8pYQ9xl4Q05PsaEKsfSpoU9aCSVFeWjUuHEAbVZgbXlXmrCo4kLbmbvvNZ0iktOsmbJB0QwVkVXFFPZ2bZD2Utb5a5A3eHvJmuf3K11qOSNzeu1rPen7W8ua+x1lPGe0u5vXxveZ37GtexaF0XkdapiLSuj0hr4vdNmVDnaFdlJ4ZKhdkqT8zrvhlKVG/aqKtJ4/JMpfGVVDrCJ+2VDOyqslr0fLBkQoZiloL2yIShdkMCpbbKszQv+iHkuW/VBKJr1FWnKRB8vgy+Loaqa5RuX23JBFWR+LavlZWrvhYt18naGiuhVlpmkXNWVZOfJ0q7LREZQx2KJsvG4u2s2ZQJbeGxQ1TCUg+uG7Iky5xPXZIXTVpjjPm8LEKaDkVXez80VavauiHPOp/mXGp97pe0E8RUaEtf9YNrChX0JglirFYfrZIX+iHHmixVYeVLNcBQx5m6bnyGldb6fn1mpme9fM7LnKC7Q95M1z+5O5snj0Le3G+1noPOyLR39zfWesp4by0j7m9c5/7GdSxapyLSuj4irRsi0pr4fUsmoG+7RD0mmiRpves5TmmahjZzXSgqHKrS1TWmP4ZJg5sylCmCIS2aUHZ5y8HckglZ6r1PilTVz02HpaOWRK1qfVRz3jR1oxo73zaFaqC7ti361suYUHESbsumTMjaqlchcXBZ0eNoeFwnCbcmtD6ph7ZRRZBXq5ACsYCnlbhU3Y9SpNFQt1syIcOTafvCh6rJEVKZyypVshZ9EZqaLUl8mrFDQ4tvVQTJSVXzhb4eOo97Fdbn/gzaXR7GFhO9mj8gCX3iB+/V40m+pUrFGrUUaUKRFGxdV6hAJsUY7FOZbuszMz3r5XNe5vrdHfJmuv7J3dk8eRTy5gGr9Rx0Rqa9e6Cx1lPGe2sZ8UDjOg80rmPRuj4irRsi0roxIq2J3zd9hxBC7no1CmvAKlIBIXmvcr6uxgPBy8nUjiev1cmobgacByyLZBB+0tZVtSkTiq5r8Ea6kKRV2uHspDVfdjWGQDuoli1N6hwPCOzFVWrRmHSl1gLuglWSbsqEXn2Qar7gWZ0KgpPUZ2BNlbovqKtFWallo09LvLXSO2yyNlOZZdN0uCxbMiGpBhYcKgnJsusSXw4VvtPQVWnSOrCmDuvEq3FgUweP3Bz4/8yHsZUiPtL63J+5J0kFnJUW6l/ZelzN0LE5fYFdM/RF3cgwC1w86xo1VORjncenGlRe1pfF+sxMz3r5nJc5vHeHvJmuf3J3Nk8ehbx50Go9B52Rae8ebKz1lPHeWkY82LjOg43rWLRuiEjrxoi07heR1sTv1+7OlglrHr3QfP4bjmY9mz7/Dca+Tnt3P2Otp4z31rU4lq1/P+M6Fq37RKR134i07h+R1iQXtnRLmnmVhfoeQ8/7bnQvccXxRXsEdyi6Qs2uXRvUTjJXb9C6HNQjoVXHv9pv6ZYUF3/wKoT0PZiiKvkzIPuyAWfAxEx9i+1cqOdonVXqxaDGiiryVBe0at/T0NItmNkAlt5n2LE+y4euDeVQhkYNxsEp0a41PkVRVJjepZonDU0HhKpeAmrW3a/1xxnrVms9giJDiSPf83kghTqpXFXlTevLrMmKZgQZRi+8JeQRui6rnFefvywt17J3eh7LZ7Gs8bg7ZMJ0/ZO7s2XbUciEh6zWc5CsnfbuocZaTxnvreMODzWu81DjOhatGyPSul9EWg+ISGvi9017E3wsxdMU4FeDTVWYtqDpOfE64pxjN8kGrDAQhyC+2brGFakMxTwkAPH73oGmTCiHtic2UGHnEenMwOsIeqqTl8Nizmv19sP5bIC6xvJ1NR9Pky7UahSH9NmSCVjCSBLXJWVTEo2sqlbdPRuiBLWvcP/rtKhxrhELjtW7qsdrbjnaxDZCX7VhSybw7SbPigrLFRng8z4jUkIshLBtTqSk9qUiJDVwQyt7HskBVpGASnYh61rfTny9PAdrmbB8TneHTJiuf3J3pDIq3eLj5f6sZcJNxlpPGe+tYwM3Gde5ybiORevGiLTuF5HWAyLSWssEKxaZqGtBOqQDYH8dki4ZAKOI+udlWqLYMzVhaAHyCPZlrq98lSltoW4UvOfjm5hXynfVew3wL/OdXGYigQOhSRxM4nwECIYShK5vQaMywhF5mqhLldobpXle9ZuYV9o3AHocdleraR4yLfWuygf1v2syDQdQF7DODa7v1GmnTtHliCZXCRXclDdpHsARqkzjS9QaOmsENxa+UmvFtBco2CI81YYOWyEBdcOs6bE+vPqN9d21u7PlzYUuE47I396UCcv9ubMyYY3f35Xzck+SL1syIa2bxgfMZDCvjLgXWHRdERSv1Wi87DinGOfBpZWayYMeYZIH7Ie+6ts879t6KxaJ0seg5mChw1tl/QyJGq9xoSEpQujUZ7UYG6MM6vQ8gN0nta7UK4+qabbxtAKrwBFcCDnyJamEzeNKVCD24GUNVr1kmVdbbT9kIUXGpZql47IU4G7T50la8KxELTOHBreEaGTWJ4TvwAT7xuPsuK4HEWzV4YeLsTkpWF6fOl/6ovdzztJS3lzoMuGIMP9NmbDcnzsrE9YY+4UiE2LKqqOQL5s5S41D4fW+Kwui6wPec2gcEey2Ij6e4/XjH4QkFKhf3w3iOiQFxkRPYD0p23RTJoRaqQBtMc79CbnvOTf4EJUvBFUTFUy6lHA9IUMULhZ5Q8zMOdB+sHNfbOcsdU3X5ZzGfGzprnZT6lFWVoAcmScm5kuX9XWSpYWaNHvwa6KRxOsJ+nnuctO+qUKr3Kyxn37Odxv5BThMQ4FcVGvcokKEFi4MrmzGpKK+xv5I2EVlK6xxsul5LJ/FhSYTjijvYFMmWLjY+cqENQ7++igTYsq9id+v3Z0tE9Y8uryHu4NHp+uf3J39fI6CR6380Hsb+zrt3SljraeM99a9Zk4Z1zllXMei9ZCItB4UkdYDItJa6y1LtyS5RsYBJ3tUTF3hjWZ55TAxidESGK7UIzat8WubAjNTYzK8x68FrPIVvzWbuiVVd3EczSBaoaiykOtvh/lXtGVZhEYDKgnZygxUm8wu4wIu68bGsGEz9019ptGxQ9qmaug+jN2J20pNabkFDa5om6px6MSi6DWxyHsMWaDsHnyq7Dbz0+qmTgkPsEw0NZBfHXTrSuklSoyB22uuDbhg0oyd851aWjrcX8/i26Fb66Yz96RTdKDUNIS8VW/7LAUzqJTtUqAii7pni5shE2zXDoPPeMEBBNRFpiDFRNuaQ5aGyveEyR1wpK/VvZdF1tKkRVpBsh3pZCj2JGnZqE4TO9DObdF5jaaaaFtzyDjf3Ti/pm8Ianu1Gx36FhMgCLvQTYltxibJeEFVAtAZuLekJb6iVKSJ9sMt2hrDoHFXnXDFVHlO6p1bgLQMaXAhKYk0aFwd/NITLxkIowhewZ8BYixmjOUR5p50ECyGrFRJR00EI+NxsSEF/2KhVaVmRwa2xddVE5zmN42DWrNM/YNn2o+0aIPClJolWalv+zhGCfiG7XFl0Ye25Hoty69x0MBiMj6UJg0IEaeqUKv+ifajLNoNWGqRDWyAWrdyMvsMcNfhTmqQQJIVWV4MSpbKBMQ2WYCP5KzladP5/RwEcw4Z0Sc2MFTEkgrcsdbjQGqSXN3jRhaFJghUwp8HJdgD8Sa+HEdzVEWdL/pom3PIVAbUqbdtw7HpESEgwxWIcUgTDZXtNStsSPqEAFIfyhCc2icXYw1OW+zPvDWHLPViBkgDaA9lpoOj9LbQharExga6dzKnMTsTTd1q6ybTPIa8BdlCuM17Ys0hSwl4wb6IJLD3PsnYZMxS3xXp+BQzpFMa+gY7PpNlHFLiaTWRggRIvHH7mYnWHLKkqDRVTOfa4SO0Va0xiVDCitfoQiIO6dBU6tKKlOrK3AfAtDpR4isOwnx2nmDRxlsvsJyFt6d5kVQVGFtXsc14DGrHnCIEiC5o/iiBOs2tqnybEn5oNZVnzpGx5pBllXpBA/bVbcHaS44SwcoAokfgjyeqVvEcQQx5FsEzxgEJbdL2DW8OHKiJtjWHTPUFrVf4Ycg0o6tEuNWartT0imFWOCR1ikwMyHaNQ0tKAImGGEaP+HX7HvTWHLKs42TDp5og0PusKfOy8zBzX/uiKptGbcwBInxdaqJXU/IYELQlWMo4BmT2xcw5ZClAiyuBNHFidJiVvD22zQ7wO14SwSDwHl0kJexaqpt+5jRVo1dP7805ZGmbqIN90nV1g6DQzTpcPdRnq4lEHG8VtHnEX6Ee3oKTeBioYgJFCJy57sWaQ5ZpKkDX9QpWdS1R5z5N4PEQWlQlwj9BjWZporkXgbCUK3ppT42PLQlh7+tHEoN2ghAFlyobTT5Rn+4uBRQHAu67tqslUoQAExrqNZMtzwuHEBgGtCqvu3aWsdYcshSxrGktmcsbPTqeI3eC54yRQEQdEZiMLXqJhjfVgOzLcTBTDQHBrki7GWvLTNpE6lkUEX0MiRa9qWmOWYZYIhRYppp15FXZBztq8mGmLF1HXGsccdrNssqcQ8b7qcRpNQ6DIiifDcrAAwgnbkAgPvdZ0JwIzRsIXjNBfNoJQuTS+X6GiDmHDKmDrcGx7NCKbcoB6n0O3qZ+3L2yWQEj26502FQeWYAx1ckXrwvNWErm2RDWHLJEGfkJ/NE16dhk2o0mFtF+TaFgYeqUj1hCznvhDq7MCxgTuc6ZxxKbaFtzyFh1CVsEbCo1ytfRIABKkLMsNaIShBBVXxROZZSYpBnSpytKDZZucg/OMdG25pBJ7sPeOQ+/zpsusCCnqklks2a8wSqAkgHFWZZYmWiPmhvFQBnUZ7zY87c5hyzr88pjNqoCRCPjAEzbemCPXXAyQkFIvG80rq+pUsczTdIcG0h2Bgpklt/WHDJQ0AQdBX9JeqPOfRLUrHvIsa815xQoVdNzUf4as406GNDDaqcvdkpnHrTmkAEId6ENmp6mJt2FJqy0mmCV91gOdc3OagwhOqjM0GY8nIxr8alByeD72YPWHLJEgy8UUwo+Y0808BfbW8O++X4KiKR64V7WVNqDghEq7rCWgbE7YUv7WLk5h0zgs+uGsiDIpYPvVOeWqmYFkCpX+L0f2/Br5Al+xaDu+QENOlS1guwTbXMOWRmIdFUaIYD91BV5V2OD8LQ6DO4cbeZkuXLwYVRifqXmF5fcXYZhFdCnE+1n7CwerPRo8rzNNa2501xvwHaBd2k+KK6W83xRv8gZX3Ml5ZzDmJpcULdu5m9rDhmwfYkmT7CR2QTws1yDf9nnVgNv4RJJJKIFPmCGI195EqEdcNsCJkCz3+/brD1BXQ1FJXu+TJSkBFoPFNdrWEldyFMgwpfkmmRRBI0HQA3hnWByYbLjCUy0n2nQxpbyqZKGMFfZy2ycW5/KGuk1PlEnPfQcSHi8cviLmJ54lTCub1JHjGCi/SyLNj5U0Ah15LyrS7YEixO2KPkzsBVpU91hcWlLpNFQ72x2p9H3MOusG55t7Xcf8gxTHusy1xnxPk9bzG8CG5hrPftasmdtjQOEAhoQxWjtrFYAFUcwzM/SnENWc+46XwrCRbLh8jbosKSsKgRsUckKYNllJlnWdgnaQk4DVkRCWImIzUTbmkOGGIS9EgwxBGDC/gZfa8Kc5j22SMEKv2HIx176HHbYr5cEzDGxEg0Bm2XVG5u0iXCDQucJjgm+nZ7boCFkTZ8nmuPKtvZyocbJ9Bm+Vst6cfoHzZrd63lzDlk3cIj7quSc1crDgXFQuSnWLR72gDRh2+GhHrWHa4bilvHYcXzKwNmd+cSaQ4Y3gMHQiklQlZiWBLrrZlAWTsepxBYnGo6pUyMmcSS8CleQV6VGvVQIzIn2m1rPskpyAvgJRgTmDq6YJnx3mDnoX9iCXXHgDzj0KlB2vgWoaDQTItUYIITKRNuaQ5Z6zqWvlaIDKJAUBc5uBZpSutErSQth9/gphBxANTTxMWjUuKYsZWm9zyM055AV8ivxorseZ7XtBmwQcIOQNR6PVlV5HtMF60EDvZIqHbC1YJMSJq2ado8VPNdcN8ZZ0mvg0yDGzvEO2OW00MAFjf/E6cOXLeVjKqm/HrCVKkwNTbvA95pom3PIeEZZNWbTaxAo0VZsnrptMMyItZTqstChDzAf5GkmfTO+gGBpMBwXc8Xf0tqTCnOja+tKQzEyzVYBTwmAI6WmmDayXHxfq/iTR4jARv5idNVJnirVP535xJxDJgmba8ie4jR44FmuGfccQlVBdL7X0JAGYYOyUY03LgsWW1KAzSCp9jPLn2fRBiyqGszVZtAIIhyqMfGjScU7sHuBj5VyapEJqdK02GY53SH0rkEazus255A5aSusviGo8D6oPjX1jnsecLFDPcB6Xjov10A1oL1OgzeVRgLog2M10bbmkMFrHHasBMx3aHY9WBgYigsFV8Ujbup+UF8QtpyHielTlTijeBq1Zuzu5Yk5hwzUQrOGikQl9y0IHVKciHqD8YFVgW3h8JkK9QHgIyqaTzFiAHCUSFftbXtrDhlYhvBQ5DxIIJxSoPjBTjSlRNfkOMlDxLvlUmhKzTnFbUQvpdwtCOJE25pDBqci9DTvE/sXuKjFlSe0B4RZQAn26AmfOw17CwUIBcHDFE8xTzE2O819nmhbc8jgYhwojl3FgyvGiZoBOYgjNYywIUvDuR1wXTz7WykyT9i/ysWnbbafB/MONp80ml8b5KQP/JMMypByqp1BxWOeaaxSAj4TNJK2B01JVG+N/sPM3c/2seaQJZjDsrbRXfLAEKB9CfuluG14k5qWhT+GpgAaw+/sNZELjxVUrOo0oWzmE3MOGZocIAKHRyM6UQbIqFaZWAHEDcNIeGOCGw70Gqq2CegM/HvimBxVTZybaFtzyORYo66lcmoNjSZmmslQxuHTvCnPNbCB8g4lDcSXaTDPIChbjlyZFfN+W3PIUo5cX6FUNcMKnyDh9EizlZoPzRHXxOREqSkAITLDVerFdiAPtC/pbPu8wORBZD8oQKvJsQCLuOoacdblEO0R5oS69SyRTmIW7G9lgWYBCB7IrUxmWWXOIUsdTIxmgdvASnvNUVeia6/R0SUSG7MfUDoH41CIwXXa/B78CWQhcfUsq15o8UneCStQ/JuDmAc9VZQVcIcHreH0YN4i3AGqNVpSg+V4lchAGOGbfqZtzSHL5Ohq2HutqbEJjvWA8wN38IhbHq2czExlr+h0zXmu8LPBVDWZ0WMLzD7Jiy3a6l+SIuASUBn8GwEbSCPlIncl7KfeQSDdGd4nkEHaazwr8qfydV2pxdJEO1i0AZ/rQmgoxxkcOh0dFKz5ANxQj1oMV0gqqEVlI3TwTnD+iQeUGu80+w2NRbtV5pCwtEozrvGmAUdrYNQ2Lce5fuBeg66k0UqYxwOvZ9wGrn/QyZxotxafoLQ1Dg10O/Gt06R5QBONcSacgBfRIxJKtXzpNRMLnx5PNsNgLAJiF4Ez0TbnkCEqGr4PuYJd8KxXIw6BGKsEcBmXGQsHy0dlfzVOJ5YWvlapIkNkUDXztzWHDEMQ+KJTeybOXaIxWn2RIwcJFCBsSxyUDtcPRxi7DX8IRycIbsGow7vbz/My55DhNuFBYZFgXuLGYw1iP2kcOK7TOF6Pc8tiUwQVECfKXc0hGiRKhwMQZrvKmkOmQbcEizqeJ+BugaVM6K8tVbtdDLlGj+JLpCmITY8l1wlqbxG42BgJAZ9klifWHDJJEUG8uRQPz4uzqYwQrzrKBnHdqYVEqymPwLMpOhrUt2+VpNpIvsy+1Est2mAgSl0FbUWFA7vg8wLf9djNDndbxTcwvabaBVfWMOrAa0JVcWlxuednac0hA87SbGaOZ866OXw9KASuOlECzJ6hHAfc4jBgwqB2ZG5xzECDsDj58D7Pz5pDhozCLmBVAFz49YKYiNoRhCG+kQh7wzlO0MtdhTmI+tRTwUMmnkocrtzXzb6nyYMEKz3gl/II4a0SpwqMRkYWDhOKJdPsVw1plAQGOJHUqhUBJJqJuTvRfi+LTxoV4gPABDzUVt72AOibCfznqGPCo58x0IjkEeLUqGtN3CNMxhEK6qAy0X5vizZAhhBHVIHayQHHOhCqHDmKt4cc0JYl2FmjEEBbI5GRri0wOVK43MuT97H2Gz+n1szEnijUoBopDOQSqxlLEMe3VewM2EuTekv0dt8oHpPVujdXZPu5y//DWrdGBhMo4QiixXGnZAqCmoD/wdaS0jWuNqyhVkxYVDnxmprjz7EA6trPenxfizZxwkYz6tTmhbNJNLeVOwZugi2hWamg0TgMKQIQF1ElzRjhGISZbKVh5u/3s/YELwSHJNPYO5xp7oLvgbkC/yOUZKE1ePpBOIpDd46tpxDs+Jfoel6baL+/ySdYvWCWPP22AkwkWsyRAcoFxkTKcv4IWvZ3GGxI16YEj80lDwmW1fl+3ugHGLQ1cpEYUM4xDkKMcni7BdmVJ8nZke2CTaKIK5azH8cngsm6VHNh+dDsu36gud/qLqjYPgFXDgTgVDl0aHZ0JQCHgKUO7JODhNxSAU0deJqcNDDItt3Pevwga91uPL/Ij4aVJcD+WPNgHcjaWviLeCWorg/dR3QbP6TU9FDOe9sqzj7R/mDrWVbgfGCfMEWieCfsrn6EimhzPXAMHmAugKJC3oD3pRrMTrQQcYLj5uY9+RBrTxIUiPo9Ct9SCRP4NFoX+0deL8Jb0LHT2FDCJ+2AhMAa55gOfZoj0WZZ9aEWbXxQXyiGMwSdYmJagHTAhYo/weidcL3W5xrLqPGVRJlA7/l02/JbOe/Jh5n7jSEJtybc+ABwhRDFcMf0hKUHUBXs/GFMuMDOd5qAjkOV6wSj35p0jz1+uLVuHLpcM4lr2bN4oyAe2BFAhBjbAA0gEoq0gk5wAMAOahzNVvNu8ZPzYY+zfYS1biByNX7B9qhqwW0oE6e8bQJcGU6n6jq6BGwAEZkh6MGwdYiB83mYWTHbmh9prhuhj78wCIwAMka4wSFlCrTIw8o7DYtlb9BlqYxG2KUVFCqTXzbdbGt+lEVbM49RJeDwHWZVLRkHJtp2xKSADLCuwlgnKhNLXRTYvwpeHMYB1e2+nuV2i/Y4b5lYk6B+nrxyx3GPU8Wi5TED5gn1zKtc6aquEFE/Nsrj2oj2ifbLrf0eCGQlguyILosipkMnnG5QS1ACbKHUeHfZ+qWX1sFSI1AscwWkK5v3+xXWurHrONXEdlAxHcyG16pMGkUeJI0KDYgmPN3IC8I4gv2B2/BDFVIP+3V/tEGbKD5GAczWEPEk1Ei0CGuiljmEtFNXVSfUF39TzhuRQTwLAofYnkq22M8B/hhrTwg432EiIYm8VxwUTatUE7xTonQYVISrqtDU41q7Rp9sBKwA0HT7/JOPNfcb2ELgTjWmWACRYkPKna54poDcMj17BAuOeTNo4DyvwdsJUH4ewr4fycdZtBFC7HDayqdxMn2CcDUCSpUMBfwymJM4DX4TcJVQQwxjHnGtdJ1yP5f24639Vi9FxJAT5Kt4LTBGAhKW5RoyD0ofNOMWxEcDlwt8ZWWjNX2CNc3p8vOefILFJ6oF5VgqOy3w+LQtPFzCxMRj0vGhacE5kWJMOtni6omS4hE3OJr7OdefaNKGj7MOvy5plGYFlVKoZUOQMdPk3kHjv4cKBH4QxsJZkBPreA2DbK8bPsnaE0QdXOEI1gQIIv2dMAlfDaC0WDkVYgkXnHew6nEuiaJwYnG16kRxsBmbeaVFG+7gq+h4wD5UQKqMKmKYgNAOLLCQ34pUBRpTyJRNQcoPauFEDF05QBPtT7b2JM1VscJWE17gQaHKOSqY96j2kmOE+m16PLccTBZzDugBv5sHUihNrd7H0D/Foq0a2TYo1pUTzAH5AcUgzo8cUboVyABeKkERofRVplgntjpSQu2/gILmZ/mp1p4QzOAwEPFD2JXyPDhsyN1A/BhzWNhmriJiDePOAzdFoAHDolA2Vuj2uUSvMmgnqg4iwppocrXi2uwAFq3HzsfTQTO0KltoGozwrkbWENzMwEtRGrgu/b5m8NOsPQFLTDlwSUIwB2sBVMMLn2Nn1FCQk4TrXnFzqWIoSmXCRUF8oQqRVd2siz/dos2KGszIXB2dBzVgxkkF0i1xpVQvxasqcyiUAYOJXyopwys4DgzK4Zll7GeY6ybixFnD60bkN0qDGlSCUeQlzOyUdALTDGBDoKugCQSKle2qPFFBK/OefKZFG8nRhnQQhyCeiT4I/lFTB8KuoL/KcxkzKHHAxanqiKvyL7B1HkQ62/afZT1L4jsgdfhMyKVBPYxg3EQVWgCdILXAo/0gZCaoupzQGkZBIr8BnK3B15xof7ZBmxWjxgZPhIeIaqteFAiRhqPNyfAKOsqyAP/hIAKNgYjVWI8DrJkmVb73Lz/Hop3DUeg+tFWvuCUed9FjzFeK7iNAMpn0QN1+NBPB3TDtWrWtBRDHlZn35HOtPUEqtRwZYLwy70AVOXUOfwNXXe4lkArqPpEphV9eAQqGvE+REnj0PKp+1jufZ9HmidV4AC5TRg+6oVBAE2YPqbYKJJOor3BDEPwBkKZREmGpmEarCemzPPl8i0/UOThV2z3FbHGqiKk1GJVI3kR5IVkihwIbHfy0wk5EQFSVUrEIcCQLH/ALrP0mWJMjZLFBEPxyqNkh4naFsnrBuX3vlDWjvK4WpFRGScCdRRMVA07nzCdfaO63UtmEiIayVO4dpmWCfYBewUtGKWI/JThosj6VD5YD9zlcQLxjAojVrBu+yFw3BpmSwACIiI70ss9KYg9AxarG5mb6HNQLTYdEc5x6xHmDfFNMg9M657Z8sbXuoHRjrNMBTlQaUZnp0OGrdjLzM3m16plM8JznDVqQKXIt6YIeLNtZxn6J9SzxbQcdMo+GwuzBNINyI98U38xzvNXoEd8CYK1WIKXD6xnUfLnwBOxmnfal1p50quLiDKc9TCtkEMOB4EgrMECoW99iIFdDDqxRKn0zoEyTgdAVGqPan8svs9aNLFbgggggVjF2L3YNPiUHPu8bjisOjkwV8DuAAXYPny5TAhziRv21Z9r/09pvLBJ5HJhkeNop5wZLFTAXsNFjC47trGXyYMoOZY6f68boWwGmNaCPZvvky609QQx16rbd4ks7jkmlqgTCOlCSAS7fDVAMJEJWHHZgkdQ5wAcOXFsuMOqvsNbNmjX+AFSeKKpLQVASgFKH28nDLZBZMl2AAruqZ4NAOeTTsYl66JiKE+1XW+vmtHtEplcQANWIXdOrQA79xtYM6vlNwAgPEOwAVcO6g7L5AcmEhFQzf3+lud91hWsGBBDULA9F5YAeCYC2iF12HLQDPePAnKAIFJcTFsB96wiAd0qWnGh/lUk7tADrwNxKKFAGODYh3CzYFSvEK9FPrRR6paXBdsCdWc5i9JgAb2dd/NXWniSIhhL4Ulk3bKzkGyYOhptHT6gLoczPMa9G2bbAG0g2WD8ItR32eetfY60beAdovwD8V24WbNOoxgBLs+CMqxogkx07YGkShkA2Fh3yMSgdg9iYn+2Tr7XWzV5jTyHruwG6oFDFoGTsXOUxgJLYxgAI9RCwZYE8gPKxIohVq6syzDM/y68zaHN+e3y7WhhaR5ACraMMFOXtyu7BoOtZPUYl0DrYGxYj4J1X6xcMn3aPKX29+SwHwi9EBQTGOrm92HpwnlMyazdWvBOawoUo20T9qHA7CdPj83eo/mqfI/IN1p6A+yvHu0kcaCvoNhAS8Q+CVUD5PDniI1jeY+vqgTcEhikrpc0LHBMkzkT7Gy3aKEAFvYIvJLKzAHCMzRNks4n3kI8gHoBi4FZdnWeyj2uBTHi2wKzznnyTRRsHKlHmqzo5Av8nPEDcyBZkhkfb9agWB2+iOnIn1QPoDmA6KM2zVVRpov3N1rNM1emyBCrJVDxMCB5UDe+g6NRmFwFAGFcyCssHf40bQj+7waepHMJuL0++xXqW6N/QgQ06ZTLiHkAP2wMjtlR4R9guoBu3Uct3lWGLwVLKF8DiQvVNtL/VWrf3UpdKpPAAOzhh4DTYKCnbg66sENK45TBKj6Io1V6AmKMKWIAQ1RRzov1t1rq7O9CTWktWr16lDWSa04IYxOgGWyZEw3ajCwQXoILwK1vlKmHl7fPtv916lgSxCtUvEZAGcsDTBPlVQ+ZKIcSxKsspTK3ANq6wQx6AaffEXPMBcHKm/R3WuvFfaqEm6vDJ2rDOMHYQ0MC9ABIVlqGTIwwxYCyMIFmEoH2YdTzPMOvL77T2u8VcTYGJWhXYIVManECAwFpISqamFBjdypIjbqFU/kT9mtSQhe+U3T529F3Wuj1yqVQlTOuUdIy8a5uQjd1hlMkOFgmghnxtebZsDEYYnmyBOq0yNbeaaH+3RVvR2jG0DDYgvIo4QyHo1SmHAa+vRzCmUuuc0lYpNGk1ZkdzwlCq8558j0U7x8vBOiGYWGE6qv0EDrdcVA5lK2Qa1E1xS3BdmQM96AGOrVKDBqVST7S/16Jdlx0BWrBNAm9sBNiYlx/pxOC5oE0l8YM5OekIsAdAFZSJ8rjGkv2J9vdZz5IlEeBBPWmcEgKoaspGPagrgEuUu1dRlFoH8CQ7ddzpQq2tziQkk339zvdbtB1QbAFAM4gD5RRwuF2j1JNWCXJph3j3OCjENhrMuKwpE4Hwmv7BEZ3X/QMWbQ1IwltvVHmpjIKxpIgYPy4nIGCGZaj+B1U+Fg8Qg0T0BDmGiDe00mzb/6BFG9uukkwDEiPk5XJ15CZYBj4ChFwAaSiDHMMQr14OG+dfY5JAttXKfB+r+yGDNigruDZqgaMsxGcYvTL0XFsoAwUfhSerVBywPtcR8ScABiiDedGqycvM3z9s8Qk2AYSJNwu5zMecmUKVf6wTQeCx2VRfNObPuT6Xgs9xEDlwATN9X8f4I9aeIN7KWunLmcqmMC/BxIiCJXecdNlqOPlERhCwqVLQCJARUtJlVGc1x6V+1Fq3497Qhzxywgeq8ciw9LAnVNGAJ4+DCPQDfsSZdB1BcSzeFgMCJxkdtI+n/Zi134XDkvEgDYhAr1zMAjMcUa5kZ7xOFXVCCDEjlx9YpsWcATLNUsnIvQ/449aeAERgIqVlrRQKjMEaLyIH7moAkxOZFXDSwFPEM8HJBwUdMG1xLhA3PS70RPsnrD2RDQsIhZToC9wS5XvjYI+ilyUiBVI1ABMy5ofEEUonwoSV3pdqS723NX/SWrdXBmvSEsdheeK0DEs/yGUAosV8w9vj9OACKweGR6xaAaISQTEBt5dVP2WuO1ftooaQtQr2hUFxep8IhEakQN7zAdWltYA/OG9A13lJEDoULXbtzCc/bdFW4zEcdUAdggopEIki6bi+heLkcDxqlFCyctiw9PGehgByQEQMxxhBNp/Ln7H4hAAw4KIyz/D+OUVoBKVtYO9rfhoKvRyjXYo4cGPK3K5VNhmyHOhlXzf6s9a6EXdpib2q052qLBl8jVALnNDgmzRIxgQcHeAeozwEGbW5ZpJoRAJ4+Ez758xnieBDwGHcgadBHnmKD6E02KBheJUgAux+HmBTCq9BWeJ4Ad2gttt9nunPW3vC02FFpeovBkLS6O5WFYqNrxQw68F4gEsbVb5VKhBHtCLVBMygfPy+huwXLNrEtRPZ6g04NCAXhhgmKmADvj3+pidOh/GtyGOiiTdlD75eKmep1SyG/dn5RYs2OJVTDaCAR2QHHqXCaviqY4c8jD9wDiV1EfX1hUqWCXbKTQMSw6OfbftfsvkE7zZVnSUrx2Di5OgAgW7iKIdBCF6rQKQvVQWP48Y2oy+JR+Kz7ecF/rJFG6elrYVYEM9H4ZZKdcwFqLFoghGjV1+VjYovkbOAQhxV7E2FITmvs5/2K+Z+y2ioZUGpeAvRIgGr5PsBzu6J/9VeZwuNowllTiC2qtWVvQ3bzH7Drxq0E0RDR3S0Rdwr7IwDyX1jDXLi0Y5BPYGweAIisi+F3OdjmIkTKnFWzfv9axbtMWOmyVSQhQ2cAkRmDeB0iUeFgO6EUvUyoJGIABs5lkCuA+uVHA68OtH+dXO/RcorfzDwjIhcVk56APcb7dCrjpNzCo8TZSP6BZZH8AjkSkzuy33Nx28YtPFaVEyp/mhqJoDrkSrbb5CH2nlIYOkTFWO7NWEyLYPKe+ASsNhC6aYT7d+09oRD4SvVLyOcUJrQqJ1AL5wJMDs4olA71KCeAqF3aqvm8eWQJSoY3Me5f8uiDQKbZzzGXrVW2DowwTiASpyGEcpddLJhSiwGzTUBWUEK5theKoxNZhv5t609IaJdswe4G/XYb6PssX46FQYS08DKV/JiijBoJHbUbRJV2nIEcoDWdp8/+DvWs0y9YrVaHc8GsBHVxS03SqHJ4GkVJYG5q+ALVwt3Vo00lWGE6sRimffkdy3aOQZbQ2CfKKIECBohU3Ea3houSYM1gqmJl53zcNGqHGGwTgyVGh0L3jqf+d+z9mRQ41xuHGHXIbYV7QL5Ao7BCiJmWitEPahEvGIz+l69QbAFXCo3I9/niPy+9Sy9ssrBcBMCAWqPCwRI8FlgG0h3q3x2AUiqg23FmiC/QO9drbYMgq8n2n9g0UZ7ObYEgBhIBIMHtiYYnEjnVmNym/YYYMoBfvvQ5vA/tihwNpZLu8+J/0Nrv1GOODuogwxbhggjpirStEjhBmyussNgxb/CgwcsQbxmylpUhIINyxa2zx+ZtMEXSlXSKoEe87iQ+FYCIV9X4BzAQ6oDwcdRF3QgSx2vByUhS3ei/ccWbWGZhM0LjOFCYRLsY1UtZo1KJvIS9ACDTuGSaowEEKlq4HkPdtOoyHui/ScWbfVXCKwW011MLYgEaHYQwljgcuc5mJUShoFo1ecZ80Jgu1dBL4J5XvefWrTBMJDMiGx0YVHibvZEQJtOJiem64hfOfSuSttDKm2hTIYWgIy4NcHJifafmetWxXPTqK8bW+6rRNmb3qFhgAUgI74fUJg4b+owCQhWKqNWBZR4zrOe/3OLdgrGqow7UEVCVKqxTPF4aiwRPAmnDLox5VenUB2Eqt5zq+jvFkb1e532FwZtYnBqAqeGHlBTHQ9hBPUoQMhViWzMoZPYRclXqSZPKTsglw5pFNeYz+VrLNqIJ8UhgRpyhKhS3jnv8LHaBxGbH4N/eBaA5EDfQAYVfO6Vddpp5fOz/EuDNrgPIGkPxgiHA2ljxualGk5g6qsDiIKg6GKCmJV6iBK7BzZEMIcxa25fS/tXFm2OC/xN7F/GGN6BHEx1ywGgRr+pYwHgCkKxVUcUKKOCU/ndKvVu9nUZf23RBl8bFNoh6KCSYa+xgWXJwdRULo5nA8soIqHBAOg9ngZCYOz7i7+2z4H6G2u/C6VSZhp+SEyuB1IHsAIM4ttC7dVFGTTIIcYlyjBMUXYYF8iCVmGV2Ub+W4M2z7CuQaIGkLCEcy6AAJAGW43IRVVI6WSo61RNTtU3h8+obrrUEFN4fdbzf2fRRpZg1HPMVEVSY7AKhhHmm2P5KWglgN6DMLWqCOvUJTHTOIlGaOfed32ttd+hauEFAhlNRnSo79qhVXklpj4xXWwuAA1iLj3iEQkCUD1otjSgMAg8Pspss/29td/qdqKAa1NWnQYzFirBwhwrK3UVwF3t1JzWI8EECWImdxJibtxAQukT7X+w1q0C4MJ54WdYnH2qAqemB4NBS6iiVf1aACiIMQFaIx5a5fyj6TuEy0IX/6O130QQCBohHyrFYPwd2b0d7AaCMuBio9rZZtB0+KYcoemgABLPAY9j70v9k7UneNKo7q5C5BFJdC3KE2HXV/L9Bp8MYzIn/JMrbQGLQ2kM4FZAABn6eJaD/8uiDT6N89KDQABU1YRk8jqo8hll1zgNEiGugRmuyjRMKjXOblH6QBVtgl8188k/W3sC2IA9iXkVlKbgFQNVXo7aVWWqqCe82CgDFJELDITpE9TojD0DrCRKMdH+F3PdUOYsNMqGH/ClwKpaAs4BhKNRe4myVc835V2opqxHT8OUGU88yDOd9/tfLdqcDNU5w7mVoixYTuJCFzQvED00DkJINQydILd+45BVuA0pcZjQ7G2If7P2RP1NnPwBmBzRgjIW4uNUKU84RP4UT6RXhxkM9TH+l8sRaDB1ZdJNtP/doE2ETO5eAx6QEuJBkKZqSMAZx1Mi9KN0E7W+gC2xr0oVMnsBLTijPO59vet/WOvuEJ8lwVDOJULaY2ASJSGeBbqUaroK4XJsiwqDC4OzVVou5trYS2tQBHKi/Z/WfpeFEmPxOwD4seqJCA+JQDQpRwwXjMNapq0T8OYFzyJyayWnyD7c1x39fxbtREXyyE/sOzVGK4LAtFr+I3sOjKeSQuIWHM8OuCoQG63cyIZgWdiHE+3/be2J+t30CGzODdK+wWZO205NIlS/APATQE2wDJOSeBc4gUpM2SAtovCLeZX/ZT1LcAzCrcpD6MCuKq/eW0psBKlr1bAkVxy5kvYhBN0NY8arFBtYGcuafZL/Y+1JIchfZY+pimtAZ5D+fI+IT1BGzaAONxqI53ohn4Rf2Wr1JFTkvt73lfu/Fm3cLTAr36IFC/WVwZ9iA+AGwDvkn6J0COuCy6HgE1VNeZhWyKd3dT7rhv+29qSQ11gMyNGKyLsqgYB2q9E5A3oUmIoTSBhKhmFQQRzWEJdRbAa/Zab9/6x1Kzo/KG0ahdCp/LsWFjD2ZRTGiUvcK/bYe2CxVMkzyuYATlatfrmPCdzxPyvaGPFKdPVNl6myC2dV5cXYr14tF/AgM/xr7FrhKhUCvEXSJsFpiKhymCbaJwzaKRBpigOGkd2XKRsNFlurgwvgJaeoUfNItCfCXRV7KpsgCgRUTmRWucAz7Uss2tiXSr4FRVK9eCegJJdxRhgQCDNnhxpkMKGqQQW6Tg3ZhzJpil4JQPu8sEvNPVEfLARthfBXEqymRGh0oVP3ziFTlw8NXMQYAWgSlJdqjD2GZkJor5zl4GXWugdlO+SaLoWvjWOGo54CoIRa1iQBEU2gIHSvEINuDj5HEoDbcptYybP9ffkJiweTTNB/0qWqPML6rhL8Wc3LQBLh0mIaDU2h8dKK5OI6Dwh5jirgJApzloNXWHuCy9jCU4RTUwzAtGU/Pb5vq3oPNHRCwGdQsglRCeK7aiypPm2oJyy5bJ/Xe6VFGyHFuSRq5lVxLgslH4/P2N9EHUA54gmed6LRkoQiefjAbPjpqmLZ57ZcZe13LYhNmFJOwEzeBkFn9c5Mk6Bxt4lkCoEuoDt1wnRgNLjRBeKw4lzt5cnVJg+iFhx+pSI5Teawil2N4Ydt48eZ4GhNp85+BF4x6BXPFHqKcOeR8Hgm2ietPUE55ZiCFS5mSmRHtRcd0TlsP/hYOnoMgbND2Fj4hI2ag6Y8fHVcwfOaaF9j0VZGicflk6eublp8HtutLjh3WG+4IqnUWQm2i7+mEeLqZIIyVWlC7mcb4l7WnijdOhd+pjpdthEMA5tWZiZALGHFVoPSiRlrdiqCFVO90IBRFJLk2uzvXGvuCfF+ZakkY243PJFUSFDYGtMYAaaEPJ6Hjq/aTBHX0KB2/s+r594+Vndva93K4wPbwEZmJ9DD8IIbUzg00AHIU7WoqOBGaQqFUsKQDTwZflfW16zTrrPWDVSJRGNDCdeqTEwVCLnyjguCF65AtaAcEPDEFjG8KrQSzmeprldARvuaj1PWulsWW0g9ALjANKAwSld1Y/JhrzTLXp2IcPMRJyiKoHC4ainUKrfOZll1vSVP1LhIAWKwahzLQW0lpHDrDuGHiCFOMqYFZJIHCrFXkva4okpZQsxOtG+w9iSowQLxFAcU1TdqFlijIBK1uyxrVRwB5mP6Naoqq5Uf3xLiSbA+sXySZKZ9H2tPML8TNdhkDZxj4ESCSFiuRAEaNcwvA6EdhC3GazV25AJE6ZWFJ3ceVTTRvtGizUMkSKcizKxQM85e2T+jVhjUqBHfYFA5EyoyqLGC8mxQdypw6uoFpnRfW+941W1zTHjyxEiASnJUshO2DLiMTVH2mGwqwqkR9Hmi4nlVK/EyDD/Rvp/1LF1WaOwgFgPWOhGjnCVibyvzj4DXgJ3S4Gt2SlytE81dqgc4RwkpBJuqed33t2gj3ohV4CepQankHmeuk4EFMFNxdJBQDbYCmK8a5SmQ75RYoDrtotr3NnyAtSedV0ITgkMRC4wOVBl3ojxCrwgXbhVmChiFU+eSAS1ct4DADZgNLtYeU3qgte7xDBLFScsGsVQobRzUC1A2KC7lxvxm2LFU0VGlvo3jWORx6Dow17zuB5l8oqRu9EOrfBb4LSf27LzkHmFbVFuNGB+ToxoMQPVCqVVermYLysKY1/1ga0+QTio3UIMmB5rUDMpBVGcMbJCgBg6dxuJIkPBJrJieo4U55FQMC5A40X6Ite4mlVfj9W3UjM5MJ7wVK1P+TZnlo2hVEKZVKyoA1ha8o2Jn1M94PjsPNdcNOJlzQojONVKHfB01TIwR5eU1CizNZR0qmRj3njgm57NXN76ecGc/y8GbTD7J9M1s7CqTqQZhaKUHCthYjnah1syVit+d0hxbdacsagQkfNsl+x5TD7P2BDZo1XKnU6BSrWvwVIuhUkumFLAJjqjUQwM+VIcHRaZVe6MgJJH3ZpZVDzf1Dl52psJvzNJeKQWgj7hNfaNAgzqXYsUr0Ko8A+xXzHRXKqNNGW7DPp72CFMOogvVoaXDleZc9l45TmpsjWErA7kDuGkRMFWNVTho0BqHiD+dhqruc28facoTHI4xisWJydtKhXSoKlFFDfUlEUvcVNRMpwJenm8nXAL3DdMDFp3tk0dZzxIgpiQGIJeuVIgF08rJsRw40zxiJT8Dr6hXt1e6WAUqg2OvsLGKCmad9mjT/lbgEPcJlAeB4bz8Ow2NARbPwP/wpwgaIUzSHHwW5FSNPbFYFIFFFs/8/Rhr3QUhSSnzrpcpm6RqlirrAF0MTkfkpRHCm6nsQ/nOSmtNxZ4DmiQNM0b9WGu/W6VSCc5oukotlBAc6otIDAKV7BRGUfMJNW+QvhkADlRrFyTHMK9nWfU4a08CpgZqS5EinqgSdzGIA5LFqWE2QJJOZif/dcDC54OVEq0l0FrVwk+0H2/KQcIJbaJWG5juggTQOTVCSCggiCmhKDUfRkpVKjsP8AbYMI6OohDtvl7qCdaeqMkxz15gKJhbi7jI1CZDaRfYEcpiIwChJN8BGAKHvlHJEGe5R2Ui3ibaTzT3JAOpCjoGteK5Y3rtENjdUaElOBMeoZKBHZaKRWMe4gM26lSNqV/Oz/JJJn/nRaGOluhJXAHsQmx5FYeqjJMD70BiUfIo+i7HiuYItahh9fDH78n2daNPttadaCxDHYj2Y7Tz7NnESrAm51zDyIhbqSBmGBuHcmSVQeIFNQtNSfe9mp5i0cZwQKVValCKE6a2SqNbnWI1ty1qK9EAN3BezC04SSbFIIvUK6mEINBE+6nWnoAA4q3WaiWl1rAJhmxO4E8tVJtWOQ+gX6pIRYFiTxN0VO+yQaUUuZT3RPtp5rlsxa0FIrBTiUAvGM+pWQZyy6mmIdFoBLYsU1fMZmy7pBgsVgsidF53YsqTVo5uj2mgxryqNSBUrq5dvVPbPmLExBaduoxjewGCqkIJuy6TqYJknGinJm21fAHQvaOFIYQ1kmpAixZEH5WS2YJ7DWq4kKhco9YkDfXLA11Ks33/k8x8lnWl/P+xLlpyawDFxybHrxFCgTOEkaNCaSSWUB+1om4xlpSdikEz82Bu2lWqK1CgBONKTRI1rUvRi3wsIwtepaSpSj+Vwyn0Ey9ITW/VAqTfY9SFRRtPVLIBsFudYfi+U1K/uswnMDzYcqqZv0U25OqfpBRWlD8CDNWnaORE2xm0QeaIZaG4JbCEpRDpU+ABCA1TNQOb5tzzR6rGlOOQiA7Vo07QSnFrZhu5NM88m+rUmGUM3nSqBhgcN4G6UZ6zUjjgGzWODwXsUfQa2MFKBkVKqlkOVqbNho+hEQrIWMRVot+7Ozr3JWXgoro00e1BltGY3UuwkDAVVwJhLWf7xFv77eElkBZQ3QIxgn+jtHq1z8BeIRIDbacwG1vfqBdKo2h+Licc7dzv+4LWFm2ODZHQXgWvFTpHYUm5UEIYq8BNAMWAYEu4K789qHOG8ikHbDC8jX2PbtN3zVUtB7rF4wTU1jB3RD/cwwqBERSHESyU4ghXSqZL5dhnuep5ebSzbrjFepZcvMUhlZTlpHg1Qm4CwQxFTLkj8CSpZrB8Qg1tKxQCwxvthq8DXDHv963WunUIZaZz0HsALg61LB2lBCAU78g0LTIn7ebUJR5TKEuxCBEzqYT8RPvppi7GrQQNkfGuPREgHyRDcVKUU17KpMLOhfNAQWolJxOZ5zLEyIj+zLSfYfrzfK9XO/9KdXmeeGijshJ1dqsFm+I5qcEturTosOJQfpWmYCYY4YiZfY9ua0+wGxRTSDOYOm1Up6ygfqu6alx4dQcD7gYMIragWbngVE57hYuFx73PtbjN9EnUQBSjhHg7uEkbVKfcFrqcl6kTNGJXhbX4bzqUoBSgFegHYI+Q7rHHZ5r2CQGQRhUIaiKFdu9xJCpNBkaWoDATjTZUkpKmBY3JYxiOwt2V3uH3/WOfZfK3yqF7mTk5AXQdTrhOZZGAVNj7jXoDE+sAjGvVkx75p9Jl7nRQ6cOs055t47FO4bgWoxf1QJyoA9RRpFKqX8OO2kzNaCvcZUDEQrHAvlTzpjpV2vVE+w3NM8+hAzFW/69K0PzYJQSTrNJcJWI5AAPEd0LaqmgCEZlwfDO1WMPYz/e4zxuZ+AkOfBCaWKoFmZLrMLdRbjh9sgwrzbMgyIrc4cgPPMyxqSWygI9ne2z9jS3aSh5TA2e1uwJ1JZjWoOU1dEOt04ICALifbBnLJpIEBgtLZaro09jXed3POQB7xIYsNe5KbVe59aIalBysAdUKPuAKCjd1iuYqjyhV8r/m4+ZE6mcefBNrv9Gqsk4BXyq1jsJfUNESwh+3TU2K1IIQ9am+oxpUnagXiBIC8lrpFjPtNz2Av/Fb4DigY7YSh0bhL7Xtymp1GYfVdTW1vVCXDuWe5zi1eHJKS51tiDczcU2CFXhqyIvQqN8tuqpWlCHIkoWzQSOUBhBqYvMa5FITP1dzJ37wY2Yb4s0t2tiO2DCBs1HDKWg4wXiE4TGukdJEX9Lae3UwUOJvEVSxgOxWEmo/pPv+bM81ZZXaT/eczFw9U3Smid6AMymjQs1RcM7KO9pbB/6fp4hvqxZxtaJ6+57ob2HRxkfQsAC0IHGGvM+5V4VBZFamKsEWxONAqYgbI7zVnlUCC7ueR5/s5wa9pcmDALsAPwQAcamJBYw1QpXi3pXq3wiWwCRgZShJguyY3RgS2EStYLN637vzrax1cxZVx9bjZA5scpJppg2UsEcqFdoE1SWpWy2/Dapb84kGngNihRxpNdF+nqmLcZ15Kqr+xZJIiCgmY7duAnTCBttGjeQaaRrsNVBgtfrDDRxnpRLZmGi/tY3h4UwTGiLaVLcaG9Yr0AI3VsQ/8SkI/QOAqDjTqUw3V5pFX2lCSaL6hIn221i067EzRABnKzRegxCsKm3QwLWi9XgpYwMAJUjAOMrnFVJYs404Gtnen39bE5sB0kV8a/LsoMJA1G6nHDzOtaItGvChprVESuWzqrRZpeLEVQL2ZjNjj29nytixIy/BQxy2vKiDGhYCCsiRzJQiqknawLPpmNQ18GlXqVaoUKHVoh/e25u+K9jXoCOh9nlyBpDnnWBYNbb3YwBc2VaFG8dqd5qjg3Uq+QAktI9FP99aNzYNcQlEB1ZCo/RbpK0jHodpi6hTVrxvRwdKkIRirupNA8pFnA7pPO/JO5g+CSse1OkMLQMLgz5gsSYqevBqCQHmwcPLu6B2XOo/mMvmyXEYFUva6513NLFHYtcqg6yGgfhUqZImwo7o47wHRkH2NoMaGjsFHTTRvBxr2Hi2RGWH/Yzid7LxKg3HAeHnUQ5KNSs1mgUzoQCjkrOdKMSfY5JivMigS3u15AxYzIq4T7Tf2Vp3oZFUKoJGXRWtMiKUNehLHhz3k6vSV1MPOrwntRwAxw6cX7WzIjS7z7V4F9OGAPMiso/+GsuoVeyKWaK56tg9jdqBd2oZludErjRUQ+VIQd6K+kjv6y9fYNGWru2wLzNwVk0gwXDqFDAbcAwq1ewTYdU8gVopgETTge+EjmsyIWGImU/e1ZSxfgx4erVpYkleBco93hSB3gwzENsFVwKLVhoaPgUfr1XIUQEoa3T0RPuF1rOE64jvYK6nXmkajSANTkoyDhsD8EbHCSDv1KUNr6pXz36lRuZetTkzn7zI2hPFR0ClcduxQrDVAmiB6rXVO4enlWEIybEHEVbqd12MAVp5G51CMjNG/WJzv4Gh+gIuAVoUb6lwlK1INMMQMxHQoFOI26FPwSPUWjvXEDqUM9/cxxiDtSf4gIhizJhajfiV8qiesTVhJOxVjQvT2CrYoyzVjpogFrq+CuPwsrTb21WNqYvVIKDRlDT0CJHhLlFxKrp4ABZt1I6mQED5slNj8FKxNCVbpKpGrPo9VtCa/A22oRGPvVxBwa9lCRjRooUEsAPoKTkCaLmsFFlGxMvu1ABB1djs5zR1phwMvZJpO9V+E4HjUGhMwdisRZlPymnl1rK8xMsRRAjYwUHjs2mKoz/vSW/yYDYIJcYTdEreB6+vlIvQayiTbwUaqqNBrQk6AOAlcSW0COIb0BnVN+/JYGJKFcF9NcmBuST/cNWxgNlJlpaVogsAQtBc9YuZnim4hLrPYzDh8M768iXWuSTSVKSdGt8AMXhEqXaZg5IIRA3slnaFfUGRqvgQMSDRgxOgYUp7G/ndTH8eZYsuq9Q1WxnavQq3ieJ0KlBhfxSzbISl+EEZw8R5ASYInRZBjSJmefJS047FtlNDwLxXYUuh+BSotFrpqhNbrxHEWEREpQhyK3XW8RyyscM7rsoe13x3kwfbILnJ2tUXEPcf4xt3tkt5XJmiU3ibhW+l9nGFgfgI1ggHBzMjijSv+z1MnVbrNtVxmROYyiJJdY2kk9jT+GK4zxO74wwQ8leeLqTbUYmAEc368mW2PYjjpdbKameRlN3oRml0JFAMLpQq93Hn60x5PvBLNj4INRn2QVDtRPs9TczUqaYKOcuTkQOlho9gEcThQb5l7mPXZ2rvBQSMJcD14GuABEwVgLl53e9l4oMEL/DoCQYm6kqrlEGeKjZ3m6hsEuAIo60nxitGz3SsMLCyAMAFxO9m2u9t4shspoLOyB6QrywRoMuye2zkQdAPZ1JliIiAVqN/iNK2GvtDlFlNpmb7+33MPQFG7lMlbmhcs+orG0Un1WMJgBFnsujGvDmij/Cp6tVSNUGp1TCs3fdT+h+mDdFxdUxgvA2lWDmg7k7NABwh50GN+RGyDt9E5RJEojq1JqvVIqIcUBzzut/XxKvA5oAzNdujw0sF51d7WCxhGAImgsMVTZYrqGkMBXYz21E6eLLtF32g3s+0v4MQy6bXnEvwOkLqeNcoFjQZ8UA4MckQto26Z2d6w6mhV6KG/aWKJyba72/tSaUYPDH9TqpbOKRKU5RgrtwnnCDlbPFsg/rCKXKOpaG4Hib4OLFyov0Bpi4WGtunelKCF9G16pDqMS4BmHOZJZjjSqYhZDSoPTCRq+CBWIDK+r1d9YHmfo/dFMaK5w4bSjILDeEyNbJIlPCTgYvhIwqEwAfH8MGSlT5SvHq/7g+yaPcq48Zi7RGb5Yg+8CTRCkr3BBxQAzWCuJxyQSvyKAERAcABEnJZFxPtDzZ1mnZDQ6CSWhnJOG2AR3g2alOkBvZsKx58g99dEKLRGNhMjWTVrQdPefYBP8SUg5qKozOj4XkgS7l6tg/Kj+01gQvLG1cLmADgiSDbiEdUKoAa5Nru+wx/qOlLYZWpM5BONMgJaK/aife5LJWkGAtb1ZFafYZLYmuaCAE+OwSnjjD7OpgPM+UJBhorLYgJYZKNpqea1KjTeC56paxnDHQwR4fr1ihNAs8B4EA+wWwPfrhFO4wl8y40GMkgSKB4parbVJxG7ISTjngFfEPtlj2QhFqfSQDBro2Q/Yn2R5gYHsafhw0zxTuRRPCEhnBhKKtlkXrtDR6zXF2w8dY0C0SZ+CAXGgnXzDbER5o2MgYq7IXAcypywE8q78jHwVFVkqaSCHwly65sETCIQdRnrwa/PXb0vO6PMvHYStG4QdW5xF8wbKqm6dQhQvaPSnUx0ypBKwLrMbvUcASp7vqBEO9eN9xu4hDsJbB5BYKpYjyBeHkK7lALyRD2gexQy0A211cKt6IUZO5iOCukOdF+uWkjgxXLXnBDrvmQuNsgxDhOGM9EoRTj6ZUqwQlFznNwlFOUgmBrnmm19xteYdr2mkrnVP0CZo7Jqab7OagJGhgGLhWPcSp598TP1BESxK3GMs/VrCjd5+R8tCljsUpB0cQZ6djTVYMEMlVgakz50HgNNZVHUeCPELhCL2sWqRpUK0txov0x5rNUqSgBeo3FyTWoJWnqsYQMVIKrwfZ9qdjXoHmgSkPGisFYUeNgRNW83x9r6mINUQJVTGUrEb9R5m4zRs5UXK3axVQJUV7iRAXARPOFfahei2jwbLN9nLVul6raX2hAS6BEkxzYXbCNVM2K8F47xTSw/GssRnWiqTUaMFFoADdiPyf14611a5pCosE1XikEBHAqoqGqgCuJ9w2AnnizGn+dd6re6SuZUzxJdFCC/J79nU+weJCHpEKiRvlHTuOeoErMNlWMp8zV/pyApgYd1op2IFbURoPAgDJTm709+ImmjVwqVlxJ8Wq8CTYJsS/AqdLJVcO2KmS4VepQL+xXY+0QMU4l9AiB2f7+JNNvSNXriGg5B4WIVpdomFnL4ScChVEGMoWT0KtHKFukou5KOcaKkwyE3ed1v9K0NXP1u8EjQ5t4zeCuy3EkhqaHgXjX6sDK/+BjOT2WQQk5KEJMPU0Qm+XgJ5uYaadZRBxkoBe50QSwHSgXwRH8QLS5Ji0lyjHNqhZ21FSXolD3qVrVxvO6P8W0IfC4ieAqFwtcXqU0qtP3mrtaAP+E8dgSHUmAmAmgdVzWlyicTMjwfobfp9qyitAIzwd7UrWD7YAfr7Z4Xg2fS4BR/Mhe2VUgpyFosLYaYyXCKZArszx5lUU7KLLq5PZyrpX6pFxSNV8vVeKrsiu1KcIrKlXajW7gB3UGWtWob8lE+9OsPQFRJIKTE2ftlT+MQwjAiF0FvujG/DA4GbnbsiewZSn4QTNZG/Q2Imw+859u6vlaMwG9MGlF4bHeOI3IQ0xuucqafEAQBtxaPbV55ppSC7oBTqPeo/OefIZFW3WbAPAsEPsB31IdUkHAiJ4lGkZNgLgVXu3GHseZxmVyGsB+UIWohnlPPtPaExWRDRoJqi5qqcaqIDpzLAkcvELzW5RODAqiQYMqpyIohQNT6D+k+yyrPsuUVaB0yhdXPUatdFvNwQKMAJvFkE2Uv6RyfNaLy4eTEVSWrpQ6oWL7mNdnW+vuNBJCjjROCMiRgrBAhJ1gZHUVULgKTKnTTOdEg+orNZKv1KYLkbXv4fA5po0sPEpCQxXiXEHl5pyiMpFiIxLqGzVdwW4BpyV6x1lVAXWn8vpkkcv/uaafBlsQU6nVkkRzWL3wQILj6EWvvvrELqRLkdleY9bVpSAQLMklE+r9nL3PO0AO9mwjpuYdEwmI7TSyfnNNx1KVp+SqEjsKsZ6SLlQIUQBYjglZE+3Pt2gTmsSIAgjIQFLU9rFCIapSBVwPYpor1eGCqpkYcg0RyXNGLpQaskdMfKL9BaYPiCpJsLdTZbQopg3vsempQIGhcCBlbYsaUvRfPRzYESV0dIqoq8f+RPsLTT9NZioYD4YBzhr72IDClJ2m+inhrEQ7SzdXGhaaj2VHimMlwI/K8ZjtwS8y5TcONnEsFft4xAZeDpoAMmPTO0SvsoDYLDWYkzZV+UkmtsVPKut9PtsXm3KQCItGPSp5SqMLdS7x+TA4W0xhsM7q9IQYn6mk1wO8ab6hunyGfp/r/CUWf+NVos3RwDhiBOQwfThImcYFwuaoBzUUJrbQJCqm1ZBnDKARO+iAo/a9Ur/U9tMIASH2xV+cFEDYYRz0oqnu6julUKxmIyu9qgcxVf8+NCvyEvEeZtpfZupizbFN0VrE5vpW/ZqbBltMkRf9C1xA2AzPTQeRCHXFkxBMo6a6WCz7/t/WfleAZXh8pXwF9fVWk69Bk2+x4tTvO9MUi7rQ/CnECNfPlPbWoqtLQsYzn3y5qRvYC1naXolPmdqRtBom1aOCOUO4NWWm8odS94M2AGtHxA8AbcSLq30N2VeYMjYd6x8RTp0K0EM+AkGq5YQ5NJAEC0B+lexGYDG1utG0SYWBiXLM9uCrbZst0VDBTkmhiQYuByHoiRLk1f9NEXul3InzU85Tr/FPWLhgT4jPvV31laZ9UnHYOw1TwLh0KhvH/cApC+Ncty4HTsKmQ1bibg5ES1QQrMTUWuMry9lv+Cr77GAhjVlaTa1BGGApeS00H5cQhyHRCMmxkqzw6t7eKlVceTV4/0TuZtpfbcpYlfVhc/TjdNBK7QuCGpKr90mmPnh4m8BNowbjiVZKbx/Us15V+9lsD36NbdtrYLQgWdVIdmO35VLTPivuA4O+4u1C9WTClzUoQ61mFTxMNVlp5u+vNf20EmBxnCIgeERd0Z2SpFtchwzTBINC81x7tW1sNa8yaDYSh7ZSWbqb+eTrTD5R8ytMsaTERmnUvq9XCw4V3Hh0jLQlS1bfCWKDwfm8AfxR6wged7GvQfh6U8ZyZABcez2qRJV/7BG6sFJBPjIUIeKVE5Cq0URZYn8pLq6pOY2mdc9YwTeYZ161lppL3CgpG9yqUNwrdPimmbopjAMd1GMkaKJYrfEcvTAiwCy2b9aX32jxNyCOGmsBMCY4OLK+a019Q1EiQzDYiFIWgJF6jMhFXlVT3Hps7K3JshPtbzKxGV9pdilo9pjXJBdPTnapbFP23ykPj/NUKSWAgB32OW5uoTZiNVGImb+/2dpv0AesVddo5hbRIIBncAjlRY21U26QlFWsTeZ2m43Nn3rOJA+7lwU00f4WU+80VZYFTrMywDtsicA5RHSrW6WKiVW6g7HfjdVljebkIQ7A7YFG8kXPo281sUe8xFL1KixZkCMgAc8PX4GTyEEkNlypcQn2IRAybysgqj5JARyv3fPJt5n4IGcsUU+gfAyNIP4KGR+tZjdoP9RyQmqyVjN5tiZVAGIM1iAa85lPvt20Y1v1ZWmU+dbioqr7kHpvq+Ud+AfRwEp5uX50FDRseCBWBT+Vys5d1P1/hyljEdmJxjG1OGxCuyT7G1WnVOoAykK9aoR6FWcTSAF7xDpJcOULpZDNfPKdJoaHfhQcjVpzahOUgiYNkkbwgS9GZaSumJzeXF2G9XDGwcFeuNm+Z/R3mbJKtYuqCIfRGuUSqcsjJx+HVnE8DXrqxnbjIR/9IC6XS5QEZQTu4w3fbdqaWAIwcx7kd6gLfCvvvlF/Q2xAYica0gFgivVTBcBpYHZCGYqzE4Pdz+L4HtP2AbgHL9Ucylp1y0FIsVMgcCx7b0OBu4xs1LwTYZ7qUYokRtZo7MQsv7/XpM1yCyXKqVgu0zjDvNJYDrxKjSvRQFQZzBoSjeukVixBY5yKVOJ7L0++z94Tp+lAraqVEpUEeHVRrBXSzGCbTunp7LiyiNTuD28Bcd6yhUoS2c9s+X4TMx0IfRDkZyuxnTrODOiXU8ELqJGaCQBKqU2EJq0Dg6ShxiL3GsuQIIrmdf+AieG1GKqao6c+egp9gHJy7BPldhAzg/PVDAF8WvMsnMpW1KTUa6yabnii/YOmD1irSTtoAX6NpmwWapMEGt6rSlEnNFMVqUfpqSNainxpNfUxU/F4uj+XP2TaEB2GDYZ3p+pUInFy1eFIDaEuuoHADIJKvfix0DTbuNUSNMdFpXYYjxPtHzaxGT6pOS9ENBKN+dS47oRzkyoQxelDPaiTS6vrC0ZRuZNXPmujbLr57PyIiRUQLSJYXBTyPxRo7DwAI8zoJRYbpHWqnGV5n7W63gAEFXWVaYpN4/f+/I+asqrnnoELUAlg6pqwinOi/IheCVxjZRaSKlMhJgFSdj2Vp6zOuJqNNNvfP2bR5oiA9oNYahhBpSb9gn7UcDltAeyUxKKqMaWwKRwF7qt2iY1Xd5eFX/zj5rO8wz0fJEa9UG24V1mr6l6J7QxWJ40HHBk0zgKG7xWpV94bgmKY1/0Tpn0C6FKpzb/iXoOGNwh5wDTWWB88QSJqmFR8oFdCEPhhJzHmUPIsYL/un7T2JB1zkHD/1J3NN+BXuGR4pjJZKwwMPEAsVoKzynbrlGKDKaMqeE0f3M+A+inThlCyruMAukIRORREpU6SKrpC4ikWrxC0sqFqpbwElRyVg8vkfLf7WPRPm3oHZkBhIU/UAI8txGiQQ6ye1vUIOATlWOGqttjQQSiOYDlVwuFrzP7lz1jrVvNPXEdQrlJxELX7Bf5HVEkCampgUEIh4RZwIR3dARwB3FSJ8Wm9z5v5WZNP5Lby4PgPxvXqqg6HqJCTyCqKCCcSvLiXI8yFC8xiXC03Vi3ghM6y6udMuyrVeN+2KHNF6vu8VVADIdKznUIcCYi1ldoTIdhRrJ0MFuXUqg0qcfSJ9s9be6I5VF4DggiVIDnrGkDGq5e9JqL0DlZhExTRVglylXuvpp54dxzcst/35f8F065CW2myI8CL5imo5opj3TpifDg72JVFrcZB/R0V6IQCHJxSl4WqpYq9XfWL5pnXRFEiwyriLjV8RBk0rUbedmoWD7gME6kAHutPE4yJfRGQAiPkJhA/E+1fMnVDp65xQAJKnlJn4hyvGDwFr0Pli64uMIwIOeQKRvSA1IXmjYALayzXvu/tL5s4W6UagUajp0sNlkgU2RaorOketcoxEKhqMaemjOBkba+kx1bpioCp89n5FYs2Jm/fqBOyy1I8m8FpshFxxg5UXBNH5e8PGhKKk6skhFZp6+Oo2qKp9/mav2rqBiBXcHgOHVYycAcxL84IZglCvRWYphwZ9YAikM5nK/Wm8Bq8BMSc7Od5/Zq17kxTexJBmSpoA9AD4uiVKY9cUttvGSWVk5+TjdUPSmliMWMj5XYfb/h1c90JBp+SbvuxSXwfBsR0JkhSiLdwux7GxE2R9d/q6ALLpZmaimh2+kT7Nyz+Vnhfbdk6ILEaKes7ZQ8gzbuxoZxGzcN9mKxuTDOTnYxVmGPgoU/3NsRvmphSmamSNa808FtV1KmGpappEOoTw/WOrq8gDoNaQ+FAYM3h6uOjwTrdjNv/li2/NcSw5woq4dHAyE7T0DGCQI6bcWykgtqVmsipGsgX6gWC1yD3e19X99umrCL+TrQOt4mIH0vHIlOOSQsE3KkoH1dTydVYWRibZSszmoiJIpGDb/cz/H7H9LkrIRuKoao9JOre45WpGQWQjYZMgheo262aZMmqgsHhdE1qVdh+rxt+19SXHDKw1txpEAJgP8A04axSVYp9rgKQQV1TO7WHyOV6sttJoYw8dQXd9235PYu/NaLQKa1cnUScphhjyIMaKhsbi6sb5IerpgQlg0VVKkUbd2eom0ZqeqL9+7ZfDD+hQUApcSgJ0vVjy0v12sMwA4IoK+K+bBkawasp/x1jb3LZWfU+vvMHFp84TeMFKiiRWmqOrhIS9fqBO9q+VYvrXq4cGBaALTjEHZV7PEdPeG1fD/iHNg92uAGafqLWI3mukUHOqRBIA1pwjgslppQa7qNiIfgxV99UxAtWyj72/0cmbWUvD5rFoFbXoHaVWkqglAulCGOy1ogq13iFq8C/ifQEdc4S3kY0aLZ9/tj055Uo11TC/jRiUEktmVJZkOvoOeXhaCg98kRTLWr8QtxLaKNAMM73NtufmPjgWECIr45a53Gqgb3aOabj5vpqLPnqC3ViHdS7fdDkdc5sNqir2z7X4k9t2145LSqdwVlrVL6tVkdD5X2qMHqvgROpmn2NkHox4k1E7VE/Qj9mP+3PLP5WJxZggERN9lSWoUlm6LdWdUJpAsMABBOXZ8XAZBWbXVdSrCkQuUrKJtp/bvK3Vx9a/ByWjl8/9Er5c6o+ShQWBFpJNSovVXJVx4FN9cCLRE1k+wXu8xcW7UFjxIdK6yImitOKHa5G9wBUmiasEECtxhwYGJ26leeFxl+CImNP+339/GusPdHMjjFa5nQ+ClVXEspSZl8Vakl1OSRNgI940IKRECYEvdQYzi9qJP/SPJeaWI0pLyMzaGKVmo+oi65GYqA4MX08Yksdaf2YFK9+hUgFpBZWzKzn/8rEITp12UIWYcgKZBAw2I7tVwciggLpuY1B/SM0hwiEFb+YR1FkXsGM2Y79a9O2ByTvhJnm4maN8cPOq7gDjbV3rYbelRgw4zRmR+yylZNO0ERNEqo9fvI3pj3I0ZMRyabwDHt1IlTitGvyVLPQla6q4k43dlVUDhC2uNr7qLoJ1T/R/ltrT7gvQosd8CoOlcYAs9/qIpsJKfaaiaIYQRUwqLzSqoCqM1lHBGWE9020/860B+taPf0VbMGqKlt4I+AJJ2rmp+Jl9ZwBVJK56bA/PUJKWVF4AuiUfSzjteaejMkgGv8waLKwuk67MUGiGpQWpgFBBNgGTd2CWDn2fGikHDitdT77rn9vnvlU7TJatY8josPBLlVOXEA+OAf0MTjJ9xZ+Ib6OlFWVFyiN6ncz7M2J9j+YMrbWmIxBs7d4lJovPXhNlx80mTHHvtCsBhxbIdRKPIKvQbRTVb3iUMzP8h9tWaWkBwFrysdSRTfMraG5ypR2wnsyzf5FktRAFcQZh0Ztnp3EQdjjmv9k2hDAX7nSsTMA7Y69BxcldjQI24SBGlxMggOImxZEENcFcx0W0RFVz9F9/28T9xlzsTQanoOPLQuvYJPLmydqWhM/KhTerVXDjwGaVa3mNzm1GCYsuM/r/WeLti/VTM8j/H2TaXBUppOBaiDG0NeQBp7VuBxujePUCEIJGh7YI8Gz/fz5fzFlLJEc7Kc7EnrdiLeBsZUaWQfDy6Ll6srsQRwoBo5bAZNq5CHmx77n/7+acjBXaWXux7uvwlikB3il6ZqNEi1UW6i5WWWOIMddFgCqltU9numiN+2/mXhVqr6RKvHSGCzlBKrvbBCYhFbjPngOhLkbPfIBpdYjtHJFjwgyVa659jTtf1/Qnn6drvsfJ/avX7p8HnflByY8sbre7jT95WvL659crTXqepJkbOezvN60nvX+XHL632nv/vPE2Ws9Zbx35eKelu8tr/OfxnUsWtdFpHUqIq3rI9K6MSKth0akdVNEWg+LSOvhEWnF5NVHRKT1yIi0HhWR1qMj0npMRFqPjUjrcRFpPT4irZi8+oSItJ4YkdaTItJ6ckRaT4lI66kRaT0tIq0kIq2YvJpGpJVFpJVHpFVEpOUi0ioj0qoi0vIRacXk1ToirZsj0rolIq1bI9J6ekRaz4hI6w0i0rotIq2YvPrMiLSeFZHWsyPSesOItN4oIq03jkjrORFpvUlEWjF59U0j0nqziLTePCKt50ak9RYRab1lRFpvFZHW8yLSismrbx2R1ttEpPW2EWm9XURabx+R1vMj0nqHiLTeMSKtmLz6ThFpvXNEWu8SkdYLItJ614i0XhiR1osi0npxRFoxeTVEpNVEpNVGpNVFpNVHpDVEpPWSiLTeLSKtmLz60oi03j0irfeISOs9I9J6r4i03jsirfeJSOt/RKQVk1ffNyKt94tI6/0j0vqAiLQ+MCKtD4pI64Mj0vqQiLRi8uqHRqT1YRFpfXhEWh8RkdZHRqT1URFp3R6R1ssj0orJq6+ISOujI9L6mIi0PjYirY+LSOvjI9L6hIi0PjEirZi8+kkRab0yIq1PjkjrUyLS+tSItF4VkdanRaT16RFpxeTVz4hI6zMj0vqsiLQ+OyKtz4lI63Mj0vq8iLQ+PyKtmLz6BRFpfWFEWl8UkdYXR6T1JRFpfWlEWl8Wkdb/jEgrJq9+eURaXxGR1qsj0vrKiLS+KiKtr45I62si0vraiLRi8urXRaT19RFpfUNEWt8YkdY3RaT1zRFpfUtEWt8akVZMXv22iLS+PSKt74hI6zsj0vquiLS+OyKt74lI63sj0orJq98Xkdb3R6T1AxFp/WBEWj8UkdYPR6T1IxFp/WhEWjF59cci0vrxiLR+IiKtn4xI66ci0vrpiLR+JiKtn41IKyav/lxEWj8fkdYvRKT1ixFp/VJEWr8ckdavRKT1qxFpxeTVX4tI69cj0vqNiLR+MyKt34pI67cj0vqdiLR+NyKtmLz6exFp/X5EWn8QkdYfRqT1RxFp/XFEWn8SkdafRqQVk1f/LCKtP49I6y8i0npNRFp/GZHWX0Wk9dcRaf1NRFoxefVvI9L6u4i0XhuR1t9HpPUPEWn9Y0Ra/xSR1v+KSCsmr/5zRFr/EpHWv0ak9W8Raf17RFr/EZHWf0ak9f9FpBWTV/93RFr/FZHW/4lI6/9GpPXfEWn9v4i0difi0ToRkVZMXr0k4roujUjrsoi0Lo9I64qYzzEirasi0rr6AuXVkxHXdU1EWveKSOvaiLTuHZHWdRFpnYpI6/oLlFdviLiu+0SkdWNEWveNSOt+EWndPyKtB0Sk9cALlFcfFHFdD45I6yERaT00Iq2bItJ6WERaD49I6xEXKK8+MuK6HhWR1qMj0npMRFqPjUjrcRFpPT4irSdcoLz6xIjrelJEWk+OSOspEWk9NSKtp0WklUSklV6gvJpFXFcekVYRkZaLSKuMSKuKSMtHpFVfoLx6c8R13RKR1q0RaT09Iq1nRKT1BhFp3RaR1jMvUF59VsR1PTsirTeMSOuNItJ644i0nhOR1ptEpPWmFyivvlnEdb15RFrPjUjrLSLSesuItN4qIq3nRaT11hcor75NxHW9bURabxeR1ttHpPX8iLTeISKtd4xI650uUF5954jrepeItF4Qkda7RqT1woi0XhSR1osj0goXKK82EdfVRqTVRaTVR6Q1RKT1koi03i0irZdeoLz67hHX9R4Rab0sIq33jEjrvSLSeu+ItN4nIq3/cYHy6vtGXNf7RaT1/hFpfUBEWh8YkdYHRaT1wRFpfcgFyqsfGnFdHxaR1odHpPUREWl9ZERaHxWR1u0Rab38AuXVV0Rc10dHpPUxEWl9bERaHxeR1sdHpPUJEWl94gXKq58UcV2vjEjrkyPS+pSItD41Iq1XRaT1aRFpffoFyqufEXFdnxmR1mdFpPXZEWl9TkRanxuR1udFpPX5FyivfkHEdX1hRFpfFJHWF0ek9SURaX1pRFpfFpHW/7xAefXLI67rKyLSenVEWl8ZkdZXRaT11RFpfU1EWl97gfLq10Vc19dHpPUNEWl9Y0Ra3xSR1jdHpPUtEWl96wXKq98WcV3fHpHWd0Sk9Z0RaX1XRFrfHZHW90Sk9b0XKK9+X8R1fX9EWj8QkdYPRqT1QxFp/XBEWj8SkdaPXqC8+mMR1/XjEWn9RERaPxmR1k9FpPXTEWn9TERaP3uB8urPRVzXz0ek9QsRaf1iRFq/FJHWL0ek9SsRaf3qBcqrvxZxXb8ekdZvRKT1mxFp/VZEWr8dkdbvRKT1uxcor/5exHX9fkRafxCR1h9GpPVHEWn9cURafxKR1p9eoLz6ZxHX9ecRaf1FRFqviUjrLyPS+quItP46Iq2/uUB59W8jruvvItJ6bURafx+R1j9EpPWPEWn9U0Ra/+sC5dV/jriuf4lI618j0vq3iLSu3sWjdTIirWsi0rrX6feu3Z3Jb9P7+rl6d/Z+6Dq3nf47uWs/UxuG3WLJI/3la8vrn9ydfTYiric9sbrecl+X+3PJau9OGms9Zbx32eL35XvL65w0rnNPp3Xd7mw+nJ7H1cb3IvJEMt3HdPYuM+5jubZLdmef1el3/Vy+eu0XrrrjX/3zylP77xzEh1dv7N2VxnqsM7yLtz/p1cb9RqSfTGfsXov7Xsun6xavx3v2WXpY+TRd/+RqrUcln65brWe9P2v5dMpY6ynjvbXeO2Vc55RxHYvWNRFpXajrukjrIq2LtC7SukjrIq2LtO7ZtCYfZWmLrn2U5feOwke5/jS9y4z7WK7tktXnl7/r5/LVaw8+bYBZPopli163sXdXGus5Wjs+Sa427jemXT7Rv/FI6KfFRP+hR7P+mf5Nu/1P7L152NGs3U30Hx5/7fO+PGKx9hO7+Hz5yKOhn0/0H3U09Odn++gjebblvP+POZL15+1E/7FHsv5s3p/HHQ39mX8efyT003qi/4QjoZ/M9J94FPSzdH6+TzqS9btZ9jz5aPYnu3ZBc6I/6cgr+C+7ev+6/pvwyMt3e108fVc/z759//7y89XVe5ru9O/XLehO17ji9O/X7LZtp0sWr12yO3ONTzE+v7aLltdfYqxPOQStExvXfqrx+adsXHu5rqce4trL5zTZGuu9vm2x16+915nXW17jitVanrZ47/LTv0/8l6zu4bbTfyd38We61/Q0vaVdubzmtLZLVp9f/r7ci+m152zYlU9bfO9S47W1XXm5sR5r765a7V16xHuX7c7eu3Rj77LFe9Pvy72bXnuriHt3lbGea43vnTjg3+k669fW17F4+Nrd2fd6V6+z3MOrVtfJI14nX3zmutV1iojXKRafuWZ1nZPGGiQ7XrTSDdN5XeqG5XdvXLy//PxDT+1pNivdsJQByzWuZcbO+Pw1q+tNn3/J6WtM59MtvhPzfN6woLtbXetce/vS89hb/az17vT5/3fdnubLNvZ2Lc+W8iNbvbfcr3z1Xrl4b6Ix7XO1eO8o5KA/TW8pB5fXnNZ2yerzy9+Xezi99gEbcrBcfO9S47X1OUuN9VxrfO/Eau/80eydO4y8WF7/5O7s53wU8Udv7Gtq7Ou0P/XRrKeY1nOzsR7rOcsmu/fu7Ge2XN9Eaym3JtzF0mPJ6r2l7ilX7y31hVu9t5Sf63jndA3r/k7s9rbmdRvrs+TKtad/v1BsoWlt52sLvXJDBlh7t3xtLQOu3R1u7+6zO3PvsiPeu9zYu2xj75a8lht7N732mRH37j67w+3dfXdn7l1+xHtXGHuXb+zd8iwWxt5Nr31hxL277+5we3f/3Zl7Vxzx3jlj74qNvVvaH9Pvy72bXvuKiHt3/93h9u6BuzP37qhsy7X9sdw7t7F3S5leGns3vfb1EffugbvD7d2Dd2fu3RHZGJv2Yrmxd4e1F7894t49eHe4vXvI7sy9OyJ7cd672tg7v7F3S/tn+n25d9Nr3x9x7x6yO9zePWh35t4dkS05793Nxt7VG3t38+K9m429m1778Yh796Dd4fbuAbsz9+7mI967W3Zn793NG3t3y+K96ffl3k2v/XzEvXvA7nB7d7/dmXt3yxHv3a27s/fulo29u3Xx3vT7cu+m13494t7db3e4vVvnPdx6xHv39N3Ze3frxt49ffHe9Pty76bXfj/i3l1prOda43snDvh3us76tfV1rOdw7e7se72r11nu4WWr6xyEm71mhZtNvt9hMcnp8/9wrz3Nv17hZsvvr+/31IqeVWtw+eqzf7y41mtX1zq1+P76PKTGdS8UX3Fa2/n6iv+ycR6W+M8WJmTlUE2fu9b43l3lU+s5XLc7+77Xz+ju9qvyxf0sP7/8XT9rv+q/N55Rvtq79Wtbz2j63LnO+CUnz7zm8sxZZ/xhq/uYPv8Li3N3+ekvWOdurWvu7rN1arGX53O2rjl9j9ZzO7X43mHyE6801mM9t0ec/l17fN3GczthfPeRq/enzz9j8dxu2Hhu07mc3rP28ELBh6a1nS8+9MCNZ7rEMy81Xts6i9Pnjjp2usU7yzP/8Ehn/skL3nnUBu9kqzWnd2LNj4u05vsu1vzEezi/p0fM79bereX/3a2313t3WL1dR9y7K431HLWsWPsaB52721bnbuK7w5676fN/d82e5rOPQFY8YrHm55ynbnzM6v3p8y9YrPnN7gE2zfPuZpvm7SLZND92ck/zHe7hMv6F9xCbpo9kH3zLgnfe7S7Kqddnvnqfi7bDnbYdPvgeYjt8VCTb4eMWZ/IVqzO5/P7WmTy5ei8x3hP9CT9c55+u7+0TVvdWGPeWb9zb9PlPXdzbKw/Yr93O3q8pj8h6DvlirR+12jOLh6drWjl4SzmwztGvjM8v477Tmqx8x+oQtE5tXNvKa1vS3Mqn9IegdcPGtWvj837j2st11av3lt+bPnehxE/94v6Xn1/+rp91/PRLNmSc39i76Vr6OWXs3fq5WbmElUFr+vwtxueX97Tm1+X1lt9dXsfKB/Grz67zUa1zMOWyXXr7/r3p7E05hpct3ovID6We06ee2q9juUb9XL647kFndfn58z2ra/m83Pd1XuZSZrnVdQrjOks5vJaZy/em7y7l+5btt3XNLbnljM8vZfKaB6081PWaz+XrLb97LlvvXHSXeffjPdy+f29p3+rnssV7R82vZ/i2i+setOdWLGVLDy55bc2vy7NfrN5b8ku+uo7lVx9Wx0/fXfo/lt289nMt+/+4x9F+dkPfnG8czXpeR12PtLbdl/JmaXf+yspGnL63tDuX313bndPn32yBbf36Bu/kqzVv1bK8PvLV7x8xX1n43bo34gnjHqzvLXs2LN9bXudJxhrWe3jFAZ9f8try83++2KNXr2TyQXz8mkP4hlt8PH0+WfDxX9/DZeA/HjGvWnu3xmTu7hzt9d4dNkf7PyLu3ZXGeo5af6wxmYPO3X8fArfYOnezjbw4dydO/27Zylv6Y/m55d/L15ay8FGrezzIFpriCOva3vVeXHXNmddyxl4UG3sxff7ei724ZkVzyzfQ72v7bvne0h/575Vss3h+umZs32yNZ58vjpJtXPtcOEqxuraFo2zR2sJwLOyg3rj2cl03r96zMJMLJY+7Xtz/8vPL3/WzzuO+6TQvWzKx3ti76Vr6sfz59XOzMBkLD5o+f6vx+eU9rfl1eb3ld5fXmfbG4q/d7uxzddA5sHzi6ezdHT7xGTpvcd2DzqpVh3vYszrt+6nd2fterd5byqxydZ1z4SNrmbl8b2nDXrXSS8trpoe45l3BB9Y8WJzn/Voxw/W1rzjg80s9tvy8X5znV5+yaV5+wP08+gCatyxofvWKpqWHXrZ47Xz10LSeLT20/uz0t7X/1lmdnvndcVbPiLfefubexI7LrM+qtc+WzbbuG2LZxoe1b5YxqtccAoM4zHnRz1Gc1d3qe4fBUNc9Mg7y485Fd4tfl76rfi5bvHdP5VcL0z+xO5tPzpdfp+8ucbgtrOHE7uz7tuT1uh+Etf6j7lN00+o61p7ovrtD+EzL7z528f7y87+58JlesqGnl/c/3tft+/cuVN7fsl/0c77yaT0DYnku7gyOaK1v2ZPyoJyA87UN3v+Y2AaWLXqhxWK3YlsW/2zZrueStWt+O6xt8LrCutYzi5axyul+nrD4zGFjKx+3km13NrbyIwvZ9okH0NzttjGm9Vm9Yredg7aWr59i2Prnku2vOgC7Ol9s8EsX9/8ZG9jgVv7tkpf0cxxizFu5B/o53zyA9TlcytytXLetGPP02p3BVZ+zkUe2tnmOyv67s3lkFn5g6YrD0NryzSddc5BvPtFb9zn52g3ffN1/ZL3O61drqI01XL+xhunz37hYw9cdoK+XsmC5rieuaE6f/5YNG8DCk/59oQTOF6+d1mNhxcvvLj9rxYkOwvmmv51B556cu7X2zbZyt5Zy4jC5W3cmVvKqlc45XyyhMO5tLdcO0scHYW8/eRewtyceQPNnztO+3jpbMexrSzanh7jOFu8dFnPeig+t7+HOnHkLXz0Mlh0Lb/i4FU8v9/jO4E4njL+n9S3nH6z5v1qsybqf6btrPfD756lb3CFo/tEG/1t8Zs1cPCyfrfnf4jNr7Uu+Wr9m8eHaZ1rrqYNor9ek/24y1r/+24p7rXm/PGBN1lk43zjHYc/C0g+aMKhz1Wj8/SH8mcPUaPzLwp/5pxXNWDUat12s0ThQr2zRuvfGtS/WaGzXaFx6WiBerNHYmXLuYo3GhV2j8feHwJa25PSW3DrXGtc8mBlr3Lr2jQatw+qpNd4+ff6hi/O8tocs3buFt58rJrGWnVsx07VNY+3VhYbzndG//PYz92YrnqefO1vvY+F8h8m/P7E7m5/P1xZZ4nyPu1j7dCDdi7VPF17t08Pv4Xn/b7Rhx70+1T499167M+7tzsbnvm/RA+ytVjPdzrf2ab2W5WtWjOXSjfs/sTszTm/FNR9mrO9c+/b81b7d2VqbL1vs2zut9s3KrbRsg2V+3ZrHj+LMnateZC3rD1sv8uKNM2fpRMs/38pXsvZuXWtz1D39K2Pvyo29W/oKlbF302vvFnHvrjTWc9S5UoettXnv1bk7V67UQfUlH7g4d++7OndWDGSr1sbSpUuc+bpV7Yw74N4+eHVv54phrO9t+vxHLu7tww7Yr93uruGF773aM4uHp2seVU78na1f2bLTzhUPXWPWVv3KFq0bNq59Loxmfe3lum5ZvWfVqlwoffxvXtz/8vPL3/Wz7uP/qRsy7uaNvZuupR+rjmL93KxaGKsOZ/r8043PL+9pza/L6637s6/riiz+2u3OPlcHnQPLp5rO3t3hU52hwxbXPeisbmGa5zqr6xj6ct/96r2lzFrj8+fy3dYyc/neMrb9wYew77aueVfyD88n12crFrLWCcvvHxS/X+qx5ee/ZnGeX32I+OXyfh59AM2v38DrLD20hdedSw9N6zlMnPzO4uB3Z+3Mccx3iVU78/xD+LAndmff92Gwy4u1MxdrZ07szuaTu5LL8twNH+ZCittYtLZk8FFg27vdwWf6OMVMrOd4vjET6zlaMZMtP/ioYiaXbPQlTVbXTM5xzSfvzqR1yqC1W31v+vtpxvosPnnq6deOmE8Ki0+We77mk6ftzt6brfNu7eVyDyZs59Tu7Gex5qErFu8tn+1rVz1hl3jRUxafy1bzpqxZyZbcWftVa5x9mceVre7VwlZP7M7EkS28d6uvyfT5fzvPeLI1P2pLp1ln1pKN5SFobfFIjPyn9Vp2u4NluHXepr057rHBLVvakr1WXqF1Ftc8v54ptjwvN63oPP0Q31vPpNPvD1+9N9uDpx+gzvRXnP59y7Y+7v3Irzt9jzH6kW/F9dYxMuvf6Trr186nP5mVP3GhxEy28m63YiYP2nhG1hl2G3t3kMxan48l3n/TtWde09Ipy+8epFNee92e5iNWZ2urr9xxjc0/buO5xewrt9z7R5z+XXv8pI3ndsL47iNX70+ff+HiuT1147mte4K+PsZ+3cYzjRH7Per45RbvLM/8rZHO/HMXvPMGG7xzmNyhc6352ZHW7BZrfuN7OL+/xRHz++tzrsPbR9y7CyHX4aBz94LVubNyHbbO3fT5axbn7kVHICsesVhze5668TGr96fPf/i99zSHe4BN87K72aZ5n0g2zZ8t/Lz3u4fL+A+9h9g0L49kH/zKgnc+5i7Kqddnvvrki7bDnbYdPuseYjt8YSTb4asWZ/JLVmfS6mFpncl09V6y8d4Sd7xscT9fsbqfJSZ5vjGmdEH3NVef+bmDcjO/ZnX9O5ub+U2L/fz6A57R8p7SjXuy8iCWz/7uyM1c56lfzM28Z+Rm/tCGXL07czOfYXx+eU9rfl1eb/nd5XUu5mae/fnzPatruX9352Z+zSHsza1r3pXczDUPHiZWepgcrq06/fI86F7MTzybX7fyE63eVSd2Z/PJ+er4ZX7iy1f8asUst/oaHffY3d9EjN1Zz8visRMH/DtdZ/3a+jrWc1jnE+j3pd35Tysb8c7223n3BZ72Lxu8s85dtHL5Xp/56r+OmK8szDBd7dUJ4x62cozWvLG8zpOMNaz38KDZdEteW37+0tO8ZPXBPYiPL7/3mde2/NEtPp4+/7wFH191+vd7qgy8bvEcjoJXrb1b40DVEe+dN/au2ti7pV72xt5Nr90/4t5daaznqPXHGgc66NzdtDp3Fm6xde6mzz92ce4esTp3Vu7LFjZ7YvX38rWlLHzU6h4PsoWm2MW1u7PP1nIvHr/ai3PVGK33Yvr8Uxd78aQD9ne3s/d3qw/T0h+5abXHFs9P14ztm60x9PPFUbbqKs6Fo6xrqiwcZYvWFoZzrhln62sv13Xr6j0LM7l69dmjkokTLrGUibca+3TJ6vPL3/Vz+eq1Z2zIxFs29m66ln4sf3793CxMxsKDps+/gfH55T2t+XV5veV3l9eZ9sbir93u7HN10DmwfOJlL0P9XLZ476h94jN03uK6B53VrZmA5zqr614uy32vV+8tZda6l+G58JG1zLR6DC/lu2W3ZIe45l3BB9Y8WJ7n/R5Uc7D8/kH1tQf1v39Hw05f07z8gPt59AE032VB8zC957dqu86lh2Y7d3fw+Vt/dvrb2n/rrE7P/PV9juT6rG7NkVyelcP0Gz6sfbOMUV2+4bsd5Kcur7llY8Q4q7vV9w6DoW7NPa3Og+6FOv/gQuVXC9M/sTubT86XX6fvLnG4LazhxO7s+7bk9XpWirV+a89PHPDvdJ31a2ubbLk369l01p6MeTiH8JmW333s4v3l5/9t4TN9/Iae3qotv1B5f8t+0c/5yqf1jCKrN/z54IjW+h6/+OxBOQHnaxt81jGxDSxb9EKLxW7FtmLP+1jz22Ftg9cV1rWeTbeMVU73s5xNd9jYyletZNudja38yUK2fe0BNHe7bYxpfVav2G3nva3l6zceEpNfyvZvjoQN/vDi/r9tAxvcyvndqvO9UGPMW7kH+jnfPID1OVzK3K38uq0Y8/TancFV2408srXNc1T2353NI7PwA0tXHIbWlm8+6ZqDfPOJ3npOxM9u+OZLjMXSfdev1nCLsYbrN9Ywff4XF2v4ugP09VIWLNe1np81ff5XNmwAC0/amp91Lrx2Wo+FFS+/u/ysFSc6COeb/q4MOvfk3K21b7aVu2XNadySn3cmVvLNdxFLKI17W8u1g/TxQdjba+4C9vbEA2j+9Xna13dl7uNh7GtLNmeHuM5dmVOz1gtb+P0aYzmfM2/hq4fBsmPhDV+1Ef+7M7jTCePvaX3L2XRr/rfmni4/s54jN33+v85Tt1SHoPnfG/xv8dnWbLpz8dma/y0+s9a+5Kv1axYfrn2mtZ46iPZ6TfrvJmP967+tuNea9/0Ba7LOwvnGOQ57FpZ+0IRBnatG49rrzrz+na3RuM+iXvbUimasGo0XXKzROFCvbNHamk13sUZju0bjUad5+WKNxs6UcxdrNC7sGo1Jvm9hS1tyektunWuNW/NXDhMjvdGgdVg9tcbbp88/fXGeDzOregtvjzGrev3Z6e/D9g6+O3G+12Xv4PW52uodfL4zEO9MLcmzL9Y+HUj3Yu3ThVf7dOs9vPap37DjXp9qn1628r3ubHzu9xb+3HuvbIjzrX1ar2X5mhVjuXTj/k/szozTW3HNhxnrO9e+feABPuv51tr8yGLfPmS1b1ZupWUbLPPr1jx+FGfuXPUia1l/2HqR2zfOnKUTLf98K1/J2rt1rY0/4r2rjb3zG3u39BVqY++m1z4h4t5daaznqHOlDltr86rVuTtXrtRB9SWfszh3n7Hh86x172H7tS1x5ietameqA+7t81b3dq4Yxvreps9/yeLevvCA/drt7hpe+KrVnlk8PF3zqHLi72z9ypaddq546BqztupXtmht1c6cC6NZX3u5rmes3rNqVa5effaoZNxUD7KUcc8w9umS1eeXv+vn8tVr37Qh427d2LvpWvqx6ijWz82qhbHqcKbP32Z8fnlPa35dXm/53eV1pr2x+Gu3O/tcHXQOLJ9qOnt3h091hg5bXPegs7qFaZ7rrK5j6Mt9v3n13lJmrfH5c/lua5m5fG8Z2/68Q9h3W9e8K/mH55PrsxULWeuE5fcPit8v9djy8z+zOM+vPkT8cnk/jz6A5s9v4HWWHtrC686lh6b1HCZOfmdx8LuzduY45rvEqp35wEP4sCd2Z9/3YbDLi7UzF2tnTuzO5pO7ksvysmMSt7Fobcngo8C2d7uDz/RxiplYz/F8YybWc7RiJlt+8FHFTG5aYdCJ8bkTKxpLe8GaZbeep3Tpqf31HnTq4Os9bXfme9ZsPosHt2T5YXJQtmaTnUtGreeDnW8OSrJx7XPp8/W1t3IE1jlXlv1sncvX0Wwyd7620ZZ+189h9tJ6jpZttO4B8LTFe8nqPctusnpUrzF6S54vz8uJ3dn8Yp3BrX7ByYLuS68+k67Vh/jU4rX1fp4rf2zNm4lx79Y5X5/lg+INy326zKCt3685/ftZPYBO39hRY/k3LOjujGst13vZzpZHz779zHuYPn/bQqY+YSVTl/u5lqmHjXds+bKHqbMsN+5h+nxyet1LP/JulEHF+fYh2dIN+jlfeb7W/0sZlKxoWXLAqhVan++D8IODdPcti2c04QeWHNzyH9eyLjeuu5V/pTV3q+dyUL/4Zx0QR7b6xevnoPP1ksX5eqMjOF/rHpRW7syFEi/byrneipe95YJ3XnmIvC5Lf1v+3TKXZf29E6u9q49m79yJ1fWm+1i+trz+yd2R6pp0SyZZmOa0PzcfzXqKaT0Wvmc9Z8mre+/OfmZW/62lvn/o6d8vNL2xldd02Gd0WL2xrre19IYls7fyRLZs1+tX7x1ku3ZHZLu+aDVL2/IFT6zWc9C8kKV+WH7+PRby/xWnDr7eWv5btcWWjN/qTbi2r6znv4WrnQtTX+M5r8vY7lYO/Dr2dlAfu+X37sa8dne+sbetc6yfw+yl9Ryt2Nstq/cOe+7Xvq6Vm2Cd+2UM7hUH2GDL+7gztUbPWvht+rns9v3nYj3Xyt9hF41rPU1/kh3rn8sW7y8//0mn17mUX9O/l92FdQ5VSIc8DMGFrivasPYv9TPx0DVHcP1Q5b7NirZqXB7y8pzXn+3y2/fvL8+pfq48/fdke64/P9G7fPX5z1jI589a+Y6XG9cbZy9tfO7EAf+ONIzXLrv9zNeuvv3sz196+9mfn6598vaz1zi9d83ivaUM0c+9Tv+93K8lrWkdl68+/2ULHaafqxbfmb5/yrj+Vavrn7Fu47WlDFvTutR4bfq8ns/nr87N8t5j28rjNVf0l6+t1zbxzlGcq8KFqg1VmtZF2hepe12f69aVTcsikj7Vn9nr+vqZ92WdNUlRde3QFfm5rv//A5i0MKZRKAMA", - "debug_symbols": "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ycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHJwycElB5ccXHLw+dn7AzLIoYAa1KEBHdCEGMMYwxjDGMMYwxjDGMMYwxjDGMMYwxnDGcMZwxnDGcMZwxnDGcMZwxkjGCMYIxgjGCMYIxgjGCMYIxgjGKMxRmOMxhiNMRpjNMZojNEYozFGY4zOGJ0xOmN0xuiM0RmjM0ZnjM4YnTEGYwzGGIwxGGMwxmCMwRiDMQZjDMY4GONgjIMxDsY4GONgjIMxDsY4GONgjMkYkzEmY0zGmIwxGWMyxmSMyRiTMRZjLMZYjLEYYzHGYozFGIsxFmPgueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO543ngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvOP5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeE6Ny+hxGUUuo8llVLmMLpdR5jLaXEady+hzGYUuo9FlVLqMTpdR6jJaXUaty+h1GcUuo9llVLuMbpdR7jLaXUa9y+h3GQUvo+FlVLyMjpdR8jJaXkbNy+h5GUUvo+llVL2MrpdR9jLaXkbdy+h7GYUvo/FlVL6MzpdR+jJaX0bty+h9GcUvo/llVL+M7pdR/jLaX0b9y+h/GQUwowFmVMCMDphRAjNaYEYNzOiBGUUwowlmVMGMLphRBjPaYEYdzOiDGYUwoxFmVMKMTphRCjNaYUYtzOiFGcUwoxlmVMOMbphRDjPaYUY9zOiHGQUxoyFmVMSMjphREjNaYkZNzOiJGUUxoylmVMWMrphRFjPaYkZdzOiLGYUxozFmVMaMzphRGjNaY0ZtzOiNGcUxozlmVMeM7phRHjPaY0Z9zOiPGQUyo0FmVMiMDplRIjNaZEaNzOiRGUUyo0lmVMmMLplRJjPaZEadzOiTGYUyo1FmVMqMTplRKjNaZUatzOiVGcUyo1lmVMuMbplRLjPaZUa9zOiXGQUzo2FmVMyMjplRMjNaZkbNzOiZGUUzo2lmVM2MrplRNjPaZkbdzOibGYUzo3FmVM6MzplROjNaZ0btzOidGcUzo3lmVM+M7plRPjPaZ0b9zOifGQU0o4FmVNCMDppRQjNaaEYNzeihGUU0o4lmVNGMLppRRjPaaEYdzeijGYU0o5FmVNKMTppRSjNaaUYtzeilGcU0o5lmVNOMbppRTjPaaUY9zeinGQU1o6FmVNSMjppRUjNaakZNzeipGUU1o6lmVNWMrppRVjPaakZdzeirGYU1o7FmVNaMzppRWjNaa0ZtzeitGcU1o7lmVNeM7ppRXjPaa0Z9zeivGQU2o8FmVNiMDptRYjNabEaNzeixGUU2o8lmVNmMLptRZjPabEadzeizGYU2o9FmVNqMTptRajNabUatzei1GcU2o9lmVNuMbptRbjPabUa9zei3GQU3o+FmVNyMjptRcjNabkbNzei5GUU3o+lmVN2MrptRdjPabkbdzei7GYU3o/FmVN6MzptRejNab0btzei9GcU3o/lmVN+M7ptRfjPab0b9zei/GQU4owFnVOCMDpxRgjNacEYNzujBGUU4owlnVOGMLpxRhjPacEYdzujDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzunDOX04pw/n9OGcPpzTh3P6cE4fzncfzpMcCqhBHRrQAU1oidLzTYzRGKMxRmOMxhjp+Ug6oAktUXq+ySCHAjrHWEkdGtABTWiJ0vNNBjkUEGMMxhiMMRhjMMZgjIMxDsY4GONgjIMxDsY4GONgjIMxDsaYjDEZYzLGZIzJGJMxJmNMxpiMMRljMcZijMUYizEWYyzGWIyxGGMxxtIYuw+3ySCHAmpQhwZ0QBNiDGMMYwxjDGMMYwxjDGMMYwxjDGMMZwxnDGcMZwxnjNPz8KQBHdCEluj0/CKDXHRaEZF0prSk8779pPO8v8ig874jKaAGdaWc5/j1t5VLZXpWwTaYwAUhaIIuGIIjl8D0rIBtWBecJ/YGE7ggBE3wTM5NOU/pDYdgCtYF5+m8wQQuCEETKHkp+Txn4xw1e1yxkp73a4+kBnVoQM/7tvMoZT+rRVJADerQgA5oQkt0nncXGcQY53nXWlKDOjSgA5rQEp3n3UXnGJbkUEANOsfoSQN6jmH7v05oiXLxm00GORRQg55jWO7TXAJn0wFNaIlyGZxNBjl0jpF7LZfC2dShAR3QhJYoF8TZdI6Rey2XxNkUUIM6NKADmtDaa+74Xp5qk0EOBdSgDg3o2AvjeNMSOb7XqUrKRXI2GeRQQA3qe/Uab1oqx5vWyvGmxXK8abUcb1oux5vWy/GmBXN8r1o1kxrUoQEd0ITWRV0L5/hevWolORRQgzo0oAOa0Pncf9q9+1mbDHIooAZ1aEB6/bX7WZv0+mv3szYZ5FBADTodHEkDOqDT8yNpidLzTafTudfS39ze09+ej/R09SKDHAqoQR0aUOVN6HyuPu3OjtVFBp1j5Ladrl7UoA4N6IAmtESDvNPB3pIGdEATWqLTwYsMcujM60nnfSNpiU63LjLIoYAa1KEBnY8vj1Ze6jYtUV7a8gjmlSyPYF7K8uiffoxzj2eHaVhSQA3q0IAOaEJLdLpw0fnKIJIcCqhBHRrQAU1oiXJh702MkYt5t6Tzvj3pvO95fLOHNEbS+e9mUocGdEATWqLzvL/IoDNvJZ33PZImtETn+XyRQQ4F1KAOPR/fkfv0PJ8vmqLzOnPkVp7XlCP3xnk+H3l8z/P5ogOa0BKd5/NFBjkUULteb2ZH6KIBHdCE9Po1O0IXGeRQQIxxnuNHHtXzWnHkUT2vFZFbfp7jkY/qPLOPPL7nmZ3/Lls7+bds7Vx/a1CHzvseSQc0oTPvPNLZ2rnIIIcCalCHBnRAE2KM88w+VpJBDj3HmI+k5xjTktiOXL5+0wFNiP0SD8ggh9hXuXy9Jz3z5qYJLdFpxYykZ95sSc+8mSnn1eDY/7VBHRrQAU1oiU57LjJI5mUb56IBHdCEluh8lXaRQQ6d+zmP/mnURR0690EerdOUmfc4TZl5rp2mrDxGpykXdWhABzShJTpNueg5xsojfZqyco+fpqzcB6cpF3VoQOSdpqw8Muerqosa1KEBHdCE1kXZnrlIz4TZnrkooAZ1aEAHNCE922Z75iLGON1aPel8fCNJz7bZitl0+rE28e/O837/7Tzvr785FNB53xztvEJcNKAzbyVNaIlOFy4yyKGAGtShATHGXtL6kbjAvaz1xvNF7cMSz1e1D09kY05JLurQgNg5pyQXLdEpyUXssKGTOmsr+xQYAzqgfOCRuMC9tvVGK/TCKGyF5yvyR+buda43HoU5Wp4XB+fo5BxNhzY5FFCD2KTJJk026bwCpfdzr3Kd+2Ovc70xCvOx57m2V7ved8vHnsf1tGtumtC6KDsrFxnkUEAN6tC8XulkP8XO9Zo9CyrCfHftiV4YheejzHew2T6xfPOZ9RPL943ZPxF6YRS2wl44CnMmIB9kru2Z7/eyh3Jhru95oRXmaDMxClthjpa7IdfbzfdV2UcRzsIF5tTDhVbohVF4jpZz7WvPP2wchTla7sk93ZB7MucWPPdkTi5c2AtHYT6y3FE5cZBz3tkoeX7cl5gJucV7VeuNo/AonIUL3Otbb7TCHC13317TOh/DXtU6H8Ne13rjLMy5j9w7OWlw4ZmbL9OyTiKMwlaYsyy5z/ZK1xuPwlm4wL3i9UYrzNFyr+91rze2whwtd/Ve/To3c9W2rdq2nEc4MbJgIrRCL4zCVtgL53U+RHZKLPKv6eaFVuiFUdgKe2FuxZF4FM7CBabHMROt0AtztJWYU1SPxF44Ctf1VBFZKbFz7i+yU2LnZGdkqUQYha2wF47CozCnv/YQC0xjL8zRWmKO1hNztNw7aWzLjU9jW27mXrl+3+0onGAa23I/5IvKjE019x/zFWT+MV9BbnIo5+ByJ6WtF/bCnIbL/ZW2XjgLF7in+zZaoRdGYSvshTVaOtxz36bDFy4wHe65b9Phnrtjsmmnwhc1qEPsq3lAE1qixe47JR25T9Y17RBZC7loQPnA911m4RLunyO7MB/4SPTCKMzddCRqLNMUR5imOMI0xRGmKY4wTXFE1kMuciigsadgIqsgduEsXGBqeU7SRNZBLHdI9kFsZ51aXv+9QR0a0AFNaIlOSy8yqO2pqsjyx0UDOqAJLVFOBG4yyKGcJI7EVtgLc975PL/2D5XlCbF/quycton9Y2Ujj1heNkcesbxsjtxvOQM/cjtyuv3I/ZaXzQujsBX2wlF4FM7CBWrOL0xzfmGa84vsb1zUoA4N6IAmtESTMfZa9Hn094R67pKc9cu9t2fKN3b+e7px/XXpr/vnxC60wkxoiVHYCjO3J47Co3AWLjAvaRdaoRdGYSus0fKSdk7exP7BsQtnYY52ng77Z8fO6ZPYPzy2ty3duTAKW2EvHIVH4SysPZmXtDzj9k+P5Zmxf3zswl6YufvfHoWzcIF5SbvQCr0wPw7J3LTpwl6Yn4hYImfy/mGyCzmT94+TXWiFXljb1mvbem1bx939w2Qz905++nWhFZ655xRR7B8om3m39HHm4d4/DLFxFB6Fs3CB+yciNlqhF0bh9ZlA7F8pm3kW5RXwwgXmFXDmuZVXwAu9MDciz7h8FXvdrReOwhpt1mizRstXsRdaoRf2PcsZ+0fLZp4N+0OvjfmJ1P4Ha39kH1mruMgghwJqUIeG6BQ5Xy9lceKi/PDMEqOwFfbCUZifoHniLFzg/rWISLRCL8zR8nHtX43Yd+uFo7BG8xrNa7T9CxIbrTBH64lRmKONxKNwFi4wNb7QCr0wCis3NT4np2L/rtmFR2GOlgcgNd6YGl9ohV4Yha2wF1bu/vWIR6IXRmEr7IWj8CicYHagHnkS5KvTc2Yr9i+XXTgKj8JZuMB080Ir9MJ8vHnCZPXpwl6YjyxPo2w1PfIYZ63pkSdBdpgeeViysPTIA5CNpcS9tM+FVuiFUdgKe+EovBpxsVf42bRE9oAMciigBnVoQIyRnyKfs1Gxl+45Z6Nir93Tk7JneB62a1EeT7RCL4zCVtgLR+EB7sJwJGaCJbbCXjgKj8JZuMBdEt5ohfl4c9t2T3hjK8zc3Dm7ApxHZXeAW6IXRmEr7IWj8CichQvcZeDc/7sNvNELo7AV9sJReBTOwgXOGi0N8TzGWQT03FG78ZtnRhqSj/G8TOXb3SxoXJT3yUOZTuTd95I3+de95s3111bYCzMhEo/CWZi55yPY1YoLrdALo7AV9sJReBTOwhptlyx6ohV6YY42EnO0I7G2zUfhUTgLa5+lYRdaoRfWntwu5cC7pzsTZ+ECd1V3JZ65+eJhL4ITGba9y4e+vdvYC0fhUTgLF9gfhVbYZPm19s3GUXgUzsIFjkehFXrhuRWxsRX2wjM3X8js9W0iD2EaFnmmpmE5h7aXuLmwF47Co3AWLjANuzBHy/2QldycWdtr3eTM2l7s5sJeOAorN69MOd+2V7K5sBX2wlF4FM7CJdwL2lzI8/u1pM3GKGyFvXAUHoWzcIH2KKzR0ticNdyr1rT9V57fr3VrEtO3nPPbq8/sf5sO7b+mQ9dfvTAKM6El9sJRmLk9cRYuMM260Aq9MApbYS8chTVampXTlXv1mY1p1oU52pGYo83E2rb07cJeOAprn6VvFy4wfbuw9uTAi73uzD5hxig8CjN3JS4wr3MXWqEXRmErPEfLudK9BM2FR+E5Ws5p7lVo9mOYdVanhRd6YRS2wtq2Wds2a9uyCp/PJXvtmXwruRefuTAK8+VUnpPpZt93y63Iw51uxsZZuIR7EZoLrdALo7AV9sJ06JF45ua051545sLciiPRC6MwH+9MzITzsOxlZXJ2cq8rc6EXRmEr7IWjMF+XWmK++PXEBabdF1phjhaJUdgKc7SWmKPlLkm7L5yFC0y7L7RCL4zCHC33ZNp94SjM0XJP7q+15J7c32HJPZnGXtgLR+H5yHKyZS8Uk1OBe6WYnIraS8XkVN9eK+bCUXgUzsIFppsXWmGOlrsvLdyPIS3cjyEtvHAWZm7unbTwwszNXZIWXhiFrTBHy32WFl54FM7CBaabF1phjpZ7Pd28sBXmaLmr082cRdurxuwNWrVt6WbiXjjmQiv0wihshb1w6nzYa8XknN1eLOZCK/TCKGyFvTC3whOPwlm4wPQ4p+T2ujEXemGO1hJztJ7YC0fh0lPFXiom5632WjE5YbYXi7kwClthLxyFR2FuxR5igWnshTnaSsyv3TwS83s3uXfS2Jzm2SvH5KTSXjqm77sdhRNMY3PWaS8B89h/Xfx1//pm/nXPoGz0wkzIHbW/VLaxF+ZXjHKf7e+VbZyFC9xfLdtohV4Yha2wF9Zo+xtmuX/3V8w2LnB/ySz37/6WWW7QrG2bUdgKe2Hts/T4wlm4wFV7Mo3NOZi9+EvOlezVXy4chWfnNKeaskwjXMKs0wjPydCci8pCjTAKz/nQnAdaNV+zar5mrwRz4SxkdmgvBnOhFXphFGZuS8ytiMRZuEDPrch/67kVPTG3YiRm7v5rK+yFo/AonIULTI8vtMLMzR2Vxl44Co/CWbjA/fu6G63QC/NYzMRW2Atz75xnSa7uEvkiJ5d3ib1TT2Mj3zNk1ybyrUZ2bSLfOOZyLpGTMLl2S+REUHZthFHYCnvhKDwKZ+EC09h99h1W6IVR2Ap74Sg8CmfhAmeNln3qnDLIVk3kG/PdqkmPsykTOeWTnZjrH6RD11/X9deW7RehFWbCSozCVpgd8UfiKDwKZ+EC7VFohV4Yha2wRrMczRKPwlmYo/mJadY589SyE3NtW5p1YRS2wl44Co/CWVh7Mr+weZ59LTsxeZa07MQIe2Fuxf63R+EsXGB7FFqhF+Y+y9w068JemKONxIPH0GbhAvuj0Aq9sLat17b12rYuj1vWasJz7+TXVC+0wtyKmZhbkXdLNyMP93Zz4yg8CmfhAo9HoRV6YRSO65OSlh2aiDyN8msOFy4wv+gQeXLlNx0u9MIzN/KUyy87XHfrhaOwRps12qzR1qPQCr2w72+ftqzTROTpkHInZnNGaIVeGPsLpS2LMxd1KEN74lE4C3Oo88TK7sy+V36iuMkhxjHGMcbRV2Kb6SuxzfSV2Gb6SmwzZwwnOWU9p+RalmWER2E+3JW4wPzG9TkD0LIxI/TCKMyPUi3xzM09nrUZ4QJT1gut0AujMHNzK1LWC0fhUTgLF5iyXpij5UFNWS+MwlbYC0fhUTjBNLTlId7fG8+dmi5eeBTOwgWmixdaoRdGYSus0fJrSOfMWMuOjXAWLjANvdAKvTAKc7Q8H9LQC0fhUTgLF5iGXliHe9XhXnW4VyvMMzUfw/5k/9y/2eWJcw6sZWtH2Ap74SjkAGRrR8gByNZOnBNqLVs7Qi/M0Tyx1d164Sis0axGsxrNH4VW6IVRWKP5HuKf//zddz/+5c9//NsPf/npD3/7+fvvv/v9P/jD/373+//4x3d//ePP3//0t+9+/9Pff/zxd9/9f3/88e/5j/73r3/8KW//9sefn//1uWu+/+m/nrfPwP/+4cfvT/rn7+rej6/vmo8o7/w8T7h7v33/fr7NyPs/P0v66v7+9f2zIZv3f54SX90/Xjz+rvs/Paz7H7+6f/v6/p7Njv0AnufRVwn9xR44r+N7D8TjnfsvHYFh/av7vzoCrvv3sb7ag/PFHjwnkvYZsH5x//6r+68XR/D5SvicRMiI8yd4xy/2QtxPMedUPH+W1+K9lLG8Uo4+30rx7IZfKeeiTO+l9FlbdH499q2Us3VOytkVfi+lPeqxnB/Lv5dydKuU5wTdWynPl211vjy1fe98aS1mpTw/sH8v5ThWpTwn1d5Jac9ZYVKe/2d9mfLCw8YzafvltvT7HhvPhF967C+eSlt+3LMTntPPFTF+HfHq2TSnLPazafxyX/6fiP7qCf3Qfjg/237rUTTO0nM5ki8jjq8j5jrfQmbEc+6uNsTmryNeHI/zy4V6FM+Jxy8jXh2RWHoaas/Xwl9tSLy6vsc0LvCPL4/I+RbrwyPy6kHg2HNK840XGa12w3rr/lYntr9z/6aTofXx1f1fnZBZWbleZDR/52XKYXoI53ffv0qI+W+NOH/oRU9zz4+u34o4Dq5mz0+3vtwVL87Hg5eMz48q3wlYTWKuPt8JOF8TcNEY/a39sB5cMZZ/uR9ePTucPwSmiN6/fqZ89QTz6I2LTu/vRRwVMd97FPkR0uXnGm9FBE+27XkhfOeZ8jd4sj2XxK+DOt6JcOMNzblc6lcRPT5+vn69ISvqbVm8tyG8r/n1G6v/syHjxYaM0DPW2U96J6J156n/V29Q/4WIgalt2Hv7wr32hc/3ImLVJeR4K+Lei7PhH59aryMWB/X51vetiHvnxct90eqIPJ9z3ntlZXq+OL9d8eWGHP9WU8N4X3d+Q/O9DemdDRlfRhyPj4/Iq4ibpr6MuGmqfXx2voy4eXa+jHBOreH2XkSrR9HffBR1XozRPo84Pt6Q8fkRee8Eb/Va64lvRox6F/H1S5TXEUxuPXF97Ijbe085tTutfXk1m59f2efnV/b5772yR36R9NoX873dmX3PHeGHvxnhFfHeRSC/PPJZhNVz5/OTnPcuiPdeHBwfn1qvI249/b6OuPX0+zri1tPv/Yjj4w0Znx+R8fnZ+a5mj1kR/vEJPt981rp1HXkdces68jri1nXk9nPne9eRX03T9vVxxNczvWYvXh3MyRvVJ86v5mlfZywuA0/0tzLWg7dn63F8OeX8enfwsdW5dvhbe7QHb4x6e28Ko9f7zHcjGjNC3t98t9tm/IYRbb13jg8+RzjX9H0voiZSDn+8F8EnO+favG9FzDov5nsTbOeSn2zIfPNRPIiY9t6jWKZLyRP7exFcSs6VBt+6lDx4FOeaYO/tC6vPlzw+P6j984g3N6QcmfPx8b54N+IXp9abEb80Nd58vpi/+JDmvamtI9gXR4uPH8W7EUfciPjGVZX+xHxOSL97VW1cVX/x7PkvZnhl2OcZ8e7j4MiuR4vPX2W09mZGm/VK5d1toe3z6tXO62nge2/T/PO3af7527TbEcfHGzI+n1V/722a53dFrw8p1nvPoV6v6P3N11y//Kjk64j++du0/vnbtP7527T+b36bVh92nz+m++Uz+W/wic3LjJsTfq8zfoPP8nKJ7usD2jdfguaC34pYb0Y8Po14dC7yj/6e74+jTo2vXzO9/rD61ozfy4ibHxPHx5eS1xG3LiWvI25dSu5HHB9vyPj8iLx5KfnlCf7mu5vHLM28fXqC27vPOfeuJd/IuHUx+UbGravJ/efP9y4ntnjDaKv19yJadafeO71+9Si+jrhXt/1lfevXddt7X5z4urb/svJk9J/PL0d9tQnfiKhvT3R7L4InnGbDPn4U70Yc9Sjme/si1yi7Dmh8HfGipHmzQfYq4maD7GX7+V6DLL8+/fVV+eMS9s0K2estuVUhyxUvP3xx8DLj5ivP1xn3Xnm+3B33WmSvI261yF7382+9YHsZcfOYvKz43+pvvYq42d9ys3+rJzcLXK+35FaBK5fs/PSYvMq468nLjM89ufmVh1wn9NMD+zrjnikvM+4elvnxm5tvZNx6d/ONjFtvb/6FjOPzbRm/wXF5U7mbbwy+kXHrjcE3Mm69Mbiv7Ytz7OUT4a1aWa56+qku8Rtc7ePfe7W/2Sx7GXGvWfaNiDvNstcRt5plr/fFrWbZNy7VN5+NP6/2fiPj5rPx5+Xeb2TcfDb+vN57f1vGb3Bcxudn6bu63WqY3T7R57vPX/cuK/H5fNM3Mu5dVuLz+abbXwb+umX28svA9xpir79PfKsg9iriZj/s9b641Q97GXGvH/Y64lY/7PWG3OqHvY641Q+7G/GiH/Yy4l4/7HXErX7Y64hb/bCXEff6YS8j7vXDXj+KW/2wlxH3+mGvI271w15eCO71w17vi1v9sPsHtX8e8eaG3OqH3d4X70bc6ofdNjXefL641Q97rdmtftjtR/FuxK1+2Otr6q162DeuqXfaYd+IuFMOux0Rbz6KW9Ww268vvm6GvY64VQz7RsSdXtjr6eV777D652+w+ufvr25HHB9vyPh8tv69N1c3e2GvI271wm5/+PEi4vEbvLl6/AZvrh6/wZurx7/5zdW9bliuaf3hpMrLjJtzdq8zfoNP6O51w74Rcacb9o2Ix6cR97phryNudcO+8TH0rTm71xk3q4evM25dUb6RceuS8o2MW9eUfyHj+Hxbxm9wXN68rNzriL0+S291xO6e6Pbuc8+9y8o3Mm5dVr6Rceuycv959L3Lys2O2OuIWx2x24/i64iXK43x2f6vyjz/wlJlfPyyjv5WQK119iLgxdkd9bY3fnlJu5+QP2hzJTy+XOksXq6WdnPBtZcZFixe96vPF/+lDI6H2XzzcQSzAE9883F0Lkj2q+eLfyljYEif681tqVXswr/elvbi/cWt5fxeJtxaz+9lwm9yfuUi8te+6Md7W3Ln+eJ1wp0njLt78/8k/Ofz//3xzz/8/IdfrFH+j3+eST//8Mc//fj99X//++8//fkX//Vv//9f9V/+9PMPP/74w//84a8//+XP3//X33/+/kw6/9t3j+t//qOdvzPavK///N138fz/z4mmNZ5s+z/6ev7HaOcfLP/wvOY9/2f+5z/Ph/f/AA==", + "bytecode": "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", + "debug_symbols": "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cnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxxccnDJwSUHlxx8fvb+gAxyKKAGdWhABzQhxjDGMMYwxjDGMMYwxjDGMMYwxjDGcMZwxnDGcMZwxnDGcMZwxnDGcMYIxgjGCMYIxgjGCMYIxgjGCMYIxmiM0RijMUZjjMYYjTEaYzTGaIzRGKMzRmeMzhidMTpjdMbojNEZozNGZ4zBGIMxBmMMxhiMMRhjMMZgjMEYgzEOxjgY42CMgzEOxjgY42CMgzEOxjgYYzLGZIzJGJMxJmNMxpiMMRljMsZkjMUYizEWYyzGWIyxGGMxxmKMxRh4bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnhueG54bnjueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueO547njueB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB54HngeeB543vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnDc8bnjc8b3je8LzhecPzhucNzxueNzxveN7wvOF5w/OG5w3PG543PG943vC84XnD84bnHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873je8bzjecfzjucdzzuedzzveN7xvON5x/OO5x3PO553PO943vG843nH847nHc87nnc873g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88Hng88H3g+8Hzg+cDzgecDzweeDzwfeD7wfOD5wPOB5wPPB54PPB94PvB84PnA84HnA88HnlPjMnpcRpHLaHIZVS6jy2WUuYw2l1HnMvpcRqHLaHQZlS6j02WUuoxWl1HrMnpdRrHLaHYZ1S6j22WUu4x2l1HvMvpdRsHLaHgZFS+j42WUvIyWl1HzMnpeRtHLaHoZVS+j62WUvYy2l1H3MvpeRuHLaHwZlS+j82WUvozWl1H7MnpfRvHLaH4Z1S+j+2WUv4z2l1H/MvpfRgHMaIAZFTCjA2aUwIwWmFEDM3pgRhHMaIIZVTCjC2aUwYw2mFEHM/pgRiHMaIQZlTCjE2aUwoxWmFELM3phRjHMaIYZ1TCjG2aUw4x2mFEP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", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 47dd0a4c37d..473567c4781 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZP4vUQBRPNpv9m90N+jEE2ewm7l4nYmUnWNnl9u4aRRAsLFOJIFj4CSztbWwUBMFCbOwEBT+KO+c893e/vGQDlzm9gTDJvDfv3/zem5ld39s13/Zd7xxNhPyy/dD2HaAH2+em/Z6fryVD0tum/PU8TYeKfy3avxxamb4b+XOR7yj+876Vc7vYyUdfRO9g+4zhPfJ2+HDlv6yfS/+v1vg8tr6+I1+F7rVoxwR888AW1Nt1E4PMJ30e2IE00T8iW9uuCT7pE3s4PrIOErtQsTVWaIglpKGeUNFzGWVJbDCWfkUveniM9TAOUU/Qgp6h4k+bOR97ZfyG5EevBT9ikuUrPvbd+Pi3bg7ArpZkJyKb9+625Y/cxCaRNcb1lPU3a3UNxs0j+17o7fIQ5/aBjvyvQeZ1+96kzvfc+N24zov+i6rzPbJnX50fK7bGCo3r6VjRM1b0XEZZM0V2l2h1dQhltllrxUc5L3YVH9G2DvHju2khjd2yvalzH2BOFa5wjOPaUezRYhdQ7CLHsZsosYtqYjcBmrxj7GTsjtde7ALFHtd7KZ89UKbsHYb/LozjvKb1XPifgcx79n3mlf3n3HJUz+dcPxAfWpw6XjnvsM7w/nXf9ho+sD7X1Wwtt1ycGTUc8r5RhY8cxnFeU3wI/0OQeWTfZ8p8qcuO77YLn/R5Ff7wHhIotno0L1R4B0QT3ge2N/SP9t1gbKL4j+ewR6S3B/IDZS7bJvxPQOZj4se7vBYbwYmGoQ7IFQzV7Recr1V+VJ0nn9rexPETyYwUP7R6zXsK8keKbzOvXDNkrvRBsaOJTrkbdIHW5lnWxOAz2MExCIvm/mrxmSr8E+IxLSZ+jJVWkyKSoe2zaAvjTzujYK5MFJ2YU89Jv4ZFxqvQkf8lyHxB/Nre0DSnApAr+7aGwR7pjPb4wTkl/K9sr+WUhhntXN4UMwH5g1iQuVpOic5/kVNnzo9Fc3+1+MwU/inxmBYTP8ZKOwdyXmr3KcQC4w9pMhdzRcMf3634DoA0tI/PwlP6Rt5Bjc8cN/lG/KNNjH/hf2N7xP//hkGMEWOwDlOmMQZjhb8OZzHQmuAMYz4ifpnfq+DHWoz8b21vYvOT7MPfYqdE03BdZ3vTGo05Ir+VucTFav3nrnNqa7GLEe4zHukPif+9/cY1kb57DjtPVnlyssxP8iw/Oko3+RWSbxr+n9S2/ny1XG8W6WZ1mC3z5Y2L15/NF8v1Is0W6TJL8oOL1r/Jbhxu0iyfHyfmc7FPv+R6r9jRsc6Z1rffcp9mfrwfIv8X4d0+X+275HCo6DN8P2r4/Ir+VIYy1i3Ojg2LMn9QlPlF96go2yi0MdCwBpsW2W+MF8oSO0Li/26/ZU0GMEfmx4r+Aek/Y7cyhnsAywqUMbzXfRN5tkff2/4t/FQnyccxtk2w4yKvtim12uSrJDlIk+M0yfbl1W/fO68iiSIAAA==", - "debug_symbols": "pZfNTutADEbfJesuxp7x/PAqCKFSAooUpVVor3SF+u7Y8TjAIhFKNj0nTefT2DVD89m8ti+39+dueDt/NA+Pn83L2PV99/7cn0/Ha3ce+N3PxskL+OYBDw0EBSmiIimyokxApwAFKjQFNQU1BTUFOQUYWVEmeKcABSq8IihIEScEvhcYfEWMpMiKMoGcAhSo8IqgIIWmkKaQppCmRE2JmhI1JWpK1JSoKVFToqZETkmMMiE5BShQ4RVBQQpOKYykyBOy9MUxpRXcw0yVsTJV5sqiLK4SKqWx3LbiK0OlrOdNg5MFICIrogiaeBNZlETIJFYBWZ5F5MNFJNo7ySSblCrTCDkRMEETy5FRUiGTaJJMskmpMo3VJGAiQygFehnfadKxviMjpRJMyERWeZFkkk0sR8ZNBUzQxJsEEzKJJqmKDBxKn2XkVNBEcqTPMngqkiN1yfCpJBPeoZceyghOIkOoAiZo4k2CCSd7qV0GUiWZZJNSJTsT2XO43w+NHS3P17Ft5WT5cdbwCXQ5ju1wbR6GW98fmn/H/jZ96ONyHCZejyPf5Y20wyuTA9+6vhW7H75Xu+Wl3DWsq7ldfg6g3wmwnBAx1IDocWn96g5CmXdQFhP8ckImKyGT37KDVKwEVtqSUNC+AyiUlxLicgK6SDUBAWhDAng/99HHxT7klYQQsiWEUDYlfHcybOokOuetDy4sdhJgdyvXIv7YS/C7m7kesb+bP1uBuxNoUxkEcycItnWC/NwJ8nlbRIA5ItCW4f5bHXl3GXl3FSt9KPNxXeLiQMhnlgIS2Q5SXCwBaSVgPisTuS0B/ENq/ut0OW4q4k97yPv3sBKB81eJy0fMakC2IrD8Dnjiq+OpG389udwlaeyOL31bL99uw+nH3ev/i92xJ5/LeD61r7exlaTvxx9+eYRSDojuSX7YymUOB8hFLmG66w/8r/DpLpv5Ag==", + "bytecode": "H4sIAAAAAAAA/+1ZzYrTUBRO2qZ/aZuOPsaANG0y7ewG8QHcCe4ynZmF4FoRhCx8AhEEFz6BS/du3CgIggtx405Q8CHsHe+ZfP16knamSWXAQLnJPed+5+d+5/7MuE72uLZtOFs8AvLbth3b1kBeX/yO7PdouyfskN0y8WejKOoo8ZXo/6RjMd1q8EeCX1H+Ry2LcyfN8DEWsdte/Hx47zkZP6qKX+avyvhvFsTs21jfU6wid0r0ow+xOeAL2m1Uk4PYJXsO+IEysd8lX8teE1yyJ/5wfmQeJHee4utQkSGXUIZ2PMXOdcSS3GAu3ZxW7HAf22Eeop16CXY6Sjxl1vzQWeWvR3E0S4hjSFiuEmOrmhgv1s02+FUSdijYvHeXjd+tJjehzDHOp8y/mat96Dc/2fc8J6tDHNsCOeq/Acxb9n2Tdb5ZTdwbr/Nif1frfJP8WbfO+4qvQ0XG66mv2PEVO9cRK1CwGyQrWocQs8y1VmKU82JDiRF9q5E+vpvHo77btjXr3EcYk8cr7OO81hR/qt4PeP/slWgHc1jEE8ESLvRJdmS/R1s+Mi8Di4dc6Cu+1kgf383jUd9d22pcwDN7Xenj3NUVf/rKuG3nSJsHbX+SvdBw5x70b7M/PQfM+/Zd40ePfNb4uwnntJzuav0RfuWtP+JbzVnlo7xjDqVvbluNc7iHFe1rm3ChjHP1JtzO49wD6N+Gc48B86F9D5TxvK83yT7KijiHmLIfVvw3hbFL9pycHBXVB9/XZJyn6LZJJrqPbGvkn+y7mQftHIXn3ydktw/4Wu2wb6KfAuZT0tfOPBr3NF76gCu8DBxH3bvQ5mBNHMxZ0X9mW5PHz4QZOKtx4HrBZ72hoh8osQXkA44V/HqayaRP7mQNkJV5hzA5+AJ+cA68dPN4tfzsKfpD0nGcrPb3QDYgGc5/QBh9xQ5ygfmHMhmLtbKupl7k2L9sTb0CzJekX1ZNyflCqymer6vW1Gvb/q+p61VTiF1VTUmtBIoe32lx76+TDHnL97cBfaNum2JuKuOK+I8+5fH/rW2R/xoHJfZ/wcGlu1a6HLdWo6h/2RrlOwbys09Y2jqHOe+SPnJL08ezLOq/s63JzS/yD/8GXrTv+Bv4fpU1et++V8mL6ezv/enc1zTLEd5FHLLvkf4H+41zIm1jCz/Ppkl4NknOkjg5OYnmyQ3CNw/+H69s+8l0MpuPo/n0OJ4kk4Pd249H48lsHMXjaBKHyeGu7c/jg+N5FCej09B8jtfZl1pvppkc1znztOy33NFZX/A80v8quovfN/t+cb5KV+0ZvZ8Fem5Oe46h9DXS5b5OuqpfT1f1xXY3XfVRZD7IcA02T89+Y74QS/zwSP+H/ZY5acMYGT9U7LfJ/pLfSh/uAYxVV/pE38zPd8GzLcZe9v8gzm0SPvaxb8KdKupqUVLTeTINw8MoPI3CeF1d/QEBlDjjASQAAA==", + "debug_symbols": "pZfNauswEIXfxesspJFGP32VSylp65aASYKbXLiUvPud8dG47cKmOJucz7H1IY0mIv7sXvvn6/vT4fh2+uge/nx2z+NhGA7vT8PpZX85nI7y7Wfn9MOH7oF2nY8IRiRERhREnYIcwiMIAQvBQrAQLCQWL1EQdYrgEB5BiICICEakKaLcixJyxRIZURB1CnYIjyBEQEQEI2BhWBgWhiXBkmBJsCRYEiwJlgRLgiXBkmDJsGRYMiwZliyWLMGIhMiIgqhTFIfwCLFUiYCICK2u23VVHk0SHkEILahsQY0tuWVqmVuWlhXpnTPQDYoKZBAMVMIKOkq2yHtn4A3IQEclhWjABurJCtmgNNDu8kVBH64Kxb6pDaZOmsAbaE86hWAQDcwzddUE2aAY1AbRGXgDMggG+tvQBWrX0fQLivYNGySDbKCjgkJtoF0HMI92HiAYRAM2SAbZoBjUBtp7pHXW7gNEA/VonbUHAerRdWkfAmoD7cWgNdRuBJBBMIgGbJAMxBx07aUY1AbaugBvQAY653i77To7uZ4uY9/rwfXtKJMD7rwf++Olezheh2HX/d0P1+mhj/P+OOVlP8pdmUh/fJUU4dth6JVuu6/Rbnmo7Ae10bIRYRbwT4NfNiSKTZACLY1fnUGs8wzqoiEsGwrbEgqHLTPI1ZYgyFsMlWwPfOWyZEjLBnKJm4HkDNlgkGNhrmNIi3UoK4YYixlirJsMX5WMmypJzgWrg4uLlfT+7lKuKX5ZSx/uLua64v5qfi8F3W3gTctgP1eC/bZKcJgrwaFsU0Q/KyJvae7fraPcvYxy9ypW6lDn47qmxYbQZ5YEmW0GOS0ugXhFMJ+Vmd0WgfxFm3+drqRNi/jVHMr9c1hR0LyVtHzErAqKLYLqT8GjXO1fDuOPF6ObmsbD/nno2+Xb9fjy7e7l39nu2IvVeTy99K/XsVfT19uVfPyR42BHgR71n7Jc+pp25Lxeer3rWC7z400n8x8=", "file_map": { "50": { "source": "use std::mem::zeroed;\n\npub struct BoundedVec4 {\n storage: [Field; 4],\n len: u32,\n}\n\nimpl BoundedVec4 {\n pub fn new() -> Self {\n BoundedVec4 { storage: [0; 4], len: 0 }\n }\n\n pub fn push(&mut self, elem: Field) {\n self.storage[self.len] = elem;\n self.len += 1;\n }\n}\n\npub struct PrivateKernelCircuitPublicInputs {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub struct FixtureBuilder {\n pub public_call_requests: BoundedVec4,\n pub counter: Field,\n}\n\nimpl FixtureBuilder {\n pub fn new() -> Self {\n FixtureBuilder { public_call_requests: zeroed(), counter: 0 }\n }\n\n pub fn append_public_call_requests_inner(&mut self) {\n self.public_call_requests.push(self.next_counter());\n }\n\n pub fn append_public_call_requests(&mut self) {\n for _ in 0..4 {\n // Note that here we push via a method call\n self.append_public_call_requests_inner();\n }\n }\n\n fn next_counter(&mut self) -> Field {\n let counter = self.counter;\n self.counter += 1;\n counter\n }\n}\n\npub struct PrivateKernelCircuitPublicInputsComposer {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub unconstrained fn sort_by(array: [Field; 4]) -> [Field; 4] {\n let result = array;\n get_sorting_index(array);\n result\n}\n\nunconstrained fn get_sorting_index(array: [Field; 4]) {\n let _ = [0; 4];\n let mut a = array;\n for i in 1..4 {\n for j in 0..i {\n a[i] = a[j];\n }\n }\n}\n\nunconstrained fn main() {\n let mut previous_kernel = FixtureBuilder::new();\n previous_kernel.append_public_call_requests();\n\n let mut output_composer = PrivateKernelCircuitPublicInputsComposer {\n l2_to_l1_msgs: [0; 4],\n public_call_requests: previous_kernel.public_call_requests.storage,\n };\n output_composer.l2_to_l1_msgs = sort_by(output_composer.l2_to_l1_msgs);\n output_composer.public_call_requests = sort_by(output_composer.public_call_requests);\n\n assert_eq(previous_kernel.public_call_requests.storage[1], 1, \"equality\");\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 47dd0a4c37d..473567c4781 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_1/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZP4vUQBRPNpv9m90N+jEE2ewm7l4nYmUnWNnl9u4aRRAsLFOJIFj4CSztbWwUBMFCbOwEBT+KO+c893e/vGQDlzm9gTDJvDfv3/zem5ld39s13/Zd7xxNhPyy/dD2HaAH2+em/Z6fryVD0tum/PU8TYeKfy3avxxamb4b+XOR7yj+876Vc7vYyUdfRO9g+4zhPfJ2+HDlv6yfS/+v1vg8tr6+I1+F7rVoxwR888AW1Nt1E4PMJ30e2IE00T8iW9uuCT7pE3s4PrIOErtQsTVWaIglpKGeUNFzGWVJbDCWfkUveniM9TAOUU/Qgp6h4k+bOR97ZfyG5EevBT9ikuUrPvbd+Pi3bg7ArpZkJyKb9+625Y/cxCaRNcb1lPU3a3UNxs0j+17o7fIQ5/aBjvyvQeZ1+96kzvfc+N24zov+i6rzPbJnX50fK7bGCo3r6VjRM1b0XEZZM0V2l2h1dQhltllrxUc5L3YVH9G2DvHju2khjd2yvalzH2BOFa5wjOPaUezRYhdQ7CLHsZsosYtqYjcBmrxj7GTsjtde7ALFHtd7KZ89UKbsHYb/LozjvKb1XPifgcx79n3mlf3n3HJUz+dcPxAfWpw6XjnvsM7w/nXf9ho+sD7X1Wwtt1ycGTUc8r5RhY8cxnFeU3wI/0OQeWTfZ8p8qcuO77YLn/R5Ff7wHhIotno0L1R4B0QT3ge2N/SP9t1gbKL4j+ewR6S3B/IDZS7bJvxPQOZj4se7vBYbwYmGoQ7IFQzV7Recr1V+VJ0nn9rexPETyYwUP7R6zXsK8keKbzOvXDNkrvRBsaOJTrkbdIHW5lnWxOAz2MExCIvm/mrxmSr8E+IxLSZ+jJVWkyKSoe2zaAvjTzujYK5MFJ2YU89Jv4ZFxqvQkf8lyHxB/Nre0DSnApAr+7aGwR7pjPb4wTkl/K9sr+WUhhntXN4UMwH5g1iQuVpOic5/kVNnzo9Fc3+1+MwU/inxmBYTP8ZKOwdyXmr3KcQC4w9pMhdzRcMf3634DoA0tI/PwlP6Rt5Bjc8cN/lG/KNNjH/hf2N7xP//hkGMEWOwDlOmMQZjhb8OZzHQmuAMYz4ifpnfq+DHWoz8b21vYvOT7MPfYqdE03BdZ3vTGo05Ir+VucTFav3nrnNqa7GLEe4zHukPif+9/cY1kb57DjtPVnlyssxP8iw/Oko3+RWSbxr+n9S2/ny1XG8W6WZ1mC3z5Y2L15/NF8v1Is0W6TJL8oOL1r/Jbhxu0iyfHyfmc7FPv+R6r9jRsc6Z1rffcp9mfrwfIv8X4d0+X+275HCo6DN8P2r4/Ir+VIYy1i3Ojg2LMn9QlPlF96go2yi0MdCwBpsW2W+MF8oSO0Li/26/ZU0GMEfmx4r+Aek/Y7cyhnsAywqUMbzXfRN5tkff2/4t/FQnyccxtk2w4yKvtim12uSrJDlIk+M0yfbl1W/fO68iiSIAAA==", - "debug_symbols": "pZfNTutADEbfJesuxp7x/PAqCKFSAooUpVVor3SF+u7Y8TjAIhFKNj0nTefT2DVD89m8ti+39+dueDt/NA+Pn83L2PV99/7cn0/Ha3ce+N3PxskL+OYBDw0EBSmiIimyokxApwAFKjQFNQU1BTUFOQUYWVEmeKcABSq8IihIEScEvhcYfEWMpMiKMoGcAhSo8IqgIIWmkKaQppCmRE2JmhI1JWpK1JSoKVFToqZETkmMMiE5BShQ4RVBQQpOKYykyBOy9MUxpRXcw0yVsTJV5sqiLK4SKqWx3LbiK0OlrOdNg5MFICIrogiaeBNZlETIJFYBWZ5F5MNFJNo7ySSblCrTCDkRMEETy5FRUiGTaJJMskmpMo3VJGAiQygFehnfadKxviMjpRJMyERWeZFkkk0sR8ZNBUzQxJsEEzKJJqmKDBxKn2XkVNBEcqTPMngqkiN1yfCpJBPeoZceyghOIkOoAiZo4k2CCSd7qV0GUiWZZJNSJTsT2XO43w+NHS3P17Ft5WT5cdbwCXQ5ju1wbR6GW98fmn/H/jZ96ONyHCZejyPf5Y20wyuTA9+6vhW7H75Xu+Wl3DWsq7ldfg6g3wmwnBAx1IDocWn96g5CmXdQFhP8ckImKyGT37KDVKwEVtqSUNC+AyiUlxLicgK6SDUBAWhDAng/99HHxT7klYQQsiWEUDYlfHcybOokOuetDy4sdhJgdyvXIv7YS/C7m7kesb+bP1uBuxNoUxkEcycItnWC/NwJ8nlbRIA5ItCW4f5bHXl3GXl3FSt9KPNxXeLiQMhnlgIS2Q5SXCwBaSVgPisTuS0B/ENq/ut0OW4q4k97yPv3sBKB81eJy0fMakC2IrD8Dnjiq+OpG389udwlaeyOL31bL99uw+nH3ev/i92xJ5/LeD61r7exlaTvxx9+eYRSDojuSX7YymUOB8hFLmG66w/8r/DpLpv5Ag==", + "bytecode": "H4sIAAAAAAAA/+1ZzYrTUBRO2qZ/aZuOPsaANG0y7ewG8QHcCe4ynZmF4FoRhCx8AhEEFz6BS/du3CgIggtx405Q8CHsHe+ZfP16knamSWXAQLnJPed+5+d+5/7MuE72uLZtOFs8AvLbth3b1kBeX/yO7PdouyfskN0y8WejKOoo8ZXo/6RjMd1q8EeCX1H+Ry2LcyfN8DEWsdte/Hx47zkZP6qKX+avyvhvFsTs21jfU6wid0r0ow+xOeAL2m1Uk4PYJXsO+IEysd8lX8teE1yyJ/5wfmQeJHee4utQkSGXUIZ2PMXOdcSS3GAu3ZxW7HAf22Eeop16CXY6Sjxl1vzQWeWvR3E0S4hjSFiuEmOrmhgv1s02+FUSdijYvHeXjd+tJjehzDHOp8y/mat96Dc/2fc8J6tDHNsCOeq/Acxb9n2Tdb5ZTdwbr/Nif1frfJP8WbfO+4qvQ0XG66mv2PEVO9cRK1CwGyQrWocQs8y1VmKU82JDiRF9q5E+vpvHo77btjXr3EcYk8cr7OO81hR/qt4PeP/slWgHc1jEE8ESLvRJdmS/R1s+Mi8Di4dc6Cu+1kgf383jUd9d22pcwDN7Xenj3NUVf/rKuG3nSJsHbX+SvdBw5x70b7M/PQfM+/Zd40ePfNb4uwnntJzuav0RfuWtP+JbzVnlo7xjDqVvbluNc7iHFe1rm3ChjHP1JtzO49wD6N+Gc48B86F9D5TxvK83yT7KijiHmLIfVvw3hbFL9pycHBXVB9/XZJyn6LZJJrqPbGvkn+y7mQftHIXn3ydktw/4Wu2wb6KfAuZT0tfOPBr3NF76gCu8DBxH3bvQ5mBNHMxZ0X9mW5PHz4QZOKtx4HrBZ72hoh8osQXkA44V/HqayaRP7mQNkJV5hzA5+AJ+cA68dPN4tfzsKfpD0nGcrPb3QDYgGc5/QBh9xQ5ygfmHMhmLtbKupl7k2L9sTb0CzJekX1ZNyflCqymer6vW1Gvb/q+p61VTiF1VTUmtBIoe32lx76+TDHnL97cBfaNum2JuKuOK+I8+5fH/rW2R/xoHJfZ/wcGlu1a6HLdWo6h/2RrlOwbys09Y2jqHOe+SPnJL08ezLOq/s63JzS/yD/8GXrTv+Bv4fpU1et++V8mL6ezv/enc1zTLEd5FHLLvkf4H+41zIm1jCz/Ppkl4NknOkjg5OYnmyQ3CNw/+H69s+8l0MpuPo/n0OJ4kk4Pd249H48lsHMXjaBKHyeGu7c/jg+N5FCej09B8jtfZl1pvppkc1znztOy33NFZX/A80v8quovfN/t+cb5KV+0ZvZ8Fem5Oe46h9DXS5b5OuqpfT1f1xXY3XfVRZD7IcA02T89+Y74QS/zwSP+H/ZY5acMYGT9U7LfJ/pLfSh/uAYxVV/pE38zPd8GzLcZe9v8gzm0SPvaxb8KdKupqUVLTeTINw8MoPI3CeF1d/QEBlDjjASQAAA==", + "debug_symbols": "pZfNauswEIXfxesspJFGP32VSylp65aASYKbXLiUvPud8dG47cKmOJucz7H1IY0mIv7sXvvn6/vT4fh2+uge/nx2z+NhGA7vT8PpZX85nI7y7Wfn9MOH7oF2nY8IRiRERhREnYIcwiMIAQvBQrAQLCQWL1EQdYrgEB5BiICICEakKaLcixJyxRIZURB1CnYIjyBEQEQEI2BhWBgWhiXBkmBJsCRYEiwJlgRLgiXBkmDJsGRYMiwZliyWLMGIhMiIgqhTFIfwCLFUiYCICK2u23VVHk0SHkEILahsQY0tuWVqmVuWlhXpnTPQDYoKZBAMVMIKOkq2yHtn4A3IQEclhWjABurJCtmgNNDu8kVBH64Kxb6pDaZOmsAbaE86hWAQDcwzddUE2aAY1AbRGXgDMggG+tvQBWrX0fQLivYNGySDbKCjgkJtoF0HMI92HiAYRAM2SAbZoBjUBtp7pHXW7gNEA/VonbUHAerRdWkfAmoD7cWgNdRuBJBBMIgGbJAMxBx07aUY1AbaugBvQAY653i77To7uZ4uY9/rwfXtKJMD7rwf++Olezheh2HX/d0P1+mhj/P+OOVlP8pdmUh/fJUU4dth6JVuu6/Rbnmo7Ae10bIRYRbwT4NfNiSKTZACLY1fnUGs8wzqoiEsGwrbEgqHLTPI1ZYgyFsMlWwPfOWyZEjLBnKJm4HkDNlgkGNhrmNIi3UoK4YYixlirJsMX5WMmypJzgWrg4uLlfT+7lKuKX5ZSx/uLua64v5qfi8F3W3gTctgP1eC/bZKcJgrwaFsU0Q/KyJvae7fraPcvYxy9ypW6lDn47qmxYbQZ5YEmW0GOS0ugXhFMJ+Vmd0WgfxFm3+drqRNi/jVHMr9c1hR0LyVtHzErAqKLYLqT8GjXO1fDuOPF6ObmsbD/nno2+Xb9fjy7e7l39nu2IvVeTy99K/XsVfT19uVfPyR42BHgR71n7Jc+pp25Lxeer3rWC7z400n8x8=", "file_map": { "50": { "source": "use std::mem::zeroed;\n\npub struct BoundedVec4 {\n storage: [Field; 4],\n len: u32,\n}\n\nimpl BoundedVec4 {\n pub fn new() -> Self {\n BoundedVec4 { storage: [0; 4], len: 0 }\n }\n\n pub fn push(&mut self, elem: Field) {\n self.storage[self.len] = elem;\n self.len += 1;\n }\n}\n\npub struct PrivateKernelCircuitPublicInputs {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub struct FixtureBuilder {\n pub public_call_requests: BoundedVec4,\n pub counter: Field,\n}\n\nimpl FixtureBuilder {\n pub fn new() -> Self {\n FixtureBuilder { public_call_requests: zeroed(), counter: 0 }\n }\n\n pub fn append_public_call_requests_inner(&mut self) {\n self.public_call_requests.push(self.next_counter());\n }\n\n pub fn append_public_call_requests(&mut self) {\n for _ in 0..4 {\n // Note that here we push via a method call\n self.append_public_call_requests_inner();\n }\n }\n\n fn next_counter(&mut self) -> Field {\n let counter = self.counter;\n self.counter += 1;\n counter\n }\n}\n\npub struct PrivateKernelCircuitPublicInputsComposer {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub unconstrained fn sort_by(array: [Field; 4]) -> [Field; 4] {\n let result = array;\n get_sorting_index(array);\n result\n}\n\nunconstrained fn get_sorting_index(array: [Field; 4]) {\n let _ = [0; 4];\n let mut a = array;\n for i in 1..4 {\n for j in 0..i {\n a[i] = a[j];\n }\n }\n}\n\nunconstrained fn main() {\n let mut previous_kernel = FixtureBuilder::new();\n previous_kernel.append_public_call_requests();\n\n let mut output_composer = PrivateKernelCircuitPublicInputsComposer {\n l2_to_l1_msgs: [0; 4],\n public_call_requests: previous_kernel.public_call_requests.storage,\n };\n output_composer.l2_to_l1_msgs = sort_by(output_composer.l2_to_l1_msgs);\n output_composer.public_call_requests = sort_by(output_composer.public_call_requests);\n\n assert_eq(previous_kernel.public_call_requests.storage[1], 1, \"equality\");\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 6b967c34f1e..a6b59d4a73f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZP4vUQBRPNpv9m90N+jEE2ewm7l4nYmUnWNnl9u4aRRAsLFOJIFj4CSztbWwUBMFCbOwEBT+KO+c893e/vGQDlzm9gTDJvDfv3/zem5ld39s13/Zd7xxNhPyy/dD2HaAH2+em/Z6fryVD0tum/PU8TYeKfy3avxxamb4b+XOR7yj+876Vc7vYyUdfRO9g+4zhPfJ2+HDlv6yfS/+v1vg8tr6+I1+F7rVoxwR888AW1Nt1E4PMJ30e2IE00T8iW9uuCT7pE3s4PrIOErtQsTVWaIglpKGeUNFzGWVJbDCWfkUveniM9TAOUU/Qgp6h4k+bOR97ZfyG5EevBT9ikuUrPvbd+Pi3bg7ArpZkJyKb9+625Y/cxCaRNcb1lPU3a3UNxs0j+17o7fIQ5/aBjvyvQeZ1+96kzvfc+N24zov+i6rzPbJnX50fK7bGCo3r6VjRM1b0XEZZM0V2l2h1dQhltllrxUc5L3YVH9G2DvHju2khjd2yvalzH2BOFa5wjOPaUezRYhdQ7CLHsZsosYtqYjcBmrxj7GTsjtde7ALFHtd7KZ89UKbsHYb/LozjvKb1XPifgcx79n3mlf3n3HJUz+dcPxAfWpw6XjnvsM7w/nXf9ho+sD7X1Wwtt1ycGTUc8r5RhY8cxnFeU3wI/0OQeWTfZ8p8qcuO77YLn/R5Ff7wHhIotno0L1R4B0QT3ge2N/SP9t1gbKL4j+ewR6S3B/IDZS7bJvxPQOZj4se7vBYbwYmGoQ7IFQzV7Recr1V+VJ0nn9rexPETyYwUP7R6zXsK8keKbzOvXDNkrvRBsaOJTrkbdIHW5lnWxOAz2MExCIvm/mrxmSr8E+IxLSZ+jJVWkyKSoe2zaAvjTzujYK5MFJ2YU89Jv4ZFxqvQkf8lyHxB/Nre0DSnApAr+7aGwR7pjPb4wTkl/K9sr+WUhhntXN4UMwH5g1iQuVpOic5/kVNnzo9Fc3+1+MwU/inxmBYTP8ZKOwdyXmr3KcQC4w9pMhdzRcMf3634DoA0tI/PwlP6Rt5Bjc8cN/lG/KNNjH/hf2N7xP//hkGMEWOwDlOmMQZjhb8OZzHQmuAMYz4ifpnfq+DHWoz8b21vYvOT7MPfYqdE03BdZ3vTGo05Ir+VucTFav3nrnNqa7GLEe4zHukPif+9/cY1kb57DjtPVnlyssxP8iw/Oko3+RWSbxr+n9S2/ny1XG8W6WZ1mC3z5Y2L15/NF8v1Is0W6TJL8oOL1r/Jbhxu0iyfHyfmc7FPv+R6r9jRsc6Z1rffcp9mfrwfIv8X4d0+X+275HCo6DN8P2r4/Ir+VIYy1i3Ojg2LMn9QlPlF96go2yi0MdCwBpsW2W+MF8oSO0Li/26/ZU0GMEfmx4r+Aek/Y7cyhnsAywqUMbzXfRN5tkff2/4t/FQnyccxtk2w4yKvtim12uSrJDlIk+M0yfbl1W/fO68iiSIAAA==", - "debug_symbols": "tZfRbuowDIbfpddcJE7i2HuVo2lirJuQKkAdHOlo4t1PHMdlO1IrVHRu+L5S8s9xTDW+urf+9fLxsj+8Hz+7p19f3eu4H4b9x8tw3G3P++OhvPvVOXnxoXuCTeejIilQkRWk4ApwCq8AhaaApoCmgKZASfEFpOCK4BReAYqgiIqkwIpY7sWCcpUKsoIUXJGcwitAERRRkRSakjQlaUrSFNQU1BTUFNQU1BTUFNQU1BQsKVTAFdkpvAIUQREVSSH7c4W5kZQkrSkbJ+lGKEyN2JgbqZGV7Bp9o/S21MehMTbKeizH6sqCSlmQRcAkmMgaEkkm2MTLn2MRGQEngvZONiETblKHyIt4EzCxnDpMVZIJmmQTMuEmMlgq3kRWyfwG+UyQWYf2jgyVSjRJJrIqimQTMrEcGTgVbwImwSSaJBM0yU1k5ECOQIZOBUwkR45ARk9FcqSHMn4q2aRUGGTLMoRVZAxVvAmYBJNoUpKDHIGMpEo2IRNuQs5EaqbrddPZw+XlPPa9PFu+PW3KM+i0HfvDuXs6XIZh0/3eDpf6oc/T9lB53o7lbimkP7wVlsD3/dCLXTe31W5+aSnXVpc6/RSQfib4+QSU860BGGBu/WIFnK0Cim4uIcwnZDn1GpAhr6mAI1gFHMOKBHDBSgCXZ7uICzUAJash+Nk+5oWEkKaTDBTXJESaTiL52V3wQkJinBI4r0nA21ng/Fngw33w8H8j7uuljw83czHivm4uTjZbK8CH/GjC/Pd7eRs4dQJxZSfo1gnClRE8RXBYNdx37YMf3gY/vIuFxy1Fm2zC2e8GpIUAb12giGsCOFsTmHjNDu4qgB4sYCkAorfvBIZVATR9qf45xOdytd3txx+/W66SNO63r0PfLt8vh923u+c/J7tjv3tO43HXv13GXpJuP37Kyy/PvAFwz/JPrVxS3HhiufT1bth4Ts9XKeYv", + "bytecode": "H4sIAAAAAAAA/+1ZzYrTUBRO2qZ/aZuOPsaANG0y7ewG8QHcCe4ynZmF4FoRhCx8AhEEFz6BS/du3CgIggtx405Q8CHsHe+ZfP16knamSWXAQLnJPed+5+d+5/7MuE72uLZtOFs8AvLbth3b1kBeX/yO7PdouyfskN0y8WejKOoo8ZXo/6RjMd1q8EeCX1H+Ry2LcyfN8DEWsdte/Hx47zkZP6qKX+avyvhvFsTs21jfU6wid0r0ow+xOeAL2m1Uk4PYJXsO+IEysd8lX8teE1yyJ/5wfmQeJHee4utQkSGXUIZ2PMXOdcSS3GAu3ZxW7HAf22Eeop16CXY6Sjxl1vzQWeWvR3E0S4hjSFiuEmOrmhgv1s02+FUSdijYvHeXjd+tJjehzDHOp8y/mat96Dc/2fc8J6tDHNsCOeq/Acxb9n2Tdb5ZTdwbr/Nif1frfJP8WbfO+4qvQ0XG66mv2PEVO9cRK1CwGyQrWocQs8y1VmKU82JDiRF9q5E+vpvHo77btjXr3EcYk8cr7OO81hR/qt4PeP/slWgHc1jEE8ESLvRJdmS/R1s+Mi8Di4dc6Cu+1kgf383jUd9d22pcwDN7Xenj3NUVf/rKuG3nSJsHbX+SvdBw5x70b7M/PQfM+/Zd40ePfNb4uwnntJzuav0RfuWtP+JbzVnlo7xjDqVvbluNc7iHFe1rm3ChjHP1JtzO49wD6N+Gc48B86F9D5TxvK83yT7KijiHmLIfVvw3hbFL9pycHBXVB9/XZJyn6LZJJrqPbGvkn+y7mQftHIXn3ydktw/4Wu2wb6KfAuZT0tfOPBr3NF76gCu8DBxH3bvQ5mBNHMxZ0X9mW5PHz4QZOKtx4HrBZ72hoh8osQXkA44V/HqayaRP7mQNkJV5hzA5+AJ+cA68dPN4tfzsKfpD0nGcrPb3QDYgGc5/QBh9xQ5ygfmHMhmLtbKupl7k2L9sTb0CzJekX1ZNyflCqymer6vW1Gvb/q+p61VTiF1VTUmtBIoe32lx76+TDHnL97cBfaNum2JuKuOK+I8+5fH/rW2R/xoHJfZ/wcGlu1a6HLdWo6h/2RrlOwbys09Y2jqHOe+SPnJL08ezLOq/s63JzS/yD/8GXrTv+Bv4fpU1et++V8mL6ezv/enc1zTLEd5FHLLvkf4H+41zIm1jCz/Ppkl4NknOkjg5OYnmyQ3CNw/+H69s+8l0MpuPo/n0OJ4kk4Pd249H48lsHMXjaBKHyeGu7c/jg+N5FCej09B8jtfZl1pvppkc1znztOy33NFZX/A80v8quovfN/t+cb5KV+0ZvZ8Fem5Oe46h9DXS5b5OuqpfT1f1xXY3XfVRZD7IcA02T89+Y74QS/zwSP+H/ZY5acMYGT9U7LfJ/pLfSh/uAYxVV/pE38zPd8GzLcZe9v8gzm0SPvaxb8KdKupqUVLTeTINw8MoPI3CeF1d/QEBlDjjASQAAA==", + "debug_symbols": "tZfdauMwEIXfxde50O9I6qsspaSpWwzGCW6ysJS8+874aJx2wSY47E3P59j6kEZjNflq3trXy8dLN7wfP5unX1/N69j1fffx0h8P+3N3HPjTr8bIH+ubJ7drbEBEBCESIiPKFM4gLMIhYHGwOFgcLI4tliMjyhTeICzCITwiICKCpgh8L3DwVeRIiIwoU0SDsAiH8IiAiAhYIiwRlggLwUKwECwEC8FCsBAsBAvBQrAkWBIsCZYES2JL5ogIQiRERpQpskFYhFTJcPqaoaYUmEtU+OnEYREOIQ97zlAz1qSaqWauWZDWGAXZoyjgFLyCSEhARkmPWKNgFXiUPCKNZpNAUIgKoskCSSFXkP6yRUB6yghk/aRUmHppAqsgXWkFvEJQUI/0FSApZIVSIRgFq+AUvIKMml4deUYKJr2GT6ICKSQFGRUESgXpO4B6pPcAXiEoRAVSSApZoVSQ7nOyBdJ/gKAgHtkC6UKAeKSG0omAUkG60cuSpR8BTsErBIWoQAps9rIFOSuUCtK5AKvgFGTO+XrdNXp2vZzHtpWj69thxkfcaT+2w7l5Gi59v2t+7/vL9NDnaT9Med6PfJcn0g5vnCx87/pW6Lq7jTbLQ7k0OpprYmdB/GmwywaS/Z0E5N3S+NUZlKQzyMEsGfyyIcmuT4Lk0pYZlOB0BiX4DQZnvE7BmbRYRVqZg8tR5+DtYh3TisHHeSd9DlsMIc87Ee3iKsqKIRaaDSVtMdBtL2h5L+jhOsgx/j8V99XShoeLuaq4r5qrnV20FI7/qTxqWH6/15dBcyWINlYi3yqRaaOizIriNzX3XesoDy+jPLyKleM2B+3sTIvvhosrAqtVyIG2CErSIpRctqzgrgnkByewJnDB6jtBfpMgzy/VP5v4zFf7Qzf++Fl0FdPY7V/7tl6+X4bDt7vnPye9oz+rTuPx0L5dxlZMt99W/OeX42/mzrtn+ZLMl5YPKmesXFq5ayJfpuerTOYv", "file_map": { "50": { "source": "use std::mem::zeroed;\n\npub struct BoundedVec4 {\n storage: [Field; 4],\n len: u32,\n}\n\nimpl BoundedVec4 {\n pub fn new() -> Self {\n BoundedVec4 { storage: [0; 4], len: 0 }\n }\n\n pub fn push(&mut self, elem: Field) {\n self.storage[self.len] = elem;\n self.len += 1;\n }\n}\n\npub struct PrivateKernelCircuitPublicInputs {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub struct FixtureBuilder {\n pub public_call_requests: BoundedVec4,\n pub counter: Field,\n}\n\nimpl FixtureBuilder {\n pub fn new() -> Self {\n FixtureBuilder { public_call_requests: zeroed(), counter: 0 }\n }\n\n pub fn append_public_call_requests(&mut self) {\n for _ in 0..4 {\n // Note that here we push directly, not through a method call\n self.public_call_requests.push(self.next_counter());\n }\n }\n\n fn next_counter(&mut self) -> Field {\n let counter = self.counter;\n self.counter += 1;\n counter\n }\n}\n\npub struct PrivateKernelCircuitPublicInputsComposer {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\nimpl PrivateKernelCircuitPublicInputsComposer {\n pub unconstrained fn sort_ordered_values(&mut self) {\n self.l2_to_l1_msgs = sort_by(self.l2_to_l1_msgs);\n self.public_call_requests = sort_by(self.public_call_requests);\n }\n}\n\npub unconstrained fn sort_by(array: [Field; 4]) -> [Field; 4] {\n let result = array;\n get_sorting_index(array);\n result\n}\n\nunconstrained fn get_sorting_index(array: [Field; 4]) {\n let _ = [0; 4];\n let mut a = array;\n for i in 1..4 {\n for j in 0..i {\n a[i] = a[j];\n }\n }\n}\n\nunconstrained fn main() {\n let mut previous_kernel = FixtureBuilder::new();\n previous_kernel.append_public_call_requests();\n\n let mut output_composer = PrivateKernelCircuitPublicInputsComposer {\n l2_to_l1_msgs: [0; 4],\n public_call_requests: previous_kernel.public_call_requests.storage,\n };\n output_composer.sort_ordered_values();\n\n assert_eq(previous_kernel.public_call_requests.storage[1], 1, \"equality\");\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 6b967c34f1e..a6b59d4a73f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_2/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -31,8 +31,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VZP4vUQBRPNpv9m90N+jEE2ewm7l4nYmUnWNnl9u4aRRAsLFOJIFj4CSztbWwUBMFCbOwEBT+KO+c893e/vGQDlzm9gTDJvDfv3/zem5ld39s13/Zd7xxNhPyy/dD2HaAH2+em/Z6fryVD0tum/PU8TYeKfy3avxxamb4b+XOR7yj+876Vc7vYyUdfRO9g+4zhPfJ2+HDlv6yfS/+v1vg8tr6+I1+F7rVoxwR888AW1Nt1E4PMJ30e2IE00T8iW9uuCT7pE3s4PrIOErtQsTVWaIglpKGeUNFzGWVJbDCWfkUveniM9TAOUU/Qgp6h4k+bOR97ZfyG5EevBT9ikuUrPvbd+Pi3bg7ArpZkJyKb9+625Y/cxCaRNcb1lPU3a3UNxs0j+17o7fIQ5/aBjvyvQeZ1+96kzvfc+N24zov+i6rzPbJnX50fK7bGCo3r6VjRM1b0XEZZM0V2l2h1dQhltllrxUc5L3YVH9G2DvHju2khjd2yvalzH2BOFa5wjOPaUezRYhdQ7CLHsZsosYtqYjcBmrxj7GTsjtde7ALFHtd7KZ89UKbsHYb/LozjvKb1XPifgcx79n3mlf3n3HJUz+dcPxAfWpw6XjnvsM7w/nXf9ho+sD7X1Wwtt1ycGTUc8r5RhY8cxnFeU3wI/0OQeWTfZ8p8qcuO77YLn/R5Ff7wHhIotno0L1R4B0QT3ge2N/SP9t1gbKL4j+ewR6S3B/IDZS7bJvxPQOZj4se7vBYbwYmGoQ7IFQzV7Recr1V+VJ0nn9rexPETyYwUP7R6zXsK8keKbzOvXDNkrvRBsaOJTrkbdIHW5lnWxOAz2MExCIvm/mrxmSr8E+IxLSZ+jJVWkyKSoe2zaAvjTzujYK5MFJ2YU89Jv4ZFxqvQkf8lyHxB/Nre0DSnApAr+7aGwR7pjPb4wTkl/K9sr+WUhhntXN4UMwH5g1iQuVpOic5/kVNnzo9Fc3+1+MwU/inxmBYTP8ZKOwdyXmr3KcQC4w9pMhdzRcMf3634DoA0tI/PwlP6Rt5Bjc8cN/lG/KNNjH/hf2N7xP//hkGMEWOwDlOmMQZjhb8OZzHQmuAMYz4ifpnfq+DHWoz8b21vYvOT7MPfYqdE03BdZ3vTGo05Ir+VucTFav3nrnNqa7GLEe4zHukPif+9/cY1kb57DjtPVnlyssxP8iw/Oko3+RWSbxr+n9S2/ny1XG8W6WZ1mC3z5Y2L15/NF8v1Is0W6TJL8oOL1r/Jbhxu0iyfHyfmc7FPv+R6r9jRsc6Z1rffcp9mfrwfIv8X4d0+X+275HCo6DN8P2r4/Ir+VIYy1i3Ojg2LMn9QlPlF96go2yi0MdCwBpsW2W+MF8oSO0Li/26/ZU0GMEfmx4r+Aek/Y7cyhnsAywqUMbzXfRN5tkff2/4t/FQnyccxtk2w4yKvtim12uSrJDlIk+M0yfbl1W/fO68iiSIAAA==", - "debug_symbols": "tZfRbuowDIbfpddcJE7i2HuVo2lirJuQKkAdHOlo4t1PHMdlO1IrVHRu+L5S8s9xTDW+urf+9fLxsj+8Hz+7p19f3eu4H4b9x8tw3G3P++OhvPvVOXnxoXuCTeejIilQkRWk4ApwCq8AhaaApoCmgKZASfEFpOCK4BReAYqgiIqkwIpY7sWCcpUKsoIUXJGcwitAERRRkRSakjQlaUrSFNQU1BTUFNQU1BTUFNQU1BQsKVTAFdkpvAIUQREVSSH7c4W5kZQkrSkbJ+lGKEyN2JgbqZGV7Bp9o/S21MehMTbKeizH6sqCSlmQRcAkmMgaEkkm2MTLn2MRGQEngvZONiETblKHyIt4EzCxnDpMVZIJmmQTMuEmMlgq3kRWyfwG+UyQWYf2jgyVSjRJJrIqimQTMrEcGTgVbwImwSSaJBM0yU1k5ECOQIZOBUwkR45ARk9FcqSHMn4q2aRUGGTLMoRVZAxVvAmYBJNoUpKDHIGMpEo2IRNuQs5EaqbrddPZw+XlPPa9PFu+PW3KM+i0HfvDuXs6XIZh0/3eDpf6oc/T9lB53o7lbimkP7wVlsD3/dCLXTe31W5+aSnXVpc6/RSQfib4+QSU860BGGBu/WIFnK0Cim4uIcwnZDn1GpAhr6mAI1gFHMOKBHDBSgCXZ7uICzUAJash+Nk+5oWEkKaTDBTXJESaTiL52V3wQkJinBI4r0nA21ng/Fngw33w8H8j7uuljw83czHivm4uTjZbK8CH/GjC/Pd7eRs4dQJxZSfo1gnClRE8RXBYNdx37YMf3gY/vIuFxy1Fm2zC2e8GpIUAb12giGsCOFsTmHjNDu4qgB4sYCkAorfvBIZVATR9qf45xOdytd3txx+/W66SNO63r0PfLt8vh923u+c/J7tjv3tO43HXv13GXpJuP37Kyy/PvAFwz/JPrVxS3HhiufT1bth4Ts9XKeYv", + "bytecode": "H4sIAAAAAAAA/+1ZzYrTUBRO2qZ/aZuOPsaANG0y7ewG8QHcCe4ynZmF4FoRhCx8AhEEFz6BS/du3CgIggtx405Q8CHsHe+ZfP16knamSWXAQLnJPed+5+d+5/7MuE72uLZtOFs8AvLbth3b1kBeX/yO7PdouyfskN0y8WejKOoo8ZXo/6RjMd1q8EeCX1H+Ry2LcyfN8DEWsdte/Hx47zkZP6qKX+avyvhvFsTs21jfU6wid0r0ow+xOeAL2m1Uk4PYJXsO+IEysd8lX8teE1yyJ/5wfmQeJHee4utQkSGXUIZ2PMXOdcSS3GAu3ZxW7HAf22Eeop16CXY6Sjxl1vzQWeWvR3E0S4hjSFiuEmOrmhgv1s02+FUSdijYvHeXjd+tJjehzDHOp8y/mat96Dc/2fc8J6tDHNsCOeq/Acxb9n2Tdb5ZTdwbr/Nif1frfJP8WbfO+4qvQ0XG66mv2PEVO9cRK1CwGyQrWocQs8y1VmKU82JDiRF9q5E+vpvHo77btjXr3EcYk8cr7OO81hR/qt4PeP/slWgHc1jEE8ESLvRJdmS/R1s+Mi8Di4dc6Cu+1kgf383jUd9d22pcwDN7Xenj3NUVf/rKuG3nSJsHbX+SvdBw5x70b7M/PQfM+/Zd40ePfNb4uwnntJzuav0RfuWtP+JbzVnlo7xjDqVvbluNc7iHFe1rm3ChjHP1JtzO49wD6N+Gc48B86F9D5TxvK83yT7KijiHmLIfVvw3hbFL9pycHBXVB9/XZJyn6LZJJrqPbGvkn+y7mQftHIXn3ydktw/4Wu2wb6KfAuZT0tfOPBr3NF76gCu8DBxH3bvQ5mBNHMxZ0X9mW5PHz4QZOKtx4HrBZ72hoh8osQXkA44V/HqayaRP7mQNkJV5hzA5+AJ+cA68dPN4tfzsKfpD0nGcrPb3QDYgGc5/QBh9xQ5ygfmHMhmLtbKupl7k2L9sTb0CzJekX1ZNyflCqymer6vW1Gvb/q+p61VTiF1VTUmtBIoe32lx76+TDHnL97cBfaNum2JuKuOK+I8+5fH/rW2R/xoHJfZ/wcGlu1a6HLdWo6h/2RrlOwbys09Y2jqHOe+SPnJL08ezLOq/s63JzS/yD/8GXrTv+Bv4fpU1et++V8mL6ezv/enc1zTLEd5FHLLvkf4H+41zIm1jCz/Ppkl4NknOkjg5OYnmyQ3CNw/+H69s+8l0MpuPo/n0OJ4kk4Pd249H48lsHMXjaBKHyeGu7c/jg+N5FCej09B8jtfZl1pvppkc1znztOy33NFZX/A80v8quovfN/t+cb5KV+0ZvZ8Fem5Oe46h9DXS5b5OuqpfT1f1xXY3XfVRZD7IcA02T89+Y74QS/zwSP+H/ZY5acMYGT9U7LfJ/pLfSh/uAYxVV/pE38zPd8GzLcZe9v8gzm0SPvaxb8KdKupqUVLTeTINw8MoPI3CeF1d/QEBlDjjASQAAA==", + "debug_symbols": "tZfdauMwEIXfxde50O9I6qsspaSpWwzGCW6ysJS8+874aJx2wSY47E3P59j6kEZjNflq3trXy8dLN7wfP5unX1/N69j1fffx0h8P+3N3HPjTr8bIH+ubJ7drbEBEBCESIiPKFM4gLMIhYHGwOFgcLI4tliMjyhTeICzCITwiICKCpgh8L3DwVeRIiIwoU0SDsAiH8IiAiAhYIiwRlggLwUKwECwEC8FCsBAsBAvBQrAkWBIsCZYES2JL5ogIQiRERpQpskFYhFTJcPqaoaYUmEtU+OnEYREOIQ97zlAz1qSaqWauWZDWGAXZoyjgFLyCSEhARkmPWKNgFXiUPCKNZpNAUIgKoskCSSFXkP6yRUB6yghk/aRUmHppAqsgXWkFvEJQUI/0FSApZIVSIRgFq+AUvIKMml4deUYKJr2GT6ICKSQFGRUESgXpO4B6pPcAXiEoRAVSSApZoVSQ7nOyBdJ/gKAgHtkC6UKAeKSG0omAUkG60cuSpR8BTsErBIWoQAps9rIFOSuUCtK5AKvgFGTO+XrdNXp2vZzHtpWj69thxkfcaT+2w7l5Gi59v2t+7/vL9NDnaT9Med6PfJcn0g5vnCx87/pW6Lq7jTbLQ7k0OpprYmdB/GmwywaS/Z0E5N3S+NUZlKQzyMEsGfyyIcmuT4Lk0pYZlOB0BiX4DQZnvE7BmbRYRVqZg8tR5+DtYh3TisHHeSd9DlsMIc87Ee3iKsqKIRaaDSVtMdBtL2h5L+jhOsgx/j8V99XShoeLuaq4r5qrnV20FI7/qTxqWH6/15dBcyWINlYi3yqRaaOizIriNzX3XesoDy+jPLyKleM2B+3sTIvvhosrAqtVyIG2CErSIpRctqzgrgnkByewJnDB6jtBfpMgzy/VP5v4zFf7Qzf++Fl0FdPY7V/7tl6+X4bDt7vnPye9oz+rTuPx0L5dxlZMt99W/OeX42/mzrtn+ZLMl5YPKmesXFq5ayJfpuerTOYv", "file_map": { "50": { "source": "use std::mem::zeroed;\n\npub struct BoundedVec4 {\n storage: [Field; 4],\n len: u32,\n}\n\nimpl BoundedVec4 {\n pub fn new() -> Self {\n BoundedVec4 { storage: [0; 4], len: 0 }\n }\n\n pub fn push(&mut self, elem: Field) {\n self.storage[self.len] = elem;\n self.len += 1;\n }\n}\n\npub struct PrivateKernelCircuitPublicInputs {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\npub struct FixtureBuilder {\n pub public_call_requests: BoundedVec4,\n pub counter: Field,\n}\n\nimpl FixtureBuilder {\n pub fn new() -> Self {\n FixtureBuilder { public_call_requests: zeroed(), counter: 0 }\n }\n\n pub fn append_public_call_requests(&mut self) {\n for _ in 0..4 {\n // Note that here we push directly, not through a method call\n self.public_call_requests.push(self.next_counter());\n }\n }\n\n fn next_counter(&mut self) -> Field {\n let counter = self.counter;\n self.counter += 1;\n counter\n }\n}\n\npub struct PrivateKernelCircuitPublicInputsComposer {\n pub l2_to_l1_msgs: [Field; 4],\n pub public_call_requests: [Field; 4],\n}\n\nimpl PrivateKernelCircuitPublicInputsComposer {\n pub unconstrained fn sort_ordered_values(&mut self) {\n self.l2_to_l1_msgs = sort_by(self.l2_to_l1_msgs);\n self.public_call_requests = sort_by(self.public_call_requests);\n }\n}\n\npub unconstrained fn sort_by(array: [Field; 4]) -> [Field; 4] {\n let result = array;\n get_sorting_index(array);\n result\n}\n\nunconstrained fn get_sorting_index(array: [Field; 4]) {\n let _ = [0; 4];\n let mut a = array;\n for i in 1..4 {\n for j in 0..i {\n a[i] = a[j];\n }\n }\n}\n\nunconstrained fn main() {\n let mut previous_kernel = FixtureBuilder::new();\n previous_kernel.append_public_call_requests();\n\n let mut output_composer = PrivateKernelCircuitPublicInputsComposer {\n l2_to_l1_msgs: [0; 4],\n public_call_requests: previous_kernel.public_call_requests.storage,\n };\n output_composer.sort_ordered_values();\n\n assert_eq(previous_kernel.public_call_requests.storage[1], 1, \"equality\");\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index 4e583d793d5..797d46f6901 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_0.snap index f6f19b46593..0d743ad01dd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_0.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZnNbhs7DEbfxessJPFHUl/loijS1C0MGE7gJhe4KPLulxzqm7QLDYwxugmPHc8xR6Ik2v51+Hb8+vbjy+ny/fnn4dM/vw5fr6fz+fTjy/n56fH19HyxZ38dkv/JdPhUHg6ZI0gEjVAjtAh9CSVFyBFKhLCUsJSwlLCUsJSwlLBQWCgsFBYKC4WFwkJhobBQWCgsHBYOC4eFw8Jh4bBwWDgsHBY2S344SIqQI5QIFIEjSASNUCO0CGHRsGhYNCwaFg2LhkXDomGp9hK2YE+SBXtSLLQIfQnN1GohRygRKIKpmwWJoBFqhBahL6GnCDlCiUARwtLD0sPSw9LD0sOSUxoxj2jXdI8+GsmhD8gJkAEF4OOSHRggAAVUQAO42QYpew0GZEABEIABAlBABTQAzAQzwUwwE8wEs1dorg4KqIAG6AO8VgMyoAAIwACYGWaGmWFmmAVmgVlgFpgFZoHZa7n4XHg1BzRAH+A1HZABBUAAN3sBLNW9gAIqoAH6gJoAGVAABIC5wlxhrjD70iheG74cik+KL4gAASigAhqgD/DFEZABBQBzh7nD3GHuMHeY+zCXlAAZUAAEcHN1EIACKqAB+gBfXwEZ4ObuQAAGmIeSb9h2Ffmb+toJKAACMEAACqgAy4fEoQ/wtRPgHnXw+VqOB7/KM/R1EeBXNT8yEiADCsDT8OR9OQTY5ex34aW+POOFHc8IQAEV4Fdlhz7ACzsgAwqAAAwQgI439cIOaIA+wAs7ABl6YQcQAPdVcV8V5gpzhbnC3GBuMHth83K0+n35pHjRLs940QYwQAB+FTtUQAMMD3nRBmRAARCAAQJQQB3gJcriQAAGCEABFdAAfUCBx4uW1aEACMAAN1cHBVRAA7i5e8uRABlgZkkOBGCAmWVpVBTg57XfqRd2QB/ghS3skAEFQAAGCEABbvZb9poP6AN8ww/IgAJwYXaoy7FMXvvioyLjWCZNgAwoAAIwQAAKqAO80sXfwis9oAAIwAABmEeXyyugAfqApd9ZIAMKgABm1qUhFIAC3Owz4Nt8QB/g23xABhQAARggAAXA3GHuw8wpATKgANzMDgwQgAIqoAF8tuv7+8MBTfuX1+vx6D37b1289fYvj9fj5fXw6fJ2Pj8c/n08vy0v+vnyeFni6+PV/mtjdrx8s2jC76fz0en94ePqNL9U2Hfs5Wph6atA/jTkucGaOhisrZOZYSsH4TUH6W1moLmh2HYwDIZ9Tw6a1xy0lnsNjXYZOmZSKuvMUDfGges6DlzrHoMkgkES7zJ48zYMpe0y9AaDJt0zktW32TGSOq/qsqVo63Q2oT0KO1fLUNjxOV0ZmTeGImXBUCSeTqi/aLo+dV0b1r1PRzPrhsJ2ZChsU92l4HU47RPMPIs2V3AVlIXV9nw4+8Zw1oQZsdbt40b09iRaXpNoeVdlUc4YTetr8kxRNhRcBDuFYduVRfFWYmTRphNSNorTjnnMqRXIdImUjeKUjyViG888C/27iszY9MROs6lioy6spleFfbrYpaCEjVOsud41I33de617mS5UyncPJ5W/q7htRojvnpFNxW0zkm48Rbjca5ifQ9u3wR+3sVdB62DaR6Z9CtFVoWnfCrkpi23FTWOxrbjpRrZPkfVGuPFOxVoX3Drfr2j7FNpXxfwU4U2FyKrQtkuR14aR7cuwXcf6TUlIvjeJLYO2tWvVVvMeQ0+4De1lVw6d1xy6zAybzTvltf2fdzebH+bWFOy7xemeKVtJlLXFsi8+p0nIRkWUrGixin2DvEuhff0kVLPuupHbstC7q0rvrirdV1Wf7cHj0+n6x8+X7666nh6/no/j4fe3y9Nv/3397wX/wc+fL9fnp+O3t+vRTR+/gdqff9h6Jmb57D9g+UPrizlXf5j9oZ0ILPnzuyfzPw==", + "bytecode": "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", + "debug_symbols": "tZnLbhs7DIbfxessRPEiqa9yUBRp6hYGDCdwkwMcFHn3Qw7nn7SLGRhjdBN+nkRfdKEk2v51+Hb8+vbjy+ny/fnn4dM/vw5fr6fz+fTjy/n56fH19Hzxp78OJX4QHz7VhwNJBs1gGVqGnmFMoZYMlKFmSEtNS01LTUtNS01LTQunhdPCaeG0cFo4LZwWTgunhdMiaZG0SFokLZIWSYukRdIiaRG30MNBSwbKUDNwBsmgGSxDy9AzpMXSYmmxtFhaLC2WFkuLpaX5n4gHf8ge/KF66BnGFLqrzQNlqBk4g6u7B81gGVqGnmFMYZQMlKFm4AxpGWkZaRlpGWkZaaFS5khz9DYjYsxGCRgzUAEQoAIYIAAFGKABYI4MpMjEyMEEAlQAAwSgAAM0QAfAzDAzzAwzw8wwR4aSBRigATpgzBC5mkCACmCAAGAWmAVmgVlgVpgVZoVZYVaYFeYpl2PhpmyeoAPGDFNOT0CACmBAmCMRpuyewAAN0AFjhlYABKgABsDcYG4wN5hja9TIjdgOdTqsBKAAAzRAB4wZYnMkEKACYB4wD5gHzAPmAfOYzbUUAAEqgAFhtgAFGKABOmDMEPsrgQBh7gEMEEB4RhzY3oqnk5sAFcAAASjAAA3g/WEJGDPE3kkIjwbEelFAtIoexr5IiFYtrowCIEAFRDei87EdEqJ5jCJSfXoSiZ1PFGCABvBWUgLGDJHYCQSoAAYIQAE2/9NI7IQOGDNEYiegh5HYCQzAuBrG1WBuMDeYG8wd5g5zJLbE9EYay3S51vlJJG2CABQQrTigATpg9nAkbQIBKoABAlCAAdoMkaIiAQwQgAIM0AAdMGao8ETSigZUAAMEEGYLMEADdECYe5QcBUCAMI8ABgjAzUoBBoj7eipdOmDMEImtHECACmCAABRggDDHkCPnE8YMceAnEKACQlgConnMRiR/QjSPsUfyJxCgAhggAAUYoM0Qqa4xLZHqCRXAAAEowD0WPYxUT+iAMcNU8ExAgApggJttqggVYIAwxxzGOZ8wZohzPoEAFcAAASjAADAPmMdsllIABKiAMEuAABRggAbogFiv9v7+cEDV/uX1ejxG0f5bGe/F/cvj9Xh5PXy6vJ3PD4d/H89v0x/9fHm8TPH18eq/9Tk7Xr55dOH30/kY9P7w0bqsN1WJ43hqraJjEeifBlo3eFUHg9d1umbY6oPK0gcdfc3A64bKcUdOBsexpw9GSx+s1XsNnXcZBlZSm9iaoW3Mg7RlHqS1PQYtDIMW2WUYHQYrtmceWpx38zzYek7SlqIvi9GV9yj8Wqyzwm+/1bymrbQspJiKIqvLQbKxu2zJbC++V2cz/s+qws9TKPxI3KWQZTr9Dch6LzbSQpoiLTwz16ezb0xnK1gRr7w+BmK3d6LT0olOuzKLiTCbXpbQmqJuKKQq9rlj39WLGiXK3Iu+uiB1Izn9ksaaeoKsbpG6kZz6sUX82Fjvhf5dBQmOLPW7aFWxkRee04vC3xzsUnAZUHhtvGtFBkHhtcfqRuVy93Qy/V3FbSvCfPeKbCpuW5Fy4y0i9V7D+j20PQz5GMZeBS+T6e949inUFoWVfTvkpl5sK26ai23FTQPZvkWWgUiXnYolL6QPuV/R9ylsLIr1W0Q2FaqLwvouBS0Fo/hnWbuu9Zs6oeXeTmwZrC9Vq/VGewyjYBg26q4+DFn6MHTNsFm8My3l/3p1s2lYLrGqdd+buWUQ/uHi6qmrW52oS5Hmn3yuDkO3ik0yFGnVP0LepbCxTEUj2zWQ23phdG9ebhpuysttw2pefvYXj0+n6x/fX76H6np6/Ho+zi+/v12efvvt638v+A2+/3y5Pj8dv71dj2H6+BLUf/wjXsSK6Of4Bite+jc8Qi1eUrz0O0WUPr9HZ/4H", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index b247f752ca2..965f957c6bb 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZnNbts6EIXfxWsvRHI4HPZViqJwE6cwYDiBm1zgIsi7d45GR2kXEgwZ3WQ+y9aXITn8kf2+ezz+ePv5/XR5ev61+/L1fffjejqfTz+/n58fDq+n54tffd8N+JPK7kve75JEqBE0QotgEfoY8hAhRcgRwpLDksOSw5LDksOSw1LCUsJSwlLCUsJSwlLCUsJSwlLCImGRsEhYJCwSFgmLhEXCImERt6T9rg4RUoQcoUSQCDWCRmgRLEJYNCwaFg2LhkXDomHRsGhYmn9EPPjF4sEvVg8WoY/BXK0eUoQcoURwtXmoETRCi2AR+hj6ECFFyBFKhLD0sPSw9LD0sPSwpGGYYpqi39MR0RsDoE+QBkIiZAL6JQGEUAlKaAQjwOydlFCDAYmQCYUghEpQAswNYIQ+AeoyIBEyoRCEgNpCc8YaHaERjNAnGGt1hETIhEIQAs1Cs9CM2k3o8LF6AWP9jpAImVAIQqgEJTQCzZVmpVlpRiVnjAWqN6Mz1Qh9gjYQEiETCkEIlaAEmhvNjWaj2Wg2mo1mo9loNpqNZkyMjBHE1BgBkyMgETKhEIRQCTCjWzBVAiwgY3qUAeB3lQKoBCU0ghH6BJg7AYng+ZQKKAQhwKNYjDFe46qMuxogE3CXAYRQCUpAGkge02EEFL+gFSj1uGK80idAYQckAu5KgEIQQiUooRGM0CdAYY//FIUdkAmFIARmiMIOaAS2q7JdSrPSrDQrzUqz0ozClnFHQ7swKCjauNIIRugToGhFAImQCfSgaAMqQQmNYIQ+AYo2IBHgQUmgIAOM0AMKFvCARMiEQhAC8lGAEhrBCDA3bOYDIREyAeYOEEIluLkOgEYwAva/8XwwENxcCyATCsHNVQCVoIRGMEKfAAt+AMxoMmo+oBCEUAlKgDDhzJLGbbCg9it6BbWPva6g9gMqQQmNYIRp8yx1ICQCssC/QKUHKKERjNAnQKUrbkelB2RCIQihEpTQCG7W8TjWJ8BsCIAZI4BlPqAQhFAJSmgEI/QJxvPOCDQbzUaz0Ww0G82YMYohxYwJ6BNgxgQkQiZgtNvHx37HQ/L31+vxiDPyH6dmP0u/HK7Hy+vuy+XtfN7v/juc38YP/Xo5XMb4erj6u95nx8ujRxc+nc5H0Mf+8+5h+dYqWLHHu6vUPgvq34a0bPBDFA1+jKpLhrUcqsw51G5LhrJs8L1DJ4Nj35KDpjkHbfleg5VNhs6RrE10ydBW+kHa3A/S2hZDHQoNdZBNBhzeJkO2TYZuNOigW3qyYZmdelKXqzqvKWweTqtli8L3ujwpfEtbnBlJVrpiSJVdMcjigOJDi/NT57mRVBd7M+mKwldAKnwR26SQuTv9iWE5C1tWSKssC6/t5e7sK93ZBo5IbvmzIXp7EpbmJCxtqiw/sbA3/RyRlhR5RSG5cqVwtE1ZZBwlpixscUDySnH6tsox9QJZnCJ5pTjr5xTxhWc5C/23iiRc9KrvZouKlbrwmp4VfprfpPDDLRV+vN00In1ee0tfnqgl3d2dJf9bxW0jUuTuEVlV3DYiw427iOR7Dcv70Hoz5LMZWxVl7kx/RNmmqDordNg2Q27KYl1xU1+sK25qyPouMjdETDYq5roQ63K/wrYptM+K5V1EVhW1zgq1TYo0HxjFv6DatK3flERN9yaxZlCbT61qLW0x9IHN0J435dBlzqHXJcPq4b2k+fi/fLpZfZibU8hl+VGsriWR5yOWfxm5mERdqYiclEes7N/YblJon5+EWtJNDbktC727qvTuqtJtVfXNXxweTte/fi78gOp6Ovw4H6eXT2+Xhz/eff3/he/w58aX6/PD8fHteoTp8zdH//NVBttL7t/wg5G/LF33MiS8THjX12Ip9dsHkvkN", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 4e583d793d5..797d46f6901 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_0.snap index f6f19b46593..0d743ad01dd 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_0.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZnNbhs7DEbfxessJPFHUl/loijS1C0MGE7gJhe4KPLulxzqm7QLDYwxugmPHc8xR6Ik2v51+Hb8+vbjy+ny/fnn4dM/vw5fr6fz+fTjy/n56fH19HyxZ38dkv/JdPhUHg6ZI0gEjVAjtAh9CSVFyBFKhLCUsJSwlLCUsJSwlLBQWCgsFBYKC4WFwkJhobBQWCgsHBYOC4eFw8Jh4bBwWDgsHBY2S344SIqQI5QIFIEjSASNUCO0CGHRsGhYNCwaFg2LhkXDomGp9hK2YE+SBXtSLLQIfQnN1GohRygRKIKpmwWJoBFqhBahL6GnCDlCiUARwtLD0sPSw9LD0sOSUxoxj2jXdI8+GsmhD8gJkAEF4OOSHRggAAVUQAO42QYpew0GZEABEIABAlBABTQAzAQzwUwwE8wEs1dorg4KqIAG6AO8VgMyoAAIwACYGWaGmWFmmAVmgVlgFpgFZoHZa7n4XHg1BzRAH+A1HZABBUAAN3sBLNW9gAIqoAH6gJoAGVAABIC5wlxhrjD70iheG74cik+KL4gAASigAhqgD/DFEZABBQBzh7nD3GHuMHeY+zCXlAAZUAAEcHN1EIACKqAB+gBfXwEZ4ObuQAAGmIeSb9h2Ffmb+toJKAACMEAACqgAy4fEoQ/wtRPgHnXw+VqOB7/KM/R1EeBXNT8yEiADCsDT8OR9OQTY5ex34aW+POOFHc8IQAEV4Fdlhz7ACzsgAwqAAAwQgI439cIOaIA+wAs7ABl6YQcQAPdVcV8V5gpzhbnC3GBuMHth83K0+n35pHjRLs940QYwQAB+FTtUQAMMD3nRBmRAARCAAQJQQB3gJcriQAAGCEABFdAAfUCBx4uW1aEACMAAN1cHBVRAA7i5e8uRABlgZkkOBGCAmWVpVBTg57XfqRd2QB/ghS3skAEFQAAGCEABbvZb9poP6AN8ww/IgAJwYXaoy7FMXvvioyLjWCZNgAwoAAIwQAAKqAO80sXfwis9oAAIwAABmEeXyyugAfqApd9ZIAMKgABm1qUhFIAC3Owz4Nt8QB/g23xABhQAARggAAXA3GHuw8wpATKgANzMDgwQgAIqoAF8tuv7+8MBTfuX1+vx6D37b1289fYvj9fj5fXw6fJ2Pj8c/n08vy0v+vnyeFni6+PV/mtjdrx8s2jC76fz0en94ePqNL9U2Hfs5Wph6atA/jTkucGaOhisrZOZYSsH4TUH6W1moLmh2HYwDIZ9Tw6a1xy0lnsNjXYZOmZSKuvMUDfGges6DlzrHoMkgkES7zJ48zYMpe0y9AaDJt0zktW32TGSOq/qsqVo63Q2oT0KO1fLUNjxOV0ZmTeGImXBUCSeTqi/aLo+dV0b1r1PRzPrhsJ2ZChsU92l4HU47RPMPIs2V3AVlIXV9nw4+8Zw1oQZsdbt40b09iRaXpNoeVdlUc4YTetr8kxRNhRcBDuFYduVRfFWYmTRphNSNorTjnnMqRXIdImUjeKUjyViG888C/27iszY9MROs6lioy6spleFfbrYpaCEjVOsud41I33de617mS5UyncPJ5W/q7htRojvnpFNxW0zkm48Rbjca5ifQ9u3wR+3sVdB62DaR6Z9CtFVoWnfCrkpi23FTWOxrbjpRrZPkfVGuPFOxVoX3Drfr2j7FNpXxfwU4U2FyKrQtkuR14aR7cuwXcf6TUlIvjeJLYO2tWvVVvMeQ0+4De1lVw6d1xy6zAybzTvltf2fdzebH+bWFOy7xemeKVtJlLXFsi8+p0nIRkWUrGixin2DvEuhff0kVLPuupHbstC7q0rvrirdV1Wf7cHj0+n6x8+X7666nh6/no/j4fe3y9Nv/3397wX/wc+fL9fnp+O3t+vRTR+/gdqff9h6Jmb57D9g+UPrizlXf5j9oZ0ILPnzuyfzPw==", + "bytecode": "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", + "debug_symbols": "tZnLbhs7DIbfxessRPEiqa9yUBRp6hYGDCdwkwMcFHn3Qw7nn7SLGRhjdBN+nkRfdKEk2v51+Hb8+vbjy+ny/fnn4dM/vw5fr6fz+fTjy/n56fH19Hzxp78OJX4QHz7VhwNJBs1gGVqGnmFMoZYMlKFmSEtNS01LTUtNS01LTQunhdPCaeG0cFo4LZwWTgunhdMiaZG0SFokLZIWSYukRdIiaRG30MNBSwbKUDNwBsmgGSxDy9AzpMXSYmmxtFhaLC2WFkuLpaX5n4gHf8ge/KF66BnGFLqrzQNlqBk4g6u7B81gGVqGnmFMYZQMlKFm4AxpGWkZaRlpGWkZaaFS5khz9DYjYsxGCRgzUAEQoAIYIAAFGKABYI4MpMjEyMEEAlQAAwSgAAM0QAfAzDAzzAwzw8wwR4aSBRigATpgzBC5mkCACmCAAGAWmAVmgVlgVpgVZoVZYVaYFeYpl2PhpmyeoAPGDFNOT0CACmBAmCMRpuyewAAN0AFjhlYABKgABsDcYG4wN5hja9TIjdgOdTqsBKAAAzRAB4wZYnMkEKACYB4wD5gHzAPmAfOYzbUUAAEqgAFhtgAFGKABOmDMEPsrgQBh7gEMEEB4RhzY3oqnk5sAFcAAASjAAA3g/WEJGDPE3kkIjwbEelFAtIoexr5IiFYtrowCIEAFRDei87EdEqJ5jCJSfXoSiZ1PFGCABvBWUgLGDJHYCQSoAAYIQAE2/9NI7IQOGDNEYiegh5HYCQzAuBrG1WBuMDeYG8wd5g5zJLbE9EYay3S51vlJJG2CABQQrTigATpg9nAkbQIBKoABAlCAAdoMkaIiAQwQgAIM0AAdMGao8ETSigZUAAMEEGYLMEADdECYe5QcBUCAMI8ABgjAzUoBBoj7eipdOmDMEImtHECACmCAABRggDDHkCPnE8YMceAnEKACQlgConnMRiR/QjSPsUfyJxCgAhggAAUYoM0Qqa4xLZHqCRXAAAEowD0WPYxUT+iAMcNU8ExAgApggJttqggVYIAwxxzGOZ8wZohzPoEAFcAAASjAADAPmMdsllIABKiAMEuAABRggAbogFiv9v7+cEDV/uX1ejxG0f5bGe/F/cvj9Xh5PXy6vJ3PD4d/H89v0x/9fHm8TPH18eq/9Tk7Xr55dOH30/kY9P7w0bqsN1WJ43hqraJjEeifBlo3eFUHg9d1umbY6oPK0gcdfc3A64bKcUdOBsexpw9GSx+s1XsNnXcZBlZSm9iaoW3Mg7RlHqS1PQYtDIMW2WUYHQYrtmceWpx38zzYek7SlqIvi9GV9yj8Wqyzwm+/1bymrbQspJiKIqvLQbKxu2zJbC++V2cz/s+qws9TKPxI3KWQZTr9Dch6LzbSQpoiLTwz16ezb0xnK1gRr7w+BmK3d6LT0olOuzKLiTCbXpbQmqJuKKQq9rlj39WLGiXK3Iu+uiB1Izn9ksaaeoKsbpG6kZz6sUX82Fjvhf5dBQmOLPW7aFWxkRee04vC3xzsUnAZUHhtvGtFBkHhtcfqRuVy93Qy/V3FbSvCfPeKbCpuW5Fy4y0i9V7D+j20PQz5GMZeBS+T6e949inUFoWVfTvkpl5sK26ai23FTQPZvkWWgUiXnYolL6QPuV/R9ylsLIr1W0Q2FaqLwvouBS0Fo/hnWbuu9Zs6oeXeTmwZrC9Vq/VGewyjYBg26q4+DFn6MHTNsFm8My3l/3p1s2lYLrGqdd+buWUQ/uHi6qmrW52oS5Hmn3yuDkO3ik0yFGnVP0LepbCxTEUj2zWQ23phdG9ebhpuysttw2pefvYXj0+n6x/fX76H6np6/Ho+zi+/v12efvvt638v+A2+/3y5Pj8dv71dj2H6+BLUf/wjXsSK6Of4Bite+jc8Qi1eUrz0O0WUPr9HZ/4H", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index b247f752ca2..965f957c6bb 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_6674_3/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "tZnNbts6EIXfxWsvRHI4HPZViqJwE6cwYDiBm1zgIsi7d45GR2kXEgwZ3WQ+y9aXITn8kf2+ezz+ePv5/XR5ev61+/L1fffjejqfTz+/n58fDq+n54tffd8N+JPK7kve75JEqBE0QotgEfoY8hAhRcgRwpLDksOSw5LDksOSw1LCUsJSwlLCUsJSwlLCUsJSwlLCImGRsEhYJCwSFgmLhEXCImERt6T9rg4RUoQcoUSQCDWCRmgRLEJYNCwaFg2LhkXDomHRsGhYmn9EPPjF4sEvVg8WoY/BXK0eUoQcoURwtXmoETRCi2AR+hj6ECFFyBFKhLD0sPSw9LD0sPSwpGGYYpqi39MR0RsDoE+QBkIiZAL6JQGEUAlKaAQjwOydlFCDAYmQCYUghEpQAswNYIQ+AeoyIBEyoRCEgNpCc8YaHaERjNAnGGt1hETIhEIQAs1Cs9CM2k3o8LF6AWP9jpAImVAIQqgEJTQCzZVmpVlpRiVnjAWqN6Mz1Qh9gjYQEiETCkEIlaAEmhvNjWaj2Wg2mo1mo9loNpqNZkyMjBHE1BgBkyMgETKhEIRQCTCjWzBVAiwgY3qUAeB3lQKoBCU0ghH6BJg7AYng+ZQKKAQhwKNYjDFe46qMuxogE3CXAYRQCUpAGkge02EEFL+gFSj1uGK80idAYQckAu5KgEIQQiUooRGM0CdAYY//FIUdkAmFIARmiMIOaAS2q7JdSrPSrDQrzUqz0ozClnFHQ7swKCjauNIIRugToGhFAImQCfSgaAMqQQmNYIQ+AYo2IBHgQUmgIAOM0AMKFvCARMiEQhAC8lGAEhrBCDA3bOYDIREyAeYOEEIluLkOgEYwAva/8XwwENxcCyATCsHNVQCVoIRGMEKfAAt+AMxoMmo+oBCEUAlKgDDhzJLGbbCg9it6BbWPva6g9gMqQQmNYIRp8yx1ICQCssC/QKUHKKERjNAnQKUrbkelB2RCIQihEpTQCG7W8TjWJ8BsCIAZI4BlPqAQhFAJSmgEI/QJxvPOCDQbzUaz0Ww0G82YMYohxYwJ6BNgxgQkQiZgtNvHx37HQ/L31+vxiDPyH6dmP0u/HK7Hy+vuy+XtfN7v/juc38YP/Xo5XMb4erj6u95nx8ujRxc+nc5H0Mf+8+5h+dYqWLHHu6vUPgvq34a0bPBDFA1+jKpLhrUcqsw51G5LhrJs8L1DJ4Nj35KDpjkHbfleg5VNhs6RrE10ydBW+kHa3A/S2hZDHQoNdZBNBhzeJkO2TYZuNOigW3qyYZmdelKXqzqvKWweTqtli8L3ujwpfEtbnBlJVrpiSJVdMcjigOJDi/NT57mRVBd7M+mKwldAKnwR26SQuTv9iWE5C1tWSKssC6/t5e7sK93ZBo5IbvmzIXp7EpbmJCxtqiw/sbA3/RyRlhR5RSG5cqVwtE1ZZBwlpixscUDySnH6tsox9QJZnCJ5pTjr5xTxhWc5C/23iiRc9KrvZouKlbrwmp4VfprfpPDDLRV+vN00In1ee0tfnqgl3d2dJf9bxW0jUuTuEVlV3DYiw427iOR7Dcv70Hoz5LMZWxVl7kx/RNmmqDordNg2Q27KYl1xU1+sK25qyPouMjdETDYq5roQ63K/wrYptM+K5V1EVhW1zgq1TYo0HxjFv6DatK3flERN9yaxZlCbT61qLW0x9IHN0J435dBlzqHXJcPq4b2k+fi/fLpZfZibU8hl+VGsriWR5yOWfxm5mERdqYiclEes7N/YblJon5+EWtJNDbktC727qvTuqtJtVfXNXxweTte/fi78gOp6Ovw4H6eXT2+Xhz/eff3/he/w58aX6/PD8fHteoTp8zdH//NVBttL7t/wg5G/LF33MiS8THjX12Ip9dsHkvkN", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "6": { "source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec` is a growable storage similar to a `Vec` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec` should generally be preferred over `Vec` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl BoundedVec {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three(v: BoundedVec) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo(v: BoundedVec) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec = BoundedVec::new();\n /// let mut v2: BoundedVec = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec(&mut self, vec: BoundedVec) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> BoundedVec {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl Eq for BoundedVec\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl From<[T; Len]> for BoundedVec {\n fn from(array: [T; Len]) -> BoundedVec {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map(\n input: BoundedVec,\n f: fn[Env](T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi(\n input: BoundedVec,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec {\n let mut output = BoundedVec::::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec = BoundedVec::new();\n let mut bounded_vec2: BoundedVec = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 0d493e7f4c4..837fb0a8d4f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -32,8 +32,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/7VYTY/TMBB12qRpUmAL/ABOHJGc7ceWCyoSIP4BFzhE263EAYkD4sIlQoLfzbp4lNeXSbq7tUeqnHjGzzPPY0/cxPyXxP+cpNDHIn1b39rzpAqIZRPFz8EgtAF/fVv4dgT6ccDAC8WXUPgbu1wXphtzQP8XhceMyY9gRsC3ucd517T4HIuTx+Z4c+CYqdfL8xMY4+Q9YMv4mLzdrvsqMm/Vc9PP1czz8IliTeP4spK1yUxXRDcx3TXQzoQxvaPfLqYvgMt2PCdyPxngIgnHhdW44JxDLsKtw2Wl8TqmPpy/JF9D52hC84k/zM+I+Mnj8GMTwkd/coUfWcupohMsOd8zwEL7HGJEe3yW8dj30rdzBZNzd2q68WCf8Ot8f0GxpWCX9LSCy30j8hH9kvUtTNQcs5H3lI2bk7aSdRgp3LmYXkE/6jDfcOwE9Gj/ETCtf+a5BUNrjRnOAa53JhxHdm76a13k/Fpz/UIRXa74pZ0d9617EpPD+Aq4bMf+4D4U3zLSvfGti+utf+ba6GTrW3ueVNoapooPF0oMnJ+IoZ2HRnnPTH8OZWT7wbeO92/+mb8/+XtL/M6U+LhWGNPuXVx3jqtU7LF+iL3MjblWgt+H8U2rw7PZSdocx7T1/fYsuaycP9/Bj07Na+4er8bPTLEvFX7mZK/ty0zBwvlywsK1LSjGU2d5TN6vNu0FXNZcagVLCnq0/+zfkUsDcW8f6Of+qq72i3pfr+rdbnldPyN8A9z13WGi3HOr9juC/3QJgm/bewGuQ0Kxxalhd78XyPwl+Rq4plZDe047D2N/4z017b5GPrR9zH5IvpyqD5jLrJ8MzH0KN/QerTfXy/1qUd8sd5ub1+v1qT16ITE0rR5rjZPcv6cYc9PFy8j+h9je/n6alo+DbdOdz9n9GbBLetoDhtKXNsd9RdO1Hzdde5m7bLo+im4GOqyDTh75d+QLscSPjOx/+3dZkymMkfFzZf4pzX/kt9KH+4Kxxkof3j9/CZ5vMfbQZ8xhTsLHPvZNcsfl9T8HrCcEkRcAAA==", - "debug_symbols": "ndXdrqowEAXgd+k1F51O/8ZX2TEGFXdICBq2nOTE8O5nyrSiJ8HscONXxLWoTYGHOjfH8fvQ9pfrj9p9PdRxaLuu/T5011N9b689f/tQOn2AUzuoFHghCFGgGaMFEIzaGQYFKzjBC0GIAs2gFkCQFpQWlBaUFpQWlBaUFpQWyz9Bhr+0DM04LYDA1Y5BwQpO8EIQokAznnOeQcEJHAgMByITBZoJZp5L4AAxVnBCWk/NhmzMkhh1FrImi1krUpL/N7msz4ZszJIIWpcBlIEpg5T101Spsg0O96Fp0i542Re8W2710PR3tevHrqvUn7ob5x/93Op+9l4PfJZn1/Rnlgsvbdek0VQtab0eNdbnsPHwjLtf51FDzqM2W/KGSh63XN9CzHkLtCXvn/mwZf7OlPVzJmzJ23J957bM3wVb8hG3rL8r18ewKf/cP+jchryn5wbyBMsKQnxrAFiviMaWNYjGm7WKD5MgjKWBrF6fBH5YB4zLRqaXivBeYT/cihSXe+nlZvq/wq1XAOjgcgePKb79lT0f1ad2eHv3TKltaOtj1+TDy9ifXs7e/97KmfLuug3XU3MehyY1LS8w/vgCfr4B4j495PgwhopMOoB0TlMFAPspTeUf", + "bytecode": "H4sIAAAAAAAA/7VYTY/TMBB1mqRJWmAX+AGcOCI5248tF1QkQPwDLnCItluJAxIHxIVLhAS/m3XxKK8vkxS29kiVE8/4eeZ57ImbmL+S+J+TDPpYpG/rW3ue1AGxbKL4ORqENuC3byvfTkCfBgy8UnwJhb+xy3Vl+jEH9H9RecyY/AhmBHxbeJw3bYfPsTh5aI43B44pvV6eH8EYJ28BW8bH5O1u3VeReaufmmGu5p6HDxRrFseXlaxNbvoiuqnpr4F2JqT0jn67mD4BLtvxnMj9dISLJBwXVuOCcw65CLcOV7XGa0p9OP+MfA2downNJ/4wPxPip4jDj00IH/0pFH5kLUtFJ1hyvueAhfYFxIj2+Czjse+5by8VTM7d0vTjwT7h1/n+jGLLwC4ZaAWX+ybkI/ol61uZqDlmI+8pGzcnbS3rMFG4czG9gH7UYb7h2Cno0f49YFr/zHMLhtYaM54DXO9MOI7spRmudZHza831C0V0heKXdnb8b92TmBzGZ8BlO/YH96H4lpPulW9dXK/9M9dGJ1vf2vOk1tYwU3y4UGLg/EQM7Tw0yntuhnMoJ9t3vnW8f/HP/P3J31tjZzGuLfteKfalEqvwgnlekU6rEZIvadvpxE7GZ+1xTFvfb8+Sq9rN8xX86NW89piLmcIF2jN3c8V+BjZcn+agywkrV7BwvoKwMOcqivHUWR6T9+tNdwGXNZdawZKBHu0/+nfk0kDc23v6ub9u6v2i2TerZrdb3jRPCN8Ad0N3mCj33Lr7juA/XYLg2+5egOuQUGxxati/3wtk/hn5Grim1mN7TjsrY3/jPTbdvkY+tH3MfuA5O1YfMJdZPx2Z+xRu6D3abG6W+9WiuV3uNrcv1+tTe/RCYmg7PdYaJ4V/zzDmto+Xk/03sb37fTcdHwfbtj+fs/s1YpcMtAcMpS9rj/uqtm+ftn17mXvW9n0U3Rx0WAedPPDvyBdiiR852f/077ImJYyR8ZfK/CXNf+S30of7grFSpQ/vnz8Ez7cYe+gz5jAn4WMf+ya54/L6D06fXi2RFwAA", + "debug_symbols": "ndXdrqowEAXgd+k1F51O/8ZX2TEGFXdICBq2nOTE8O5nyrSiJ8HscONXxLWoTYGHOjfH8fvQ9pfrj9p9PdRxaLuu/T5011N9b689f/tQOn2AUzuoFHghCFGgGaMFEIzaGQYFKzjBC0GIAs2gFkCQFpQWlBaUFpQWlBaUFpQWyz9Bhr+0DM04LYDA1Y5BwQpO8EIQokAznnOeQcEJHAgMByITBZoJHCAGBSs4Ia2nZkM2ZkmMOgtZk8WsFSnJ/5tc1mdDNmZJBK3LAMrAlEHK+mmqVNkGh/vQNGkXvOwL3i23emj6u9r1Y9dV6k/djfOPfm51P3uvBz7Ls2v6M8uFl7Zr0miqlrRejxrrc9h4eMbdr/OoIedRmy15QyWPW65vIea8BdqS98982DJ/Z8r6ORO25G25vnNb5u+CLfmIW9bfletj2JR/7h90bkPe03MDeYJlBSG+NQCsV0RjyxpE481axYdJEMbSQFavTwI/rAPGZSPTS0V4r7AfbkWKy730cjP9X+HWKwB0cLmDxxTf/sqej+pTO7y9e6bUNrT1sWvy4WXsTy9n739v5Ux5d92G66k5j0OTmpYXGH98AT/fAHGfHnJ8GENFJh1AOqepAoD9lKbyDw==", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_0.snap index 0451274d201..4631d3195f5 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_0.snap @@ -32,8 +32,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/81Y247TMBCdNHHTpMAG+AKeeMTpbbsSD4uAH+AFJB5QtN28IcEf5NOplxn1ZDLNghojLFW+jc+cOR473k3od0n4F0oGY7rI2C3X/rJST4jlE4PnaBDWgp9cF1zPYD6dMPDC4DIV/t5vdgUNY56Q/7pgzJj6CGYEfJ8zzofuhK9jCeUp9Q8HrlnwvLSfwZpQPgK2rI+p23Hft5F1q1/Sea2WrMMnFWsULrX3gu8An6aL1cvey4VIxj7OY8TmV7V1R6VqDP2XiuvU+54of8JH6zNT+uRx9PHPjxgV9c+WzjXcG+ThFEdck9D0+eNAn/89f1wUPuP5g/r8q/xJFD7yyQ19ZC8XxpxgyTfXARba5xAj2mNb1uPYa64rA1Pn7oKG8eCY6Bu4v1KxpWCXnKmJhnmEuJXBS5+3SDnmI58pHzcnfS37MDO0CzG9gXGcw3zDtXOYR/v3gLnitvYtGFZNNJ4D+l6l6TTyFZ1/f0g/g/isM4KaiO0NrHmr4simj6O24sgMDlc0/K7rPZqp+DLVp5H4LR2dsn3HdbhHvnBbv4v1O1B4O2Ne35dE428JsS8Ne7xDxV584z1ZAu+H9d1pDu+nULKuz/mWx/1FZVUHPl+Bx+De7/48XkufpWFfGvpUyl5rhZogFvrLFRbubaFifOw+i6n79f70jwHZc0f9O4OUf6fsP3MftZQ6u4Bne93U7bppm21zOGzumhcKn0C7ZQT/zf5u027Xzf3msL+/2e0e83/F7Xl3msdzFErO/cArNewFzyn7b2J7/DXclrPqDH/B7seI3d9+u7KuP1Z0Q/u0G9qL77IbcpS5JczhGQ/lCfdRL8QSHk7Zf+e+7MkC1sj6yvC/UP57vI0xPLsaKzXG8H3ZCh7XGPvUf1s8+FT4OKa5Se6EvP4FDihehwUVAAA=", - "debug_symbols": "nZXdirMwEIbvJcceZDL57a0spdg2XQSxxdUPPor3vpNOYuuCHnjiY9T3yc9E8hTXeB6/T013u/+Iw9dTnPumbZvvU3u/1ENz7+jpU8h0ASMOWAmwDMfwjPCCkgxgKAYytDhogmFYhmN4RngBJQMYioEMtiBbkC3IFmQLskWzRbNF0yemEoYeWgIwFAMZpAYg0qegiJ5pZSaFgCZiKQWktJipM7kLm2KJgelkZopTN05lYqbONJk202X6zOSz01SJUprT0MeYKvNRK6rgo+5jN4hDN7ZtJf7V7fj66OdRdy8OdU9vZSVidyWS8Na0Md1N1Tst16NK2xxWFua4WeZhPW+DhCywAdxsAL8wqHWDV1png1dWrRk25oDzEFCqtTls5VUoeYQdeQ0+5zWEPXk7593q+N16PqAvKxi0XK2B31gB9O8lCB8GtzCEjX0U/LsIH1X4Y4CNZQCQzmQH3Qe/YysYVbazUW5HKYwupTBmTymNK5UwHvdsRVP6R7crP//OaMwif6RWfWn6xWEwJVPf1Oc25uZt7C4fb4f/j/KmHCaP/n6J17GPyfQ+UejyFaACUEc6QlLLq8q71IDU8FWQxymN4xc=", + "bytecode": "H4sIAAAAAAAA/81YzY7TQAx2mkyTtMAGeAJOHJn0b7sSh0XAC3ABiQOKtpsbErxBHp0O2OoXx80KNbPakar5sz/b33ic2U3oX0v4F1oGa7rJ2i33/rJWT4jlE8PP0SAshd/cl9zPYD+dMPDS8GUq/L3f7Eoaxjyh/+uSMWPyI5gR8H3OOJ+6E76OJbTn1L8cqFPwvoxfgE5onwFb9GPydjz3bWTe6td0nqsl8/BFxRrFl9p7wXeAT9PF6uXspSCScY7zGLH5VW3VqFStof2F8nXqc0+UPfFH8zNT/ORx+PEvjxgV9e+WzjU8G/TDKR9RJ6Hp88cBP089f1wUf8bzB/l5rPxJFD76kxv8yFkWxp5gyTfXARbK5xAjyuNY9HHtLfeVgalzt6BhPLgm/Abf36jYUpBLzvREwzxC3MrwS9+3SDnmI98pHzcnfS3nMDO4CzG9g3Xcw3xD3Tnso/xHwFzxWNsWDKsnGs8BXVdpOo58ReffHzLPID7rjiAnInsDOu9VHNn0cdRWHJnhwxUNv+v6jGYqvkzNaSR+i0enZD9wH+rINx7rd7F+B47VI+u9oGsoyhdGrMIL1pJS7Vl1Ut7maXfaEznRz7q+3i2v+4vaqg52voMfg7rf9blYGFygvOZuacgvQEbX6CXsOYXlDCy0lyssvGOlivGhehaT9+v96R8DcuaO+jWDlH2n5L/yHLmUPrvAz/a6qdt10zbb5nDY3DWvFD4Bd8sI9pv93abdrpv7zWF/f7PbPWT/isfz7rSP9yi0nOfBr9SQFzyn5H+I7PHX8FjuqjPsBblfI3L/++3Kuv5a2Q3l024oL7YX3dBH2VvCHt7x0J7xHPlCLPHDKfmfPJczKUBH9CvDfqHs9/w21vDuaqzUWMP3ZSt43GPsU/9t8demwsc17ZvkTsjrP5HcSAQFFQAA", + "debug_symbols": "nZXdirMwEIbvJcceZDL57a0spdg2XQSxxdUPPor3vpNOYuuCHnjiY9T3yc9E8hTXeB6/T013u/+Iw9dTnPumbZvvU3u/1ENz7+jpU8h0ASMOWAmwDMfwjPCCkgxgKAYytDhogmFYhmN4RngBJQMYioEMtiBbkC3IFmQLskWzRbNF0yemEoYeWgIwFAMZpAYg0qegiJ5pZSaFgCZiKQWktJipM1OO+rA+MzCdzEx56sepTMzUmSbTZrpMn5l8dpoqUWpzGvoYU2k+ikUlfNR97AZx6Ma2rcS/uh1fH/086u7Foe7praxE7K5EEt6aNqa7qXqn5XpUaZvDysIcN8s8rOdtkJAFNoCbDeAXBrVu8ErrbPDKqjXDxhxwHgJKtTaHrbwKJY+wI6/B57yGsCdv57xbHb9bzwf0ZQWDlqs18BsrgP69BOHD4BaGsLGPgn8X4aMKfwywsQwA0pnsoPvgd2wFo8p2NsrtKIXRpRTG7CmlcaUSxuOerWhK/+h25effGY1Z5I/Uqi9NvzgNpmTqm/rcxty8jd3l4+3w/1HelNPk0d8v8Tr2MZneRwpdvgJUAOpIZ0hqeVV5lxqQGr4K8jilcfwC", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 0451274d201..4631d3195f5 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_7128/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -32,8 +32,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/81Y247TMBCdNHHTpMAG+AKeeMTpbbsSD4uAH+AFJB5QtN28IcEf5NOplxn1ZDLNghojLFW+jc+cOR473k3od0n4F0oGY7rI2C3X/rJST4jlE4PnaBDWgp9cF1zPYD6dMPDC4DIV/t5vdgUNY56Q/7pgzJj6CGYEfJ8zzofuhK9jCeUp9Q8HrlnwvLSfwZpQPgK2rI+p23Hft5F1q1/Sea2WrMMnFWsULrX3gu8An6aL1cvey4VIxj7OY8TmV7V1R6VqDP2XiuvU+54of8JH6zNT+uRx9PHPjxgV9c+WzjXcG+ThFEdck9D0+eNAn/89f1wUPuP5g/r8q/xJFD7yyQ19ZC8XxpxgyTfXARba5xAj2mNb1uPYa64rA1Pn7oKG8eCY6Bu4v1KxpWCXnKmJhnmEuJXBS5+3SDnmI58pHzcnfS37MDO0CzG9gXGcw3zDtXOYR/v3gLnitvYtGFZNNJ4D+l6l6TTyFZ1/f0g/g/isM4KaiO0NrHmr4simj6O24sgMDlc0/K7rPZqp+DLVp5H4LR2dsn3HdbhHvnBbv4v1O1B4O2Ne35dE428JsS8Ne7xDxV584z1ZAu+H9d1pDu+nULKuz/mWx/1FZVUHPl+Bx+De7/48XkufpWFfGvpUyl5rhZogFvrLFRbubaFifOw+i6n79f70jwHZc0f9O4OUf6fsP3MftZQ6u4Bne93U7bppm21zOGzumhcKn0C7ZQT/zf5u027Xzf3msL+/2e0e83/F7Xl3msdzFErO/cArNewFzyn7b2J7/DXclrPqDH/B7seI3d9+u7KuP1Z0Q/u0G9qL77IbcpS5JczhGQ/lCfdRL8QSHk7Zf+e+7MkC1sj6yvC/UP57vI0xPLsaKzXG8H3ZCh7XGPvUf1s8+FT4OKa5Se6EvP4FDihehwUVAAA=", - "debug_symbols": "nZXdirMwEIbvJcceZDL57a0spdg2XQSxxdUPPor3vpNOYuuCHnjiY9T3yc9E8hTXeB6/T013u/+Iw9dTnPumbZvvU3u/1ENz7+jpU8h0ASMOWAmwDMfwjPCCkgxgKAYytDhogmFYhmN4RngBJQMYioEMtiBbkC3IFmQLskWzRbNF0yemEoYeWgIwFAMZpAYg0qegiJ5pZSaFgCZiKQWktJipM7kLm2KJgelkZopTN05lYqbONJk202X6zOSz01SJUprT0MeYKvNRK6rgo+5jN4hDN7ZtJf7V7fj66OdRdy8OdU9vZSVidyWS8Na0Md1N1Tst16NK2xxWFua4WeZhPW+DhCywAdxsAL8wqHWDV1png1dWrRk25oDzEFCqtTls5VUoeYQdeQ0+5zWEPXk7593q+N16PqAvKxi0XK2B31gB9O8lCB8GtzCEjX0U/LsIH1X4Y4CNZQCQzmQH3Qe/YysYVbazUW5HKYwupTBmTymNK5UwHvdsRVP6R7crP//OaMwif6RWfWn6xWEwJVPf1Oc25uZt7C4fb4f/j/KmHCaP/n6J17GPyfQ+UejyFaACUEc6QlLLq8q71IDU8FWQxymN4xc=", + "bytecode": "H4sIAAAAAAAA/81YzY7TQAx2mkyTtMAGeAJOHJn0b7sSh0XAC3ABiQOKtpsbErxBHp0O2OoXx80KNbPakar5sz/b33ic2U3oX0v4F1oGa7rJ2i33/rJWT4jlE8PP0SAshd/cl9zPYD+dMPDS8GUq/L3f7Eoaxjyh/+uSMWPyI5gR8H3OOJ+6E76OJbTn1L8cqFPwvoxfgE5onwFb9GPydjz3bWTe6td0nqsl8/BFxRrFl9p7wXeAT9PF6uXspSCScY7zGLH5VW3VqFStof2F8nXqc0+UPfFH8zNT/ORx+PEvjxgV9e+WzjU8G/TDKR9RJ6Hp88cBP089f1wUf8bzB/l5rPxJFD76kxv8yFkWxp5gyTfXARbK5xAjyuNY9HHtLfeVgalzt6BhPLgm/Abf36jYUpBLzvREwzxC3MrwS9+3SDnmI98pHzcnfS3nMDO4CzG9g3Xcw3xD3Tnso/xHwFzxWNsWDKsnGs8BXVdpOo58ReffHzLPID7rjiAnInsDOu9VHNn0cdRWHJnhwxUNv+v6jGYqvkzNaSR+i0enZD9wH+rINx7rd7F+B47VI+u9oGsoyhdGrMIL1pJS7Vl1Ut7maXfaEznRz7q+3i2v+4vaqg52voMfg7rf9blYGFygvOZuacgvQEbX6CXsOYXlDCy0lyssvGOlivGhehaT9+v96R8DcuaO+jWDlH2n5L/yHLmUPrvAz/a6qdt10zbb5nDY3DWvFD4Bd8sI9pv93abdrpv7zWF/f7PbPWT/isfz7rSP9yi0nOfBr9SQFzyn5H+I7PHX8FjuqjPsBblfI3L/++3Kuv5a2Q3l024oL7YX3dBH2VvCHt7x0J7xHPlCLPHDKfmfPJczKUBH9CvDfqHs9/w21vDuaqzUWMP3ZSt43GPsU/9t8demwsc17ZvkTsjrP5HcSAQFFQAA", + "debug_symbols": "nZXdirMwEIbvJcceZDL57a0spdg2XQSxxdUPPor3vpNOYuuCHnjiY9T3yc9E8hTXeB6/T013u/+Iw9dTnPumbZvvU3u/1ENz7+jpU8h0ASMOWAmwDMfwjPCCkgxgKAYytDhogmFYhmN4RngBJQMYioEMtiBbkC3IFmQLskWzRbNF0yemEoYeWgIwFAMZpAYg0qegiJ5pZSaFgCZiKQWktJipM1OO+rA+MzCdzEx56sepTMzUmSbTZrpMn5l8dpoqUWpzGvoYU2k+ikUlfNR97AZx6Ma2rcS/uh1fH/086u7Foe7praxE7K5EEt6aNqa7qXqn5XpUaZvDysIcN8s8rOdtkJAFNoCbDeAXBrVu8ErrbPDKqjXDxhxwHgJKtTaHrbwKJY+wI6/B57yGsCdv57xbHb9bzwf0ZQWDlqs18BsrgP69BOHD4BaGsLGPgn8X4aMKfwywsQwA0pnsoPvgd2wFo8p2NsrtKIXRpRTG7CmlcaUSxuOerWhK/+h25effGY1Z5I/Uqi9NvzgNpmTqm/rcxty8jd3l4+3w/1HelNPk0d8v8Tr2MZneRwpdvgJUAOpIZ0hqeVV5lxqQGr4K8jilcfwC", "file_map": { "17": { "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 128 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low = (x as u128) as Field;\n let high = (x - low) / TWO_POW_128;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n // Safety: borrow is enforced to be boolean due to its type.\n // if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n // if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n // Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n // Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n // Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index a3f7b286887..be6e69d2540 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -11,7 +11,7 @@ expression: artifact "error_types": {} }, "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", - "debug_symbols": "pZXbasMwDED/xc95sFxf+ytjFDd1i8E4wU0Ko/Tf54bI6QaDoT45tnKOBFHkOzuF43w5xHwermz/cWfHElOKl0Maej/FIdfT+6NjuD1MJYR6xF7ilRp9CXli+zyn1LGbT/Py0nX0eVknX2qUdyzkU12r8BxTeD49uo3mf6NSICylaLj6P28b7xyB1yBWXsOOwiuFvNIU3jjkLafwDlbecEngDTfIg6LwYJHfwXv5SbwVyFthKbzUyEtD4Q32n7Wk+nXLbyn9bx3yjlPyO4H96ySl/4FrbADghvIFADj+ggAgaAbYDI5kkLIZpCIZ7GZwtBraKKkyyiwA0YYpCAkkg9o1A6kfQeitBkurwarN8HOmftad72P5fYvdfIn+mMK6Pc+5f4lOXyNG8BYcy9CH01zC07TEqvsb", + "debug_symbols": "pZXbisMgEED/xec8ONZrf2VZik1tEcQEmxSW0n9fGzKmFBaW6ZPRyTljyDje2Skc58sh5vNwZfuvOzuWmFK8HNLQ+ykOua7eHx3D6WEqIdQl9hKv1OhLyBPb5zmljt18mpeXrqPPyzj5UqO8YyGf6liF55jC8+nRbTT/G5UCYSlFw9X/edt45wi8BrHyGnYUXinklabwxiFvOYV3sPKGSwJvuEEeFIUHi/wOPstP4q1A3gpL4aVGXhoKb7D+rCXtX7f8llL/1iHvOCW/E1i/TlLqH7jGAgBuKH8AgOMRBABBM8BmcCSDlM0gFclgN4Oj7aG1kiqj9AIQrZmCkEAyqF0zkOqxYmozaJJBb1/xdqa+68z3sbzfYjdfoj+msE7Pc+5fotPPiBG8Bccy9OE0l/A0LbHq/gU=", "file_map": {}, "names": [ "main" diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_0.snap index 14ef460e5fc..60ecc2194aa 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_0.snap @@ -11,7 +11,7 @@ expression: artifact "error_types": {} }, "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", - "debug_symbols": "pZXNjsIgEIDfhXMPDPLrq2w2BisaEkIbbE02xndfNA51Teph9kRh+n2UDgNXdgj7+bSL+Tic2fbryvYlphRPuzT0fopDrqPXW8ewu5tKCHWIvcQrNfoS8sS2eU6pYxef5sdL59HnRzv5UqO8YyEfaluFx5jC/enWLTRfR6VAWErRcPWXh3XeCvPkrbAUXmrkpaHwBr/fWqDwus1vSet3yDtOmd8JhbzcrPGf8mdb/pxb4+06D1zbpwC4sRQDcIEGAEEzwGIgrQKkbAapSAa7GGh/EpRqBsspBtGKEYQEkkEvBkszWLUYNMmgNotBEPa0BtxQGig1oVsitNIU3jjk1/P4iXe4nQ2XBN5wPFMNKAoPWNJmA/+b/43/rj3fx/J+i118iX6fwrN7nHP/Ep1+RozgLTiWoQ+HuYS76RGr7l8=", + "debug_symbols": "pZXNjsIgEIDfhXMPDPIz+CqbjcGKhoTQBluTjfHdF41Q16QeZk8Upt/H0IFyZQe/n0+7kI7DmW2/rmyfQ4zhtItD76YwpDJ6vXWsdndT9r4MsZd4oUaXfZrYNs0xduzi4vx46Ty69Ggnl0uUd8ynQ2mL8Biivz/duoXm66gUFZZSNFz95WGdR2GePAqk8FJXXhoKb2r+iEDhdZsfSeu3lbecMr8VqvJys8Z/qh+2+lm7xuM6D1zjUwDcIMUAXFQDgKAZYDGQVgFSNoNUJAMuBtqXBKWaATnFINphBCGBZMCWg0BNMuglB6TloDaLQRD2tIa6oTRQzoRuhdBKU3hjK79ex0+8rdvZcEngDa//VAOKwkM90mYD/5v/jf8uPdeH/H6LXVwObh/9s3ucU/8SnX7GGqm34JiH3h/m7O+mR6y4fwE=", "file_map": {}, "names": [ "main" diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 14ef460e5fc..60ecc2194aa 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -11,7 +11,7 @@ expression: artifact "error_types": {} }, "bytecode": "H4sIAAAAAAAA/5XDsQkAAADCMAv+f7PuTgaCFm19Arunwj5IAAAA", - "debug_symbols": "pZXNjsIgEIDfhXMPDPLrq2w2BisaEkIbbE02xndfNA51Teph9kRh+n2UDgNXdgj7+bSL+Tic2fbryvYlphRPuzT0fopDrqPXW8ewu5tKCHWIvcQrNfoS8sS2eU6pYxef5sdL59HnRzv5UqO8YyEfaluFx5jC/enWLTRfR6VAWErRcPWXh3XeCvPkrbAUXmrkpaHwBr/fWqDwus1vSet3yDtOmd8JhbzcrPGf8mdb/pxb4+06D1zbpwC4sRQDcIEGAEEzwGIgrQKkbAapSAa7GGh/EpRqBsspBtGKEYQEkkEvBkszWLUYNMmgNotBEPa0BtxQGig1oVsitNIU3jjk1/P4iXe4nQ2XBN5wPFMNKAoPWNJmA/+b/43/rj3fx/J+i118iX6fwrN7nHP/Ep1+RozgLTiWoQ+HuYS76RGr7l8=", + "debug_symbols": "pZXNjsIgEIDfhXMPDPIz+CqbjcGKhoTQBluTjfHdF41Q16QeZk8Upt/H0IFyZQe/n0+7kI7DmW2/rmyfQ4zhtItD76YwpDJ6vXWsdndT9r4MsZd4oUaXfZrYNs0xduzi4vx46Ty69Ggnl0uUd8ynQ2mL8Biivz/duoXm66gUFZZSNFz95WGdR2GePAqk8FJXXhoKb2r+iEDhdZsfSeu3lbecMr8VqvJys8Z/qh+2+lm7xuM6D1zjUwDcIMUAXFQDgKAZYDGQVgFSNoNUJAMuBtqXBKWaATnFINphBCGBZMCWg0BNMuglB6TloDaLQRD2tIa6oTRQzoRuhdBKU3hjK79ex0+8rdvZcEngDa//VAOKwkM90mYD/5v/jf8uPdeH/H6LXVwObh/9s3ucU/8SnX7GGqm34JiH3h/m7O+mR6y4fwE=", "file_map": {}, "names": [ "main" diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 5ebde2412c5..16d10a89a1e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjRbuJADEX/Jc88ZGyPZ2Z/paoq2qYVEgJEYaVVxb+vHeeG9mGl1fSFe1LwSZpcJsDn8Do9X9+fdoe348fw6+FzeD7v9vvd+9P++LK97I4H++vnMPoD2WPaDJQiKIIjJCJHaESJqBFtDg4Lh4XDwmHhsHBYOCwcFg4Lh0XCImERs5AFR0hEjtCIEmEWtmhz5DEiRVAER0hEjtCIEhGWHBYNi4ZFw6Jh0bBoWNQsYlEiakSbo4wRKYIizJItJMIsaqERJaJGmKVshjpGmKVaUARHyBzNtpqFROQIjSgRNaLNkUY/2aNDAhCAAQLIAAX4JbOrlNIISAACMEAAGaCAAqgAmAlmgplgJpgJZoKZYCaYCea5rNaXNNd1hgQgAAMEkAEKKIAKgFlgFpgFZoFZYBaYBWaBWWD2Gid28ClxUPzFX5wdKqAt4O0N8HF1IAADXFgcMkABBVCXnXqfZ/BGByQAARiAQ/VuB+gCXuVUHRKAAP5ib2a1nZJ3rLYF2ghIAAIwQAC+RPjl9voHFICb7aySd57YQQAZoIACqIC2gHc+AB7vfACEXmwSBx/PDm0BL3aAj6sDARjgnuKQAQoogApoC3ixAxKAAAyAmWFmmBlmhplhFpgFZoF5XqGrgwAyQAEFUAFtAV+vAxLAzc2BAQLIAAUUQAW0BeY1fHRIAAIwQAG+7s/3N7zYi83eFi92gAAywMf9cvvCHVABEHrnAxKAAAwQQAYowM3pdtsMuHs/Xc7T5DfvL7dzu8mftufpcBl+Ha77/Wb4vd1f5xd9nLaHOS/bsz1r/9l0eLU04dtuPzndNvfp8d+jyc/qPGwr6Dqe/39eFPNaOubJV/F53t5vPfOyzpeu/Tda5nlMP5zXjnkmXDym9rN5lo55WedFes6/1HW+9Ry/Jpw/TdwznzPmc8/514L+a+3pvzb0r4w957+MBfMp98z7fTbmOf1s/13zlTBfqfbMr+tHlZ73by3oX61dx6/r/mtP/2vDfOtaPxqhv016+m+f3lGANJaeK2Cf9vEWtM/71GdId0PrMoisBsldhno3tL5jWJcSk3XdC2ldTO1LTOoyZF4NXX2070r3Y6h9x1Dz3fB9TX20re3L7vztR4ebu8677fN+WjbfroeXL89e/pzwDH60OJ2PL9Pr9Ty56f7LhT08UOMNJ3n0L6S2WXXTkm/YB60Hti9AnMrjzQ/lLw==", + "bytecode": "H4sIAAAAAAAA/+1azY7jRBDuTuxMfhglYpG4r8QBcbFjx0lAQoMIzMKFE1zg4rHjEw/ht0BC3HkATkgckDghcUSIV0HisNOzXeMvlbKTmXTPzkpTUmS7u/qr6uqqcrU7WjWk7TVQJxCBXNqbkX3uQX//+ndhn6PTKB4xuS7xV1Gaj4T5OdQ/GVlM7Qc/InxP9o/OLM6XdYOPcyG5w+vfBO6fqcY/fM2f1s/n/J91zJl859Pa39oa2gB+4AH/M8BXyn3sfu7HPrf4l37wF4T/wg9+RvhfeMFPChOPJha/sXhSLJ7kT3mVVcU2j/NlfjUvCykWT8LfFlGRR0WUl8U2WaxHYCMn+KtFmVTLophf32yT+QgwneCX5WJepHmeVOV2nWSEH7rCB8qqbX5uMQeqIc3W/kz58LVoqZk8xdZJMfljpqvr3KCZPNKH24d8lWw3FHSdCX2a3Q8FOUNBjoTVc4jVd4gVOMQKHWEZ2tSvrp5rqyX5BPoQkeQv6Muc+uwZ9TYY3wEu5yNynr93qaA59QT5Uu59HfmD2sbKa913mz/6TB9uH54/AkHXmZLjCe8DQU4gyJkJfZv6Ces+WJ59Oj0XZBNRH+ZF9GVOUv6gNpM/vgdczsdlou/xvCz5O2JQrT1VcvxJWIH98djZWKyQ8X9lr1I95nJ/9TbgKiXH6CF7vLiDPfQd7UH8XzN7ePJX0R4ka6Ka/W5Qu5e/XEURye2DHbjfo/yQ8X9rn8fCPE55T1bLPK6SvMoXeVmmRc7tZKgHdpL2XI8lx2hBd6JDOeYXwOV8XCbGQfhIbXFKvv0XcDkflynlW+4n52o/3/Day1MePLr2Ivlj5XUd4653PNqH116hoOuM9Rna1A0f7+sLbb0nLOdYUqzqlivJ4W1tNR76yTFxFbJxF/Y5Oo2OjiuS/1BxJa1fV1wNBF1nrM/Qpm74eF/Xt5cnLHdYPBcSvnQlObytLX6luML6lc5BjF4/wBgcRzUdH0t1NN8L/KQazB/t/RRwldp/r3bZU5ontXd9K0R9p2o/Ts9YH4475jvaoEOvkcA/7NALv/GOGBbKCTrmwXUdtPATXsj4f7ZX8/xc7+qH42ndqI6iWh75fO47TJ42Or6nGz24L4S1bBOlmvVA/vuu30ztr9mAYR36HkVnbVLsko5SjU64GLvH1qf3zSuIRbnjUF75FXAxto7NK8T/m2ow/2nBRB3xjJGvbwhYkg6XTAfi/91ejZ0/0jImzivomBfx/wGYHzNM1/mQ9Jmqdl/jskMYt6kbHpwv8v9lr+b5T4Yp7Q+kWJD8PQBc7lNkk55q1h/PaGms5/ox0kzvQO3X2zwGkP9vNq8zsBVff+73uAYoF32CbMLXjOQaH/zECuAxj7IxBqV3O36DwpzEc6I0L9STx9ax/DSvnpL3O5yf5w8+nwHIb1tL3TGe+1u/ZSze828RCu4f6z5I+9Gncx8k5cOnfdCbh+VyHzRS8rvvwj5Hp9HefxXGqqm1pfetpI92pk96+96hGhXPIzDHtNX+/9mred7oXR2leg3rwLZ67X/ApLpG2jNgTjMUQJ/vPQPWIyHTSfJp6byS2x75+X9lDEn/teD/W+l6v2gBk//fDfmxbrrL+g2tIKx1pVqfajaDPz7Cd7jdJNlT3WCe2/tD3xCmat9e/BxFWtOu8z9al0ELP48n4n8HbPdcy5hoE9SLrwfxvwuYXfGEOcdQUO/O78K2R6fRa9+Dk81mAv+m3u3r2ue42pOQ77s+y0wX+bLIl3G8TuNtGi8OnWVOSaca5lXvjjmzz7RP4PyEFzL+9yEuP2A+GAryDN+HHXy65XqDIbQF9W7bqN7n79f7/CR7XO/rSH0T6EPfNfSWfUZ7IRbpETL+JeQuQ0MYQ+Nngvwhk7+jt9DGz0UnAv9E4DfrEzG/xbm7ruFvZDJ8bOO6ke9MlPu4mq9W2Xp+FaXLsqjKNDkUV67lF4vsqrgO7mgb36jz0PKzNItXq3xVZEW1TourB5//OqvWSXIVJ+tyu46zQ/JfAqdlPq8ZNQAA", + "debug_symbols": "pZjdbtpMEIbvhWMOPD87u9tbiaKIJKRCQiSi8EmfIu69Mx6/pq1Uqdqc8D4OzGPHflkDn5vX/fP1+9Ph9Pb+Y/Pt4XPzfD4cj4fvT8f3l93l8H7yv35upnhgf6TthimDMyRDM0qGZdSMltHnkLRIWiQtkhZJi6RF0iJpkbRIWjQtmhZ1C3tIhmaUDMuoGW4Rjz5HmTIogzMkQzNKhmXUjLSUtFhaLC2WFkuLpcXSYm5Rj5rRMvocdcqgDM5wS/HQDLeYh2XUjJbhlrrdtCnDLc2DMyRD5+i+1T00o2RYRs1oGX0OmuJkTwEEYIAAFFAABohL5leJaAIQgAECUEABGKACGgBmhplhZpgZZoaZYWaYGWaGeS6r94Xmus5AAAYIQAEFYIAKaACYFWaFWWFWmBVmhVlhVpgV5qgxSUBMaUC8uARUQAP0BaK9ZAEEYEAcRg1QQAEYoALastPo8wzR6AQCMEAAONTodoItEFWmFkAABsSLo5nNd8rRsdYX6BOAAAwQgAJiiYjLHfVPqIAw+1nl6DxLgAIKwAAV0AB9geh8AjzR+QQIo9isATFeAvoCUeyEGLcABgggPDWgAAxQAQ3QF4hiJxCAAQKAWWAWmAVmgVlgVpgVZoV5XqFbgAIKwAAV0AB9gVivEwgQ5h4gAAUUgAEqoAH6AvMaPgUQgAECMECs+/P9LV4cJYliS1zKKHaCAgrAABXQABBG5xMIwAABKKAADBBmut22G9y9ny7n/T5u3r/czv0m/7E770+XzbfT9Xjcbv7bHa/zi3587E5zXnZnf9b/1/3p1dOFb4fjPui2vU9Pfx+lOKvzsK+g63j593k1zFsdmOdYxed5f7+NzOs6X4f233mZl4m+OG8D88K4eML9a/OiA/O6zquOnH9t63wfOX4jnD8jGZkvBfNl5PxbRf+tjfTfOvpXp5HzX6eKeSoj83GfzXmhr+1/aL4x5hu3kfl1/Wg68v5tFf1rbej4bd1/G+l/65jvQ+tHZ/S360j//dM7CkBTHbkC/mkfb0H/vM9jBrob+pBBdTVoGTK0u6GPHcO6lLhs6F7I62LqX2JoyFBkNQz10cfK3WBDBrv/F3+8px59a/dyOP/2o8MtXOfD7vm4XzbfrqeXX569/P+BZ/Cjxcf5/WX/ej3vw3T/5cIfHrjLVkgf4wupbzbbdooN/6D1IP5NSKg+3uJQfgI=", "file_map": { "50": { "source": "fn main() {\n let numerator =\n [790096867046896348, 1063071665130103641, 602707730209562162, 996751591622961462, 28650, 0];\n unsafe { __udiv_mod(numerator) };\n\n let denominator = [12, 0, 0, 0, 0, 0];\n let result = unsafe { __validate_gt_remainder(denominator) };\n assert(result[4] == 0);\n assert(result[5] == 0);\n}\n\nunconstrained fn __udiv_mod(remainder_u60: [u64; 6]) {\n let bit_difference = get_msb(remainder_u60);\n let accumulator_u60: [u64; 6] = shl(bit_difference);\n}\n\nunconstrained fn __validate_gt_remainder(a_u60: [u64; 6]) -> [u64; 6] {\n let mut addend_u60: [u64; 6] = [0; 6];\n let mut result_u60: [u64; 6] = [0; 6];\n\n for i in 0..6 {\n result_u60[i] = a_u60[i] + addend_u60[i];\n }\n\n result_u60\n}\n\nunconstrained fn get_msb(val: [u64; 6]) -> u32 {\n let mut count = 0;\n for i in 0..6 {\n let v = val[(6 - 1) - i];\n if (v > 0) {\n count = 60 * ((6 - 1) - i);\n break;\n }\n }\n count\n}\n\nunconstrained fn shl(shift: u32) -> [u64; 6] {\n let num_shifted_limbs = shift / 60;\n let limb_shift = (shift % 60) as u8;\n\n let mut result = [0; 6];\n result[num_shifted_limbs] = (1 << limb_shift);\n\n for i in 1..(6 - num_shifted_limbs) {\n result[i + num_shifted_limbs] = 0;\n }\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_0.snap index a6105dc6329..2957bb36011 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_0.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1azY7jRBBuJ/YkTpxJBOKGBBIPgB07TnxihTghXsLxzw2JB0DIPBgSN07wANy5IHHnsqsdZ7vGXyrVjmfTHs1hWhp17K7+6qerqsvd46iuObp31Q2NQL7SP3z9PIHx6cPfG/0c3tYin/G1iX8Ik8QX9LMof+xrTGcc/JDwR7J/ONM43zUdPupCfOcPf0v4HajOP8bSn9ZvTP0/7dF5qXX9n+mKsri3yJLXaV1UeZTv8+O2LHzQzwp+VYRFHhZhXhZVvMt8wLSCf9iVcb0viu3DjyreEr5nC78sd9siyfO4LqssTgn/zhY+tLSucsKfjYDftpXGnKuuOcy3MB9a9PO9w/gpde5nivFfMFlt532H8SN5uH0o1sh2C0HWjTCGMYpjyGch8JGwphaxXItYnkWsO4tYFD+0ZhOY5xh64sPf0VwpN9rcBzZK3meQtzsO71TKmxbxd1LeVMpuDTde7oof98XFOPaJyE95DaO0zb6G9+0f1UGe6mID57owjvRbwPzBgOkAJo9v/B0AliSDx2Qg+lT3bY59Z8BEvZY9ehF9BpiOc465Ul3ry+9Efy/Qr4CG5FkzGXAu5+1p2fneHjB9iP5b3be2/YZhLgX50O7ko5JPLQGX+xTRTQDXF+b6gt428yDJQmvkgjyBII/H6L9net2DraY9NuFrhnxxXX3Gd8X4tnK4moGU04k3xuCa6SDNmQh6zAW5eCwNpSc9cP2DHnopXyD+CvibfMnpmc9zuYQzF3Tg8U329g1yv9HP4W1tcH1L/J+rvpXyRV99K8XYRhjDPIZjyCcQ+Lxi2cOiNcM1dgw98eHveH2LfCx+e0Y8zyxUtydKeUaSx7EmTxLy/cEDHphj+B5N9D/qvo2lmXMuI+4RtLb8zAYxif4nwKQ65jGPNt38OdiobS6M2cxpLZ8FyIGynuRvzvWWfBrph9RauN48BnAfXrExzOt8r+I5FtfAEeSi+VjbDlm/n3WPta1Uhy0A/xcDb1NtPzfw/gcwf9W/rZ8XnreCdKPvOqUu99uR9rfB+y3xXzBZx9pv50webh++30r1zEYYM/ko8pFiTcKavWJ9FFbfedJL9fex7s36/H0i2PWp/v7qoy/H36XvqSH+KPGRvnGHxNVLu5cYO66k9euLK6n+kWoj7ifS9+FS4POKZQ9LqqVvjSupVrh2rvwbvMd5Q8+Vif4vwPxd/14L83ldTrIo1X+GvFZyzElYruq+K5F+xmQn+j90P/IdSPgJ4CqB1xB7uE+wh/NEexD9n8weY913SfYgXkuDjqYzSLSXVGsTvfR9ys8iFfBG3QM2hvOkc0gTH0mua3cOXK6+Owfk4/bowWW9M9Dzc3ai/1v3re5fagGlswo8XzrJBGNjn1VgPHnNud6SLyD9xGAnpOe2bNtGXa4fP0fltQxiTAQ+GCN99zs0F3P7WuDJfT64wtNkC9Pdn+le61/do89wTNx7+FmkhPkfYPadmeG5YttcGBvbD9F3uB/2xX7buO3XAj3mALLZhtFjzpdqE55vpPpzqB/i+Rmdb41p9/3hw73hSVaNT37EmwvjSP9WP+MdP/W3nJnV+zyq47zOd3lZJkXO97224f/72ea/PRzSbHsMk31Z1GUSPzf/Ypcei2SXh1V0Eue5+adJGh0O+aFIizpLiuOz65+ldRbHxyjOyiqL0mv8KV7vmm4c81jbZvqZ7qg5PdbxSH+vAdq43LBc6Qn8WroveugcQ3/CEN65zfk7v7mknzaX9I93Rs2ljDS2hDHMsW0L9DPaC7FIDo/Rf64BaE3mMIfmbwT+c8b/TG7hHeZ4jjUV3uE+/5meRH6Luts+lzjxZPj4jstGvjNGXD2klH2R76MoS6IqiXbX4uo9dop8V6kwAAA=", - "debug_symbols": "pZfRbtswDEX/xc95kEiJovorQ1GkbToECNIiSwYMRf59oqnrrA8OBvWl9zgpTyxZlODP6XX3fPn5tD++vf+aHn58Ts+n/eGw//l0eH/Znvfvx/bp5xTsT+TpIW6mmDyyh3gUD/Woc1DwiB7k4RZyC7mF3EJuIbeQW9gt7BZ2C7uF3cJu4WZJLYqHetQ5Uvswb6bcZNIiepAHeySP7CEera60UI86hzSLtmh1tYV4FA/1qHOU4BE9yMPrSvLw8mJjb4MoNnhqWT019LTxc0vqyT1tCtoANfeUnqWn9qyeNfSMPakn9+y+2n21+2r31e6r3RdDAEQAAcyZDRIgAwRQAAqoHWIARICZxYABCZABAigABdQO88osBhFAAAYIwKra447zSpwhAgjAgATIAAEUgAJgTjAnmBPMCeYEc4I5wWyLm4KBAmoHW/AOEUAABiRABggA5gxzhllgFpgFZoFZYBaYBWZrF5o3EAXUDtY0DhFAAAYkQAYIAOYCc4FZYVaYFWaFWWFWmBVm6yEi29+sig2sypa6tY2DVdlatcZxKAAFmEdsgwwAu59iQAAGJID4r5O1DKmBAmoHaxkHE1YDAjCgCTkYZIAACkB9gGQtM4O1jEMEEIABCZABAqjeTWRNxPM5EAEEYIDdoY3UmshBAHaHJrQmcqgdrIkcIoAADEgAM/P1uplw0D2dT7udnXP/nHztPPzYnnbH8/RwvBwOm+n39nCZ/+nXx/Y453l7at+2OdsdX1s24dv+sDO6bm7VYb002kOZi9sGs5Tn/69Pgnopa/W0Xp8IN58SrdXzer3a4pzrlXSkfrl/TWWkvuD+VeNIvSy/r0Pjr6ivYeT3q20JXp945Pnp8vxqXauP9xZQEMUKCkWHFO3Mh6Id0oOKeFOMDaSdkYsi5TGF3hSD09mO0UWhYUhBS0/GtpsNbAoUMZm0/jju1aelvqw2ZazrAolYEBJ5SLDMomQZEhTsq3LnKdwTVMxBCWlkDiumgEP8Zr0M1POyiJjq9+o5jUxgCTgZSsxDgoiNqXD85h3cEdztRLl1og4qNN8UMqbIfFN87efHdrV92Z++vLBfzXXab58Pu375djm+/PPt+c8HvsEL/8fp/WX3ejntzHR7629/flA7IknLo72c2WXSTbsju4x2mVO7lMer3cxf", + "bytecode": "H4sIAAAAAAAA/+1ay47rRBBtJ/YkzmMSgdghgcQHYMeOE68YIVaIn3D82CHxAQiZD0Nixwr2fAAbJPZsQHec2zU+rpQ7npv2aBbT0qhjd/WpR1dVl7vHUW1zdO+qGxqBfKF/+Pp5AuPTx78H/Rzc1kKf8bWJfwzi2Bf0syh/5GtMZxz8gPBHsn8w0zjf1C0+6kJ8549/S/i9Uq1/jKU/rd+Y+n9s0Hmpdf2X6YqyuLfIklVJlZdZmB2y067IfdDPCn6ZB3kW5EFW5GW0T33AtIJ/3BdRdcjz3eOPMtoRvmcLvyj2uzzOsqgqyjRKCP/OFj60pCozwp+NgN+0tcacq7Y5zLcwH1r084PD+CnV9TPF+C+YrLbzvsP4kTzcPhRrZLuFIOtWGMMYxTHksxD4SFhTi1iuRSzPItadRSyKH1qzCcxzenriw9/RXCk32twHtkreZ5C3Ow7vRMqbFvH3Ut5Uym4NN17uip72xcU49gnJT3kNo7TNvoT3zR/VQZ5qYwPnujCO9DvA/K4H0wFMHt/4ewVYkgwek4HoE903Ofb/HkzUa2nQi+hTwHScLuZatc2U34n+XqBfAw3Js2Ey4FzO29Oy8719xfQh+q9139j2K4a5FORDu5OPSj61BFzuU0Q3AVxfmOsLetvMgyQLrZEL8qwEeTxG/y3T6x5sNTXYhK8Z8sV19RnfNePbyOFqBlJOJ94YgxumgzRnIugxF+TisTSUnvTA9V8Z6KV8gfhr4N/nS45hPs/lEs5c0IHHN9nb75H7QT8Ht7XB9S3xf6n6VsoXpvpWirGtMIZ5DMeQz0rg84ZlD4vWDNfY6emJD3/H61vkY/HbM+R5ZqHaPVHKM5I8jjV54oDvDx7wwBzD92ii/173TSzNnK6MuEfQ2vIzG8Qk+h8Ak+qYpzxat/PnYKOmuTBmM6c1fBYgB8p6lr/u6i35NNIPqbVwvXkM4D68ZmOY1/lexXMsroEjyEXzsbYdsn4/6h5rW6kOWwD+Tz28+2r7eQ/vvwDzZ/3b+nlht+WkG33XKXW53460vw3eb4n/gsk61n47Z/Jw+/D9VqpntsJYn48iHynWJKzZG9YHYZnOk16rv491b2by94lg1+f6+5uPvh5/l76nhvijxEf6xh0SV6/tXmLsuJLWzxRXUv0j1UbcT6Tvw6XA5w3LHpZUS98aV1KtcO1c+Rd4j/OGnisT/R+A+av+vRHm87qcZFHKfIa8UXLMSViuar8rkX7GZCf633Q/8h1I8BHgKoHXEHu4z7CH80x7EP3vzB5j3XdJ9iBeyys2keppU3xy26geG/KzfZzHzxpXBj6SXNI9BD/bQN6YN9aMDvm4Bj24rHc99ITH71X+1H2j++dOVz6cT3EtnVXg+dJZ3rrL90G/D25r4lkF+oJXyzZRypzHn7t+W3W5ZlM2ZjoLnwh8MEZM9zs0F3P7ZgDP1RWefbbou/vru9f6W/foTxwT9x5+Filh/gOYpjMzPFdsmgtjY/sh+g73Q9N9Y9O47TcCPZ6Lkc22jB5zvlSb8Bwj1Z9D/RDPz+h8a0y7H47v7w3Psmp88iPeXBhH+v/0M97xU3/LmVl1yMIqyqpsnxVFnGd832sa/r+fbf674zFJd6cgPhR5VcTRS/PP98kpj/dZUIZncV6afxIn4fGYHfMkr9I4P724/mlSpVF0CqO0KNMwucaf4vWubscxjzVtpp/pjprTYx2P9PcaoInLLcuVnsCvofvMQOf09GcM4Z1bd9/59SX9tL6kf7ozqi9lpLEljGGObdpKP6O9EIvk8Bj9p1DzNG0Oc2j+VuA/Z/w7cgvvMMdzrKnwDvf5T/Qk8lvU3fa5xJknw8d3XDbynTHi6jGlHPLsEIZpHJZxuL8WV+8ArDE1jqkwAAA=", + "debug_symbols": "pZfRbtswDEX/xc95kCiJovorQ1GkbToECNIiSwYMRf59pKnrrA8OBvWl9zgpT2RZlODP6XX3fPn5tD++vf+aHn58Ts+n/eGw//l0eH/ZnvfvR/30cwr2J6bpIW6mmD2KB3tUD/Foc1DwiB7k4RZyC7mF3EJuIbeQW5JbkluSW5JbkluSW5Jaskb1EI82R9YPy2YqKmON6EEeySN7FA/20LqqIR5tDlaLaGhd02CP6iEebY4aPKIHeXhdzR5eXu3e9Saq3TxpNk8JPe3+kyb1TD1tCvQGpfTknrWn9GyeLfSMPaln6tl9rfta97Xua93Xui+GAIgAApizGGRAATCgAgTQOsQAiAAzs0ECZEABMKACBNA6zCuzGkQAARKAAValjzvOK3GGCCBAAmRAATCgAgQAc4Y5w5xhzjBnmDPMGWZb3BQMBNA62IJ3iAACJEAGFAADYC4wF5gZZoaZYWaYGWaGmWG2dqF5AxFA62BN4xABBEiADCgABsBcYa4wC8wCs8AsMAvMArPAbD1EZPubVSUDq7Klbm3jYFW2Vq1xHCpAAOZh2yADwMZTDQiQABlgQjGoAAG0DtYy1AwigAAqTMEgAwqAARUgfoNkLTODtYxDBBAgATKgABignjRv/+pJZBABBEiADCgABtgITWhN5NA6WBM5RAABEiADzJyu182Eg+7pfNrt7Jz75+TT8/Bje9odz9PD8XI4bKbf28Nl/qdfH9vjnOftSb/VOdsdXzVV+LY/7Iyum1t1WC+N9nTmYt1glvLy//WZUc91rZ7W6zNh8DnTWn1arxdbnHO9kIzUL+OXXEfqK8YvEkfqefl9Gbr/hvoWRn6/2Zbg9TmNPD9Znl9ra/Xx3gIKLFhBocqQQs98KPSQHlTEm2LsRvSMXBS5jCnkphicTj1GF4WEIQUtPRl1NxvYFChiMmn9cdyrz0t9XW3K2NYFHLEgOKYhwTKLXHhIULGv8p2ncE/QMAc15JE5bJiCFOI363mgPi2LKFH7Xn3KIxNYA06GGsuQIGJjqil+cwR3BHc7UZZmJuExBd+aWQZHUdJN8bWfH/Vq+7I/fXlhv5rrtN8+H3b98u1yfPnn2/OfD3yDF/6P0/vL7vVy2pnp9tavf36QHpEk9dFezuwyy0ZHZJfRLkvWS3682mD+Ag==", "file_map": { "50": { "source": "fn main() {\n let numerator =\n [790096867046896348, 1063071665130103641, 602707730209562162, 996751591622961462, 28650, 0];\n unsafe { __udiv_mod(numerator) };\n\n let denominator = [12, 0, 0, 0, 0, 0];\n let result = unsafe { __validate_gt_remainder(denominator) };\n assert(result[4] == 0);\n assert(result[5] == 0);\n}\n\nunconstrained fn __udiv_mod(remainder_u60: [u64; 6]) {\n let bit_difference = get_msb(remainder_u60);\n let accumulator_u60: [u64; 6] = shl(bit_difference);\n}\n\nunconstrained fn __validate_gt_remainder(a_u60: [u64; 6]) -> [u64; 6] {\n let mut addend_u60: [u64; 6] = [0; 6];\n let mut result_u60: [u64; 6] = [0; 6];\n\n for i in 0..6 {\n result_u60[i] = a_u60[i] + addend_u60[i];\n }\n\n result_u60\n}\n\nunconstrained fn get_msb(val: [u64; 6]) -> u32 {\n let mut count = 0;\n for i in 0..6 {\n let v = val[(6 - 1) - i];\n if (v > 0) {\n count = 60 * ((6 - 1) - i);\n break;\n }\n }\n count\n}\n\nunconstrained fn shl(shift: u32) -> [u64; 6] {\n let num_shifted_limbs = shift / 60;\n let limb_shift = (shift % 60) as u8;\n\n let mut result = [0; 6];\n result[num_shifted_limbs] = (1 << limb_shift);\n\n for i in 1..(6 - num_shifted_limbs) {\n result[i + num_shifted_limbs] = 0;\n }\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index a6105dc6329..2957bb36011 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_bignum/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -35,8 +35,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+1azY7jRBBuJ/YkTpxJBOKGBBIPgB07TnxihTghXsLxzw2JB0DIPBgSN07wANy5IHHnsqsdZ7vGXyrVjmfTHs1hWhp17K7+6qerqsvd46iuObp31Q2NQL7SP3z9PIHx6cPfG/0c3tYin/G1iX8Ik8QX9LMof+xrTGcc/JDwR7J/ONM43zUdPupCfOcPf0v4HajOP8bSn9ZvTP0/7dF5qXX9n+mKsri3yJLXaV1UeZTv8+O2LHzQzwp+VYRFHhZhXhZVvMt8wLSCf9iVcb0viu3DjyreEr5nC78sd9siyfO4LqssTgn/zhY+tLSucsKfjYDftpXGnKuuOcy3MB9a9PO9w/gpde5nivFfMFlt532H8SN5uH0o1sh2C0HWjTCGMYpjyGch8JGwphaxXItYnkWsO4tYFD+0ZhOY5xh64sPf0VwpN9rcBzZK3meQtzsO71TKmxbxd1LeVMpuDTde7oof98XFOPaJyE95DaO0zb6G9+0f1UGe6mID57owjvRbwPzBgOkAJo9v/B0AliSDx2Qg+lT3bY59Z8BEvZY9ehF9BpiOc465Ul3ry+9Efy/Qr4CG5FkzGXAu5+1p2fneHjB9iP5b3be2/YZhLgX50O7ko5JPLQGX+xTRTQDXF+b6gt428yDJQmvkgjyBII/H6L9net2DraY9NuFrhnxxXX3Gd8X4tnK4moGU04k3xuCa6SDNmQh6zAW5eCwNpSc9cP2DHnopXyD+CvibfMnpmc9zuYQzF3Tg8U329g1yv9HP4W1tcH1L/J+rvpXyRV99K8XYRhjDPIZjyCcQ+Lxi2cOiNcM1dgw98eHveH2LfCx+e0Y8zyxUtydKeUaSx7EmTxLy/cEDHphj+B5N9D/qvo2lmXMuI+4RtLb8zAYxif4nwKQ65jGPNt38OdiobS6M2cxpLZ8FyIGynuRvzvWWfBrph9RauN48BnAfXrExzOt8r+I5FtfAEeSi+VjbDlm/n3WPta1Uhy0A/xcDb1NtPzfw/gcwf9W/rZ8XnreCdKPvOqUu99uR9rfB+y3xXzBZx9pv50webh++30r1zEYYM/ko8pFiTcKavWJ9FFbfedJL9fex7s36/H0i2PWp/v7qoy/H36XvqSH+KPGRvnGHxNVLu5cYO66k9euLK6n+kWoj7ifS9+FS4POKZQ9LqqVvjSupVrh2rvwbvMd5Q8+Vif4vwPxd/14L83ldTrIo1X+GvFZyzElYruq+K5F+xmQn+j90P/IdSPgJ4CqB1xB7uE+wh/NEexD9n8weY913SfYgXkuDjqYzSLSXVGsTvfR9ys8iFfBG3QM2hvOkc0gTH0mua3cOXK6+Owfk4/bowWW9M9Dzc3ai/1v3re5fagGlswo8XzrJBGNjn1VgPHnNud6SLyD9xGAnpOe2bNtGXa4fP0fltQxiTAQ+GCN99zs0F3P7WuDJfT64wtNkC9Pdn+le61/do89wTNx7+FmkhPkfYPadmeG5YttcGBvbD9F3uB/2xX7buO3XAj3mALLZhtFjzpdqE55vpPpzqB/i+Rmdb41p9/3hw73hSVaNT37EmwvjSP9WP+MdP/W3nJnV+zyq47zOd3lZJkXO97224f/72ea/PRzSbHsMk31Z1GUSPzf/Ypcei2SXh1V0Eue5+adJGh0O+aFIizpLiuOz65+ldRbHxyjOyiqL0mv8KV7vmm4c81jbZvqZ7qg5PdbxSH+vAdq43LBc6Qn8WroveugcQ3/CEN65zfk7v7mknzaX9I93Rs2ljDS2hDHMsW0L9DPaC7FIDo/Rf64BaE3mMIfmbwT+c8b/TG7hHeZ4jjUV3uE+/5meRH6Luts+lzjxZPj4jstGvjNGXD2klH2R76MoS6IqiXbX4uo9dop8V6kwAAA=", - "debug_symbols": "pZfRbtswDEX/xc95kEiJovorQ1GkbToECNIiSwYMRf59oqnrrA8OBvWl9zgpTyxZlODP6XX3fPn5tD++vf+aHn58Ts+n/eGw//l0eH/Znvfvx/bp5xTsT+TpIW6mmDyyh3gUD/Woc1DwiB7k4RZyC7mF3EJuIbeQW9gt7BZ2C7uF3cJu4WZJLYqHetQ5Uvswb6bcZNIiepAHeySP7CEera60UI86hzSLtmh1tYV4FA/1qHOU4BE9yMPrSvLw8mJjb4MoNnhqWT019LTxc0vqyT1tCtoANfeUnqWn9qyeNfSMPakn9+y+2n21+2r31e6r3RdDAEQAAcyZDRIgAwRQAAqoHWIARICZxYABCZABAigABdQO88osBhFAAAYIwKra447zSpwhAgjAgATIAAEUgAJgTjAnmBPMCeYEc4I5wWyLm4KBAmoHW/AOEUAABiRABggA5gxzhllgFpgFZoFZYBaYBWZrF5o3EAXUDtY0DhFAAAYkQAYIAOYCc4FZYVaYFWaFWWFWmBVm6yEi29+sig2sypa6tY2DVdlatcZxKAAFmEdsgwwAu59iQAAGJID4r5O1DKmBAmoHaxkHE1YDAjCgCTkYZIAACkB9gGQtM4O1jEMEEIABCZABAqjeTWRNxPM5EAEEYIDdoY3UmshBAHaHJrQmcqgdrIkcIoAADEgAM/P1uplw0D2dT7udnXP/nHztPPzYnnbH8/RwvBwOm+n39nCZ/+nXx/Y453l7at+2OdsdX1s24dv+sDO6bm7VYb002kOZi9sGs5Tn/69Pgnopa/W0Xp8IN58SrdXzer3a4pzrlXSkfrl/TWWkvuD+VeNIvSy/r0Pjr6ivYeT3q20JXp945Pnp8vxqXauP9xZQEMUKCkWHFO3Mh6Id0oOKeFOMDaSdkYsi5TGF3hSD09mO0UWhYUhBS0/GtpsNbAoUMZm0/jju1aelvqw2ZazrAolYEBJ5SLDMomQZEhTsq3LnKdwTVMxBCWlkDiumgEP8Zr0M1POyiJjq9+o5jUxgCTgZSsxDgoiNqXD85h3cEdztRLl1og4qNN8UMqbIfFN87efHdrV92Z++vLBfzXXab58Pu375djm+/PPt+c8HvsEL/8fp/WX3ejntzHR7629/flA7IknLo72c2WXSTbsju4x2mVO7lMer3cxf", + "bytecode": "H4sIAAAAAAAA/+1ay47rRBBtJ/YkzmMSgdghgcQHYMeOE68YIVaIn3D82CHxAQiZD0Nixwr2fAAbJPZsQHec2zU+rpQ7npv2aBbT0qhjd/WpR1dVl7vHUW1zdO+qGxqBfKF/+Pp5AuPTx78H/Rzc1kKf8bWJfwzi2Bf0syh/5GtMZxz8gPBHsn8w0zjf1C0+6kJ8549/S/i9Uq1/jKU/rd+Y+n9s0Hmpdf2X6YqyuLfIklVJlZdZmB2y067IfdDPCn6ZB3kW5EFW5GW0T33AtIJ/3BdRdcjz3eOPMtoRvmcLvyj2uzzOsqgqyjRKCP/OFj60pCozwp+NgN+0tcacq7Y5zLcwH1r084PD+CnV9TPF+C+YrLbzvsP4kTzcPhRrZLuFIOtWGMMYxTHksxD4SFhTi1iuRSzPItadRSyKH1qzCcxzenriw9/RXCk32twHtkreZ5C3Ow7vRMqbFvH3Ut5Uym4NN17uip72xcU49gnJT3kNo7TNvoT3zR/VQZ5qYwPnujCO9DvA/K4H0wFMHt/4ewVYkgwek4HoE903Ofb/HkzUa2nQi+hTwHScLuZatc2U34n+XqBfAw3Js2Ey4FzO29Oy8719xfQh+q9139j2K4a5FORDu5OPSj61BFzuU0Q3AVxfmOsLetvMgyQLrZEL8qwEeTxG/y3T6x5sNTXYhK8Z8sV19RnfNePbyOFqBlJOJ94YgxumgzRnIugxF+TisTSUnvTA9V8Z6KV8gfhr4N/nS45hPs/lEs5c0IHHN9nb75H7QT8Ht7XB9S3xf6n6VsoXpvpWirGtMIZ5DMeQz0rg84ZlD4vWDNfY6emJD3/H61vkY/HbM+R5ZqHaPVHKM5I8jjV54oDvDx7wwBzD92ii/173TSzNnK6MuEfQ2vIzG8Qk+h8Ak+qYpzxat/PnYKOmuTBmM6c1fBYgB8p6lr/u6i35NNIPqbVwvXkM4D68ZmOY1/lexXMsroEjyEXzsbYdsn4/6h5rW6kOWwD+Tz28+2r7eQ/vvwDzZ/3b+nlht+WkG33XKXW53460vw3eb4n/gsk61n47Z/Jw+/D9VqpntsJYn48iHynWJKzZG9YHYZnOk16rv491b2by94lg1+f6+5uPvh5/l76nhvijxEf6xh0SV6/tXmLsuJLWzxRXUv0j1UbcT6Tvw6XA5w3LHpZUS98aV1KtcO1c+Rd4j/OGnisT/R+A+av+vRHm87qcZFHKfIa8UXLMSViuar8rkX7GZCf633Q/8h1I8BHgKoHXEHu4z7CH80x7EP3vzB5j3XdJ9iBeyys2keppU3xy26geG/KzfZzHzxpXBj6SXNI9BD/bQN6YN9aMDvm4Bj24rHc99ITH71X+1H2j++dOVz6cT3EtnVXg+dJZ3rrL90G/D25r4lkF+oJXyzZRypzHn7t+W3W5ZlM2ZjoLnwh8MEZM9zs0F3P7ZgDP1RWefbbou/vru9f6W/foTxwT9x5+Filh/gOYpjMzPFdsmgtjY/sh+g73Q9N9Y9O47TcCPZ6Lkc22jB5zvlSb8Bwj1Z9D/RDPz+h8a0y7H47v7w3Psmp88iPeXBhH+v/0M97xU3/LmVl1yMIqyqpsnxVFnGd832sa/r+fbf674zFJd6cgPhR5VcTRS/PP98kpj/dZUIZncV6afxIn4fGYHfMkr9I4P724/mlSpVF0CqO0KNMwucaf4vWubscxjzVtpp/pjprTYx2P9PcaoInLLcuVnsCvofvMQOf09GcM4Z1bd9/59SX9tL6kf7ozqi9lpLEljGGObdpKP6O9EIvk8Bj9p1DzNG0Oc2j+VuA/Z/w7cgvvMMdzrKnwDvf5T/Qk8lvU3fa5xJknw8d3XDbynTHi6jGlHPLsEIZpHJZxuL8WV+8ArDE1jqkwAAA=", + "debug_symbols": "pZfRbtswDEX/xc95kCiJovorQ1GkbToECNIiSwYMRf59pKnrrA8OBvWl9zgpT2RZlODP6XX3fPn5tD++vf+aHn58Ts+n/eGw//l0eH/ZnvfvR/30cwr2J6bpIW6mmD2KB3tUD/Foc1DwiB7k4RZyC7mF3EJuIbeQW5JbkluSW5JbkluSW5Jaskb1EI82R9YPy2YqKmON6EEeySN7FA/20LqqIR5tDlaLaGhd02CP6iEebY4aPKIHeXhdzR5eXu3e9Saq3TxpNk8JPe3+kyb1TD1tCvQGpfTknrWn9GyeLfSMPaln6tl9rfta97Xua93Xui+GAIgAApizGGRAATCgAgTQOsQAiAAzs0ECZEABMKACBNA6zCuzGkQAARKAAValjzvOK3GGCCBAAmRAATCgAgQAc4Y5w5xhzjBnmDPMGWZb3BQMBNA62IJ3iAACJEAGFAADYC4wF5gZZoaZYWaYGWaGmWG2dqF5AxFA62BN4xABBEiADCgABsBcYa4wC8wCs8AsMAvMArPAbD1EZPubVSUDq7Klbm3jYFW2Vq1xHCpAAOZh2yADwMZTDQiQABlgQjGoAAG0DtYy1AwigAAqTMEgAwqAARUgfoNkLTODtYxDBBAgATKgABignjRv/+pJZBABBEiADCgABtgITWhN5NA6WBM5RAABEiADzJyu182Eg+7pfNrt7Jz75+TT8/Bje9odz9PD8XI4bKbf28Nl/qdfH9vjnOftSb/VOdsdXzVV+LY/7Iyum1t1WC+N9nTmYt1glvLy//WZUc91rZ7W6zNh8DnTWn1arxdbnHO9kIzUL+OXXEfqK8YvEkfqefl9Gbr/hvoWRn6/2Zbg9TmNPD9Znl9ra/Xx3gIKLFhBocqQQs98KPSQHlTEm2LsRvSMXBS5jCnkphicTj1GF4WEIQUtPRl1NxvYFChiMmn9cdyrz0t9XW3K2NYFHLEgOKYhwTKLXHhIULGv8p2ncE/QMAc15JE5bJiCFOI363mgPi2LKFH7Xn3KIxNYA06GGsuQIGJjqil+cwR3BHc7UZZmJuExBd+aWQZHUdJN8bWfH/Vq+7I/fXlhv5rrtN8+H3b98u1yfPnn2/OfD3yDF/6P0/vL7vVy2pnp9tavf36QHpEk9dFezuwyy0ZHZJfRLkvWS3682mD+Ag==", "file_map": { "50": { "source": "fn main() {\n let numerator =\n [790096867046896348, 1063071665130103641, 602707730209562162, 996751591622961462, 28650, 0];\n unsafe { __udiv_mod(numerator) };\n\n let denominator = [12, 0, 0, 0, 0, 0];\n let result = unsafe { __validate_gt_remainder(denominator) };\n assert(result[4] == 0);\n assert(result[5] == 0);\n}\n\nunconstrained fn __udiv_mod(remainder_u60: [u64; 6]) {\n let bit_difference = get_msb(remainder_u60);\n let accumulator_u60: [u64; 6] = shl(bit_difference);\n}\n\nunconstrained fn __validate_gt_remainder(a_u60: [u64; 6]) -> [u64; 6] {\n let mut addend_u60: [u64; 6] = [0; 6];\n let mut result_u60: [u64; 6] = [0; 6];\n\n for i in 0..6 {\n result_u60[i] = a_u60[i] + addend_u60[i];\n }\n\n result_u60\n}\n\nunconstrained fn get_msb(val: [u64; 6]) -> u32 {\n let mut count = 0;\n for i in 0..6 {\n let v = val[(6 - 1) - i];\n if (v > 0) {\n count = 60 * ((6 - 1) - i);\n break;\n }\n }\n count\n}\n\nunconstrained fn shl(shift: u32) -> [u64; 6] {\n let num_shifted_limbs = shift / 60;\n let limb_shift = (shift % 60) as u8;\n\n let mut result = [0; 6];\n result[num_shifted_limbs] = (1 << limb_shift);\n\n for i in 1..(6 - num_shifted_limbs) {\n result[i + num_shifted_limbs] = 0;\n }\n result\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index a9913942b43..30a5ca5422f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9Va23LaMBBdY9LcmjRtyI06xLSQtikPFhgwb/mOvsEEXvqb7W/0WyqBNtUIkWnw2Rm8MzuLbbGcPbtaWcYRraSn9cF+jrXWtF7Y48gem/N1rXta32jd13qg9VDrkdZjrW+1nmg91fpO65nW91o/aD3X2nD8ulKz9tHaQTbK8/m4P1cDNc36k1kxzPLhbFSoQg2L4VO/GAzmRV6MJ7PJOJuofDBXi+FksMhW4vrKyomKcL6yuhevK5HHQVZOFNBXFoBb1rfiDy4Xl9ZeMSGxtebCH++cGZR6oGJBErcsyr4tSnVJuAK/IpnkoiciMubrQMzb+nTr6NrWVt0eR7QukSAviFhYbiQB3wQKpCz4G8JN1iZhVxAJDpu0udNv679J2GaAjvvKxr2pdl4r7BeZ749ADt3mYvy2adVciP5v5d+BxYFX52kArsjKn1h7y4QwgQn968p8zgxKPVCxIIllV/4EiOsWmNyq3Y4uljJXAbgiRdmy9o4J4QJs0XpRmkGpB2qXb0dbhCvKO3By0cWXODkjYNwt2u2V1/hIhOswKydTZHNMAb7mq0Icm0YQaoyguJ+3XehaTyuAsY3EGNsCdx8sST2wkmhMbcLtu1fFO3lCTqpPsHhHOefFFxSfUnlKafcnFS5P3gM/9Kr0GQhUuKDEkoXkQApjB4mxonuNGeGLK7jX6Fp7z4TwvqJL63sNMyj1QO3yXqNLuO5xD04uurslTjKB+QjuD7JyssxxIsDBF8J2+CrehyM5kML4FY1RYjIZkNjmNsoTIRLLxvuNKjNxxO61qzBxkHmiqna4KtzDPghgXAr6n3Lkjv07YWc56o871ycyXuOrI4CzA8TYAxciOlbDIXCyKFODPZJ5pI3i0WDjfank626hN0rchn/xfO7s9Mevn7/dce0N1/j7B9YeWnvkxBHjuOqz/2MZ/9k+rcuR8/mYwvzVA9+LNhzXPPvS2JfeAjoJXGOf59a6eDmOQ8+6NQfkUrH/hoz/YK7cp+QNL06X70cQBvbHO4M9Wpead43H+nMmwuNb+486DvwWC9dMwznHfP4F9G5wVqMrAAA=", - "debug_symbols": "pZTbjoMgEED/hWcfGO72VzabhlramBA1VJtsmv77jjD28rDJhr7MUeEMMlxu7BgOy3nfD6fxwnZfN3ZIfYz9eR/Hzs/9OODX271h2+t+TiHgJ/bSjtbkUxhmthuWGBt29XHJnS6THzJnn7CVNywMRyQmPPUxrE/35mnzv1UpFclSuYeu/+9b2PxWVfhKWPKVqBlfgXr47We+ggrfaE2+sfxDX9f4bUu+BVHhWzAPv6Z+xj19WTO+2dbfVtXPKrH5pmb/WbfVz4F587/xzXd9ejuxjLMdDgjYpWECp98wmaPKUedocrQ5uhzbHIEXQEHRAX0sAagCXWAKMAf+HriCNkPwAijALIDzE5KoiJpoiJboiJgM8OhKTgSiIErimg9nLDXREC3REdtCxYlrvnVDXH3q/SEGuu9Oy9C9XH/zz7S1bBfklMYuHJcU1sLnNlyKXw==", + "debug_symbols": "pZTbisMgEED/xec8eNf0V5al2NSWgJhgk8JS+u87cbTbPiwU+zInUc/IeLuRoz+s5/0YT9OF7L5u5JDGEMbzPkyDW8YpQuvt3pH6u1+S99BEnvrBml3ycSG7uIbQkasLax50mV3MXFyCXtoRH49ASHgag9++7t2fTf9XhZBFFtI+dPW+b1j1e9ngS26KL3nL/JLJh99/5kvW4Guliq8N/dBXLX7fF98w3uJb/fBFg2903T/TVL+RvPq65fwYW+u3TL/43/DnhjG93DhCyQ4mZDCkIxzK74jIUeaoctQ5mhxtjn2OjCIYAnUGPiwBkwiF0AjIYQEW0WdwimAIyAIVcIGQCIXQCIOwCMjCYEEELWSFvFAUQioGd1OoQl1oCm1hj5S0cMu3naSrS6M7BF8eqtMah6d3a/mZa0992eY0Df64Jr+teO6DPfgF", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_0.snap index a9913942b43..30a5ca5422f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_0.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9Va23LaMBBdY9LcmjRtyI06xLSQtikPFhgwb/mOvsEEXvqb7W/0WyqBNtUIkWnw2Rm8MzuLbbGcPbtaWcYRraSn9cF+jrXWtF7Y48gem/N1rXta32jd13qg9VDrkdZjrW+1nmg91fpO65nW91o/aD3X2nD8ulKz9tHaQTbK8/m4P1cDNc36k1kxzPLhbFSoQg2L4VO/GAzmRV6MJ7PJOJuofDBXi+FksMhW4vrKyomKcL6yuhevK5HHQVZOFNBXFoBb1rfiDy4Xl9ZeMSGxtebCH++cGZR6oGJBErcsyr4tSnVJuAK/IpnkoiciMubrQMzb+nTr6NrWVt0eR7QukSAviFhYbiQB3wQKpCz4G8JN1iZhVxAJDpu0udNv679J2GaAjvvKxr2pdl4r7BeZ749ADt3mYvy2adVciP5v5d+BxYFX52kArsjKn1h7y4QwgQn968p8zgxKPVCxIIllV/4EiOsWmNyq3Y4uljJXAbgiRdmy9o4J4QJs0XpRmkGpB2qXb0dbhCvKO3By0cWXODkjYNwt2u2V1/hIhOswKydTZHNMAb7mq0Icm0YQaoyguJ+3XehaTyuAsY3EGNsCdx8sST2wkmhMbcLtu1fFO3lCTqpPsHhHOefFFxSfUnlKafcnFS5P3gM/9Kr0GQhUuKDEkoXkQApjB4mxonuNGeGLK7jX6Fp7z4TwvqJL63sNMyj1QO3yXqNLuO5xD04uurslTjKB+QjuD7JyssxxIsDBF8J2+CrehyM5kML4FY1RYjIZkNjmNsoTIRLLxvuNKjNxxO61qzBxkHmiqna4KtzDPghgXAr6n3Lkjv07YWc56o871ycyXuOrI4CzA8TYAxciOlbDIXCyKFODPZJ5pI3i0WDjfank626hN0rchn/xfO7s9Mevn7/dce0N1/j7B9YeWnvkxBHjuOqz/2MZ/9k+rcuR8/mYwvzVA9+LNhzXPPvS2JfeAjoJXGOf59a6eDmOQ8+6NQfkUrH/hoz/YK7cp+QNL06X70cQBvbHO4M9Wpead43H+nMmwuNb+486DvwWC9dMwznHfP4F9G5wVqMrAAA=", - "debug_symbols": "pZTbjoMgEED/hWcfGO72VzabhlramBA1VJtsmv77jjD28rDJhr7MUeEMMlxu7BgOy3nfD6fxwnZfN3ZIfYz9eR/Hzs/9OODX271h2+t+TiHgJ/bSjtbkUxhmthuWGBt29XHJnS6THzJnn7CVNywMRyQmPPUxrE/35mnzv1UpFclSuYeu/+9b2PxWVfhKWPKVqBlfgXr47We+ggrfaE2+sfxDX9f4bUu+BVHhWzAPv6Z+xj19WTO+2dbfVtXPKrH5pmb/WbfVz4F587/xzXd9ejuxjLMdDgjYpWECp98wmaPKUedocrQ5uhzbHIEXQEHRAX0sAagCXWAKMAf+HriCNkPwAijALIDzE5KoiJpoiJboiJgM8OhKTgSiIErimg9nLDXREC3REdtCxYlrvnVDXH3q/SEGuu9Oy9C9XH/zz7S1bBfklMYuHJcU1sLnNlyKXw==", + "debug_symbols": "pZTbisMgEED/xec8eNf0V5al2NSWgJhgk8JS+u87cbTbPiwU+zInUc/IeLuRoz+s5/0YT9OF7L5u5JDGEMbzPkyDW8YpQuvt3pH6u1+S99BEnvrBml3ycSG7uIbQkasLax50mV3MXFyCXtoRH49ASHgag9++7t2fTf9XhZBFFtI+dPW+b1j1e9ngS26KL3nL/JLJh99/5kvW4Guliq8N/dBXLX7fF98w3uJb/fBFg2903T/TVL+RvPq65fwYW+u3TL/43/DnhjG93DhCyQ4mZDCkIxzK74jIUeaoctQ5mhxtjn2OjCIYAnUGPiwBkwiF0AjIYQEW0WdwimAIyAIVcIGQCIXQCIOwCMjCYEEELWSFvFAUQioGd1OoQl1oCm1hj5S0cMu3naSrS6M7BF8eqtMah6d3a/mZa0992eY0Df64Jr+teO6DPfgF", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index a9913942b43..30a5ca5422f 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -42,7 +42,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/9Va23LaMBBdY9LcmjRtyI06xLSQtikPFhgwb/mOvsEEXvqb7W/0WyqBNtUIkWnw2Rm8MzuLbbGcPbtaWcYRraSn9cF+jrXWtF7Y48gem/N1rXta32jd13qg9VDrkdZjrW+1nmg91fpO65nW91o/aD3X2nD8ulKz9tHaQTbK8/m4P1cDNc36k1kxzPLhbFSoQg2L4VO/GAzmRV6MJ7PJOJuofDBXi+FksMhW4vrKyomKcL6yuhevK5HHQVZOFNBXFoBb1rfiDy4Xl9ZeMSGxtebCH++cGZR6oGJBErcsyr4tSnVJuAK/IpnkoiciMubrQMzb+nTr6NrWVt0eR7QukSAviFhYbiQB3wQKpCz4G8JN1iZhVxAJDpu0udNv679J2GaAjvvKxr2pdl4r7BeZ749ADt3mYvy2adVciP5v5d+BxYFX52kArsjKn1h7y4QwgQn968p8zgxKPVCxIIllV/4EiOsWmNyq3Y4uljJXAbgiRdmy9o4J4QJs0XpRmkGpB2qXb0dbhCvKO3By0cWXODkjYNwt2u2V1/hIhOswKydTZHNMAb7mq0Icm0YQaoyguJ+3XehaTyuAsY3EGNsCdx8sST2wkmhMbcLtu1fFO3lCTqpPsHhHOefFFxSfUnlKafcnFS5P3gM/9Kr0GQhUuKDEkoXkQApjB4mxonuNGeGLK7jX6Fp7z4TwvqJL63sNMyj1QO3yXqNLuO5xD04uurslTjKB+QjuD7JyssxxIsDBF8J2+CrehyM5kML4FY1RYjIZkNjmNsoTIRLLxvuNKjNxxO61qzBxkHmiqna4KtzDPghgXAr6n3Lkjv07YWc56o871ycyXuOrI4CzA8TYAxciOlbDIXCyKFODPZJ5pI3i0WDjfank626hN0rchn/xfO7s9Mevn7/dce0N1/j7B9YeWnvkxBHjuOqz/2MZ/9k+rcuR8/mYwvzVA9+LNhzXPPvS2JfeAjoJXGOf59a6eDmOQ8+6NQfkUrH/hoz/YK7cp+QNL06X70cQBvbHO4M9Wpead43H+nMmwuNb+486DvwWC9dMwznHfP4F9G5wVqMrAAA=", - "debug_symbols": "pZTbjoMgEED/hWcfGO72VzabhlramBA1VJtsmv77jjD28rDJhr7MUeEMMlxu7BgOy3nfD6fxwnZfN3ZIfYz9eR/Hzs/9OODX271h2+t+TiHgJ/bSjtbkUxhmthuWGBt29XHJnS6THzJnn7CVNywMRyQmPPUxrE/35mnzv1UpFclSuYeu/+9b2PxWVfhKWPKVqBlfgXr47We+ggrfaE2+sfxDX9f4bUu+BVHhWzAPv6Z+xj19WTO+2dbfVtXPKrH5pmb/WbfVz4F587/xzXd9ejuxjLMdDgjYpWECp98wmaPKUedocrQ5uhzbHIEXQEHRAX0sAagCXWAKMAf+HriCNkPwAijALIDzE5KoiJpoiJboiJgM8OhKTgSiIErimg9nLDXREC3REdtCxYlrvnVDXH3q/SEGuu9Oy9C9XH/zz7S1bBfklMYuHJcU1sLnNlyKXw==", + "debug_symbols": "pZTbisMgEED/xec8eNf0V5al2NSWgJhgk8JS+u87cbTbPiwU+zInUc/IeLuRoz+s5/0YT9OF7L5u5JDGEMbzPkyDW8YpQuvt3pH6u1+S99BEnvrBml3ycSG7uIbQkasLax50mV3MXFyCXtoRH49ASHgag9++7t2fTf9XhZBFFtI+dPW+b1j1e9ngS26KL3nL/JLJh99/5kvW4Guliq8N/dBXLX7fF98w3uJb/fBFg2903T/TVL+RvPq65fwYW+u3TL/43/DnhjG93DhCyQ4mZDCkIxzK74jIUeaoctQ5mhxtjn2OjCIYAnUGPiwBkwiF0AjIYQEW0WdwimAIyAIVcIGQCIXQCIOwCMjCYEEELWSFvFAUQioGd1OoQl1oCm1hj5S0cMu3naSrS6M7BF8eqtMah6d3a/mZa0992eY0Df64Jr+teO6DPfgF", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index eb82b4d70f0..550ecda59f2 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -50,7 +50,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1aPY/bRhBdSkvxQ9aJZ98VAdIl6aWTdHflFUmfLmVAy7kqVdo0RNIkQPogRerkB6RKZxhwYbh2Z9g/xR7fzulxOKRke9fGAl7gsFzOcN7b2dnZIXWJuWmnr/8Sd21dPzbdxjpXrl+8X1t6tLUIyTPxyJNsnQT26yiAX31zHEfA0UbAMY2A4yQCjlkEHPMIOBYRcCwj4DiNgOOdCDjOIuB4FAHHeQQcqwg4HkfA8W4EHO9FwPEkAo6nATi+aadAmF5IqOCngpoKVioIqeCigoYKBjqQ6cCjA4USNiVESji0oWnDUEDSgp+Y9suq1lj20vWF60cg9/jysSwErk/7l4tNXSjz88h/VTibNoj95TnbT8PwX2TOztfNzj7OhXFnboyxw8+wbASyb5ysAM7+13cd2D/L9Uz4xIAPGHsSBnuTCDwj/GgEfmlCxuLNhxzEYz7SPxwHM9Zp2nxQZpvuPFiWgozXl3LeZ6AnY8uC3pdw/ZW75jULmW9wL/jer/cU/ohFLWvMbWPfjOEe+5X9nKO+kBUgs00bp3RjCzhoi3mkQv8LN567fgLP8POVgj8R+C3eyj3pl0LRLxR9isPP3fXU/VEM/crPmKD7fs3rix+Tx6a790aCTx6Ez2LFfDLT9p/0AePzvkxBP+np2ZaUMVZpgp5/y6G5pYqvK6EvfdBnK3tLWx9zTdHXuZhbruiPlblpuT8XMguyTMgw97NPhnI/62q9Md0YQ65z011H9kFhumvkM59Lv3Iu7YuLkemuC65JKu5duZ7Gv8Mzfee4ll8q040LGaehc2F+IFct7nAtqdkmBNebD8x/AI8EMKnhuUuyEmR8tlVChud7ZUyn3ilgbiHrjkT4MjW7dUDMfICP8ejrVPD51vWE/0hwCHR23OZQXMexWBfE1/IMPovj1OhnC8pY9zsx32mY+S7ugl0jsMamG7eyxh7vmb9mQ+aVsPlmUSdiXuke3pKP8cblfJ0KLj+6nrC+Fz6zA36XZ33a81wOctTfuh73lpZnC9B7DHqYB6jZpu27j1HjaDlr6KzBs5h9VinPT4QMczW+X/xs2j7A9+crP/OvjcJdxocV88R4kDXP+8bRT67/FEf+42hu9PMf+dg9/OU5pX1XkRzSHiyUse4vrg/7zVQ/pxhrasLWgReXN7XSGx83Oz9o/xBmQY76v7kxnoM4j6t35Hl9US+vV/V1vakfPFhva+knaiPwk2/8+mJ1uT1bby/ub1b16nwvPn8fan3PatrPTFEmdNAe28LvQ9MDbE0HbBUDtsoDbQ1hI1cr7N9x40mP/ULoz9wYv9VlCp9U2P/T7HD+FTps8y/Q+ZtlrNvsMOTaHaFM0cf3HqnPcyXMf9w93tdzwPF9DvTxxlhgfM0HSU+PtvAeY5XClue5LX2uyZCtowNtsT9xfen6P5a7PtBan8k58G+wOE/EZz5VGD63sTcHbM2njO8j9hjrQ8WeNreh2EN9GXuarfmBttifWrzNwvhgJfO66fEB4uMY9dGGFfpHgj+1od9MND8iJtqjVin65YA+j7FGQhslyFH/IfNz/TE8w89ra3vcwzfpwe/zB+prcUWx87+75r2Iv3PxGoWos7ab8/vb9aZe/LCk4dmhddbQWc3csX7Q9mYq9J/w+PXfU9P2h226eKT3wt27fQ8ELiFy/L7fSxlfq0f5OjDX1RDXTOGq+fht83/WtO9pv5+inzKB3aqBhQzPUCtweG9grKEt5iFr1edurNX6/Hyl4OOaSSwN/5DaXav1KbafsT3X22Zny+eZivuI9vgrkOi18K00AAA=", - "debug_symbols": "pZXRiuowFEX/pc99yElyThJ/ZRCpWodCqdLRCxfx3+9Jd6IzDxeG+uLase6Vmobm3hz7/e1zN0yn81ez+bg3+3kYx+FzN54P3XU4T/rtvTH5w8VmQ23j0gJvAAIs4AAPMCBAAGDxsDAsDAvDwrAwLAwLw8KwMCwMi8AisAgsAovAIrCIWqwiABFIC4IBCLCAAzygFqcQIAARSAuiWryCAAuohRUeYEAAtYgiAmlBUktQEKCFqBAgABHQQmobMqaQCm2hK/SFXCiFeSVNDqkEyqtJOVANtgZXQ15VmwPXIDWEGmINqQRraqAayt3Z7HM5cA3Z53MINcQass8/Hm1TN+nuOvd93qPfdq3u5Us399O12Uy3cWybP914W370demmhddu1qv6n/vpqFThaRj7nB7tq23+X3XOl7Lz8Vnn3/cD1X7yK/rehtL3ds38nvyzn97re1rRF+bSl2De7POKfpC6fmHV/MHb2pc1z09Sqn2ya+YnefbXPD+Jr75bM3+s9x+Nf69P8qO/1VF3GOYf59Ajm+ah2499GZ5u0+Hb1evfS71Sz7HLfD70x9vcZ9PrMNM32gel2Frrtnqm6chy61gz5yvetJT8Nr8W89BRS07ykJZh0GHaPvJt/gM=", + "debug_symbols": "pZXNbuowEIXfJess/Ddjm1epEAoQqkhRQClc6Qrx7h3neGi7qFSFDd8ZzPkSgoXvzbHf3953w3Q6fzSbt3uzn4dxHN534/nQXYfzJO/eG1NefGo2tm18XhAMYAEHeCAABDAQAVgCLAQLwUKwECwEC8FCsBAsBAvBwrAwLAwLw8KwMCwsFieIQALygmgACzjAAwEQixcwEIEE5AVJLEFgAQeIhQQBIIABsbAgAXlBFksUWEAKScBABBIghdw21phKW+kqfWWopEquLE/SlJBrsEaD1eA0eA3lqdoSSANriBqShlyDMxqshnp3rvhcCaSh+HwJUUPSUHz+8Wgb3aS769z3ZY9+27Wyly/d3E/XZjPdxrFt/nXjbfnQx6WbFl67WVbl+/TTUSjC0zD2JT3ar7b5vep9qGUf0rNOf+9Hq/0cVvSDi7Uf3JrrBxue/fxaP9gVfSaqfY7mxT6t6EfW5xdXXT8Gp31e8/txztq3bk0/8bPv19x/0usnE17rW/7R38rUHYb5xznyKKZ56PZjX8fTbTp8W73+v+iKnkOX+Xzoj7e5L6avw0j+kd5sTq1zfitnkkyOWk+SqawE09octuVvrYzettZzGe0yRhnz9lFu8xM=", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_0.snap index eb82b4d70f0..550ecda59f2 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_0.snap @@ -50,7 +50,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1aPY/bRhBdSkvxQ9aJZ98VAdIl6aWTdHflFUmfLmVAy7kqVdo0RNIkQPogRerkB6RKZxhwYbh2Z9g/xR7fzulxOKRke9fGAl7gsFzOcN7b2dnZIXWJuWmnr/8Sd21dPzbdxjpXrl+8X1t6tLUIyTPxyJNsnQT26yiAX31zHEfA0UbAMY2A4yQCjlkEHPMIOBYRcCwj4DiNgOOdCDjOIuB4FAHHeQQcqwg4HkfA8W4EHO9FwPEkAo6nATi+aadAmF5IqOCngpoKVioIqeCigoYKBjqQ6cCjA4USNiVESji0oWnDUEDSgp+Y9suq1lj20vWF60cg9/jysSwErk/7l4tNXSjz88h/VTibNoj95TnbT8PwX2TOztfNzj7OhXFnboyxw8+wbASyb5ysAM7+13cd2D/L9Uz4xIAPGHsSBnuTCDwj/GgEfmlCxuLNhxzEYz7SPxwHM9Zp2nxQZpvuPFiWgozXl3LeZ6AnY8uC3pdw/ZW75jULmW9wL/jer/cU/ohFLWvMbWPfjOEe+5X9nKO+kBUgs00bp3RjCzhoi3mkQv8LN567fgLP8POVgj8R+C3eyj3pl0LRLxR9isPP3fXU/VEM/crPmKD7fs3rix+Tx6a790aCTx6Ez2LFfDLT9p/0AePzvkxBP+np2ZaUMVZpgp5/y6G5pYqvK6EvfdBnK3tLWx9zTdHXuZhbruiPlblpuT8XMguyTMgw97NPhnI/62q9Md0YQ65z011H9kFhumvkM59Lv3Iu7YuLkemuC65JKu5duZ7Gv8Mzfee4ll8q040LGaehc2F+IFct7nAtqdkmBNebD8x/AI8EMKnhuUuyEmR8tlVChud7ZUyn3ilgbiHrjkT4MjW7dUDMfICP8ejrVPD51vWE/0hwCHR23OZQXMexWBfE1/IMPovj1OhnC8pY9zsx32mY+S7ugl0jsMamG7eyxh7vmb9mQ+aVsPlmUSdiXuke3pKP8cblfJ0KLj+6nrC+Fz6zA36XZ33a81wOctTfuh73lpZnC9B7DHqYB6jZpu27j1HjaDlr6KzBs5h9VinPT4QMczW+X/xs2j7A9+crP/OvjcJdxocV88R4kDXP+8bRT67/FEf+42hu9PMf+dg9/OU5pX1XkRzSHiyUse4vrg/7zVQ/pxhrasLWgReXN7XSGx83Oz9o/xBmQY76v7kxnoM4j6t35Hl9US+vV/V1vakfPFhva+knaiPwk2/8+mJ1uT1bby/ub1b16nwvPn8fan3PatrPTFEmdNAe28LvQ9MDbE0HbBUDtsoDbQ1hI1cr7N9x40mP/ULoz9wYv9VlCp9U2P/T7HD+FTps8y/Q+ZtlrNvsMOTaHaFM0cf3HqnPcyXMf9w93tdzwPF9DvTxxlhgfM0HSU+PtvAeY5XClue5LX2uyZCtowNtsT9xfen6P5a7PtBan8k58G+wOE/EZz5VGD63sTcHbM2njO8j9hjrQ8WeNreh2EN9GXuarfmBttifWrzNwvhgJfO66fEB4uMY9dGGFfpHgj+1od9MND8iJtqjVin65YA+j7FGQhslyFH/IfNz/TE8w89ra3vcwzfpwe/zB+prcUWx87+75r2Iv3PxGoWos7ab8/vb9aZe/LCk4dmhddbQWc3csX7Q9mYq9J/w+PXfU9P2h226eKT3wt27fQ8ELiFy/L7fSxlfq0f5OjDX1RDXTOGq+fht83/WtO9pv5+inzKB3aqBhQzPUCtweG9grKEt5iFr1edurNX6/Hyl4OOaSSwN/5DaXav1KbafsT3X22Zny+eZivuI9vgrkOi18K00AAA=", - "debug_symbols": "pZXRiuowFEX/pc99yElyThJ/ZRCpWodCqdLRCxfx3+9Jd6IzDxeG+uLase6Vmobm3hz7/e1zN0yn81ez+bg3+3kYx+FzN54P3XU4T/rtvTH5w8VmQ23j0gJvAAIs4AAPMCBAAGDxsDAsDAvDwrAwLAwLw8KwMCwMi8AisAgsAovAIrCIWqwiABFIC4IBCLCAAzygFqcQIAARSAuiWryCAAuohRUeYEAAtYgiAmlBUktQEKCFqBAgABHQQmobMqaQCm2hK/SFXCiFeSVNDqkEyqtJOVANtgZXQ15VmwPXIDWEGmINqQRraqAayt3Z7HM5cA3Z53MINcQass8/Hm1TN+nuOvd93qPfdq3u5Us399O12Uy3cWybP914W370demmhddu1qv6n/vpqFThaRj7nB7tq23+X3XOl7Lz8Vnn3/cD1X7yK/rehtL3ds38nvyzn97re1rRF+bSl2De7POKfpC6fmHV/MHb2pc1z09Sqn2ya+YnefbXPD+Jr75bM3+s9x+Nf69P8qO/1VF3GOYf59Ajm+ah2499GZ5u0+Hb1evfS71Sz7HLfD70x9vcZ9PrMNM32gel2Frrtnqm6chy61gz5yvetJT8Nr8W89BRS07ykJZh0GHaPvJt/gM=", + "debug_symbols": "pZXNbuowEIXfJess/Ddjm1epEAoQqkhRQClc6Qrx7h3neGi7qFSFDd8ZzPkSgoXvzbHf3953w3Q6fzSbt3uzn4dxHN534/nQXYfzJO/eG1NefGo2tm18XhAMYAEHeCAABDAQAVgCLAQLwUKwECwEC8FCsBAsBAvBwrAwLAwLw8KwMCwsFieIQALygmgACzjAAwEQixcwEIEE5AVJLEFgAQeIhQQBIIABsbAgAXlBFksUWEAKScBABBIghdw21phKW+kqfWWopEquLE/SlJBrsEaD1eA0eA3lqdoSSANriBqShlyDMxqshnp3rvhcCaSh+HwJUUPSUHz+8Wgb3aS769z3ZY9+27Wyly/d3E/XZjPdxrFt/nXjbfnQx6WbFl67WVbl+/TTUSjC0zD2JT3ar7b5vep9qGUf0rNOf+9Hq/0cVvSDi7Uf3JrrBxue/fxaP9gVfSaqfY7mxT6t6EfW5xdXXT8Gp31e8/txztq3bk0/8bPv19x/0usnE17rW/7R38rUHYb5xznyKKZ56PZjX8fTbTp8W73+v+iKnkOX+Xzoj7e5L6avw0j+kd5sTq1zfitnkkyOWk+SqawE09octuVvrYzettZzGe0yRhnz9lFu8xM=", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index eb82b4d70f0..550ecda59f2 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_capacity_tracker/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -50,7 +50,7 @@ expression: artifact } }, "bytecode": "H4sIAAAAAAAA/+1aPY/bRhBdSkvxQ9aJZ98VAdIl6aWTdHflFUmfLmVAy7kqVdo0RNIkQPogRerkB6RKZxhwYbh2Z9g/xR7fzulxOKRke9fGAl7gsFzOcN7b2dnZIXWJuWmnr/8Sd21dPzbdxjpXrl+8X1t6tLUIyTPxyJNsnQT26yiAX31zHEfA0UbAMY2A4yQCjlkEHPMIOBYRcCwj4DiNgOOdCDjOIuB4FAHHeQQcqwg4HkfA8W4EHO9FwPEkAo6nATi+aadAmF5IqOCngpoKVioIqeCigoYKBjqQ6cCjA4USNiVESji0oWnDUEDSgp+Y9suq1lj20vWF60cg9/jysSwErk/7l4tNXSjz88h/VTibNoj95TnbT8PwX2TOztfNzj7OhXFnboyxw8+wbASyb5ysAM7+13cd2D/L9Uz4xIAPGHsSBnuTCDwj/GgEfmlCxuLNhxzEYz7SPxwHM9Zp2nxQZpvuPFiWgozXl3LeZ6AnY8uC3pdw/ZW75jULmW9wL/jer/cU/ohFLWvMbWPfjOEe+5X9nKO+kBUgs00bp3RjCzhoi3mkQv8LN567fgLP8POVgj8R+C3eyj3pl0LRLxR9isPP3fXU/VEM/crPmKD7fs3rix+Tx6a790aCTx6Ez2LFfDLT9p/0AePzvkxBP+np2ZaUMVZpgp5/y6G5pYqvK6EvfdBnK3tLWx9zTdHXuZhbruiPlblpuT8XMguyTMgw97NPhnI/62q9Md0YQ65z011H9kFhumvkM59Lv3Iu7YuLkemuC65JKu5duZ7Gv8Mzfee4ll8q040LGaehc2F+IFct7nAtqdkmBNebD8x/AI8EMKnhuUuyEmR8tlVChud7ZUyn3ilgbiHrjkT4MjW7dUDMfICP8ejrVPD51vWE/0hwCHR23OZQXMexWBfE1/IMPovj1OhnC8pY9zsx32mY+S7ugl0jsMamG7eyxh7vmb9mQ+aVsPlmUSdiXuke3pKP8cblfJ0KLj+6nrC+Fz6zA36XZ33a81wOctTfuh73lpZnC9B7DHqYB6jZpu27j1HjaDlr6KzBs5h9VinPT4QMczW+X/xs2j7A9+crP/OvjcJdxocV88R4kDXP+8bRT67/FEf+42hu9PMf+dg9/OU5pX1XkRzSHiyUse4vrg/7zVQ/pxhrasLWgReXN7XSGx83Oz9o/xBmQY76v7kxnoM4j6t35Hl9US+vV/V1vakfPFhva+knaiPwk2/8+mJ1uT1bby/ub1b16nwvPn8fan3PatrPTFEmdNAe28LvQ9MDbE0HbBUDtsoDbQ1hI1cr7N9x40mP/ULoz9wYv9VlCp9U2P/T7HD+FTps8y/Q+ZtlrNvsMOTaHaFM0cf3HqnPcyXMf9w93tdzwPF9DvTxxlhgfM0HSU+PtvAeY5XClue5LX2uyZCtowNtsT9xfen6P5a7PtBan8k58G+wOE/EZz5VGD63sTcHbM2njO8j9hjrQ8WeNreh2EN9GXuarfmBttifWrzNwvhgJfO66fEB4uMY9dGGFfpHgj+1od9MND8iJtqjVin65YA+j7FGQhslyFH/IfNz/TE8w89ra3vcwzfpwe/zB+prcUWx87+75r2Iv3PxGoWos7ab8/vb9aZe/LCk4dmhddbQWc3csX7Q9mYq9J/w+PXfU9P2h226eKT3wt27fQ8ELiFy/L7fSxlfq0f5OjDX1RDXTOGq+fht83/WtO9pv5+inzKB3aqBhQzPUCtweG9grKEt5iFr1edurNX6/Hyl4OOaSSwN/5DaXav1KbafsT3X22Zny+eZivuI9vgrkOi18K00AAA=", - "debug_symbols": "pZXRiuowFEX/pc99yElyThJ/ZRCpWodCqdLRCxfx3+9Jd6IzDxeG+uLase6Vmobm3hz7/e1zN0yn81ez+bg3+3kYx+FzN54P3XU4T/rtvTH5w8VmQ23j0gJvAAIs4AAPMCBAAGDxsDAsDAvDwrAwLAwLw8KwMCwMi8AisAgsAovAIrCIWqwiABFIC4IBCLCAAzygFqcQIAARSAuiWryCAAuohRUeYEAAtYgiAmlBUktQEKCFqBAgABHQQmobMqaQCm2hK/SFXCiFeSVNDqkEyqtJOVANtgZXQ15VmwPXIDWEGmINqQRraqAayt3Z7HM5cA3Z53MINcQass8/Hm1TN+nuOvd93qPfdq3u5Us399O12Uy3cWybP914W370demmhddu1qv6n/vpqFThaRj7nB7tq23+X3XOl7Lz8Vnn3/cD1X7yK/rehtL3ds38nvyzn97re1rRF+bSl2De7POKfpC6fmHV/MHb2pc1z09Sqn2ya+YnefbXPD+Jr75bM3+s9x+Nf69P8qO/1VF3GOYf59Ajm+ah2499GZ5u0+Hb1evfS71Sz7HLfD70x9vcZ9PrMNM32gel2Frrtnqm6chy61gz5yvetJT8Nr8W89BRS07ykJZh0GHaPvJt/gM=", + "debug_symbols": "pZXNbuowEIXfJess/Ddjm1epEAoQqkhRQClc6Qrx7h3neGi7qFSFDd8ZzPkSgoXvzbHf3953w3Q6fzSbt3uzn4dxHN534/nQXYfzJO/eG1NefGo2tm18XhAMYAEHeCAABDAQAVgCLAQLwUKwECwEC8FCsBAsBAvBwrAwLAwLw8KwMCwsFieIQALygmgACzjAAwEQixcwEIEE5AVJLEFgAQeIhQQBIIABsbAgAXlBFksUWEAKScBABBIghdw21phKW+kqfWWopEquLE/SlJBrsEaD1eA0eA3lqdoSSANriBqShlyDMxqshnp3rvhcCaSh+HwJUUPSUHz+8Wgb3aS769z3ZY9+27Wyly/d3E/XZjPdxrFt/nXjbfnQx6WbFl67WVbl+/TTUSjC0zD2JT3ar7b5vep9qGUf0rNOf+9Hq/0cVvSDi7Uf3JrrBxue/fxaP9gVfSaqfY7mxT6t6EfW5xdXXT8Gp31e8/txztq3bk0/8bPv19x/0usnE17rW/7R38rUHYb5xznyKKZ56PZjX8fTbTp8W73+v+iKnkOX+Xzoj7e5L6avw0j+kd5sTq1zfitnkkyOWk+SqawE09octuVvrYzettZzGe0yRhnz9lFu8xM=", "file_map": { "50": { "source": "// Reference https://github.com/noir-lang/noir/issues/4395#issuecomment-2018948631\n// for context.\n// We were not accurately accounting for situations where the slice capacity tracker\n// was expecting a capacity from slice intrinsic results.\nfn main(expected: pub Field, first: Field, input: [Field; 20]) {\n let mut hasher_slice = input.as_slice();\n hasher_slice = hasher_slice.push_front(first);\n assert(hasher_slice[0] == expected);\n // We need a conditional based upon witnesses\n // to force a store of the slice.\n // If this successfully compiles it means we have stored\n // the results of the slice intrinsics used above.\n if expected as u32 > 10 {\n hasher_slice[expected - 10] = 100;\n } else {\n hasher_slice[expected] = 100;\n }\n assert(hasher_slice[0] == expected);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index dc891aa2df1..bd8d24f88f0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -85,8 +85,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjBbuM6DEX/JessLImkqP7KoCjSNh0ECNIi0z7goei/P9G8dzqzeBtn03uchEdsItqGP3fPx8ePnw+ny8vrr93dj8/d4/V0Pp9+Ppxfnw7vp9fLfPVzt8Qfrbu7st9py5AMzbCMnuEZYw2b1XVGyagZLUMyNMMyeoZnjDV6Wnpa+rS0GS1DMjTDMnqGZ4w1fMkoGWnxtHhaPC2eFk+Lp8XTMtIy0jLSMtIy0jLSMtIy0jLSMtJSlgVZkBXZkIJUpCE70pHwFfgKfAW+Al+Br8BX4CvwFfjK9MnMuiALsiIbUpCKNGRHOhK+Bl+Dr8HX4GvwNfgafA2+Bl+DT+AT+AQ+gU/gE/gEPoFP4BP4FD6FT+FT+BQ+hU/hU/gUPoXP4DP4DD6DL/a5zoytbZHz9R4pSEXOdTyyIx05MmNTj8iCrMiY1CVACEowQic4IaZ2jm2JXV5qQCFUQiMIQQlG6AQnjIS6LIRCqIRGCHMLUIIROiHMEhDm+VXWGIGEQqiERhCCEozQCU6gudJcaa40xzwUCxCCEowQwh4wALH7ozp2f/EAISjBCJ3ghNDMH7nGECQUQiU0ghCUYIROoDmmYYUYh4RCqAT2rOxZ2bOyZ2XPSrPSbDQbzUbzel1YAoSgBCN0ghMGYL1KlIBCqIRGEIISjNAJTghz7McYsoRCqIRGEIISaHaaneaYsxUGex7sebDnwZ4Hex7sedA8aB40D5jbshAKoRIaQQhKMEInOCHMc/JazFlCIVRCIwhBCUboBCfQXGmuNFeaK82V5kpzzFmVgE5wwgDE5SehECohzBogBCUYoROcMAAxgwmFEGYLCHMPEIISjNAJThgApVlpjhlMYM/KnpU9K3tW9qzsWdmz0Ww0G81Gs9FsNBvNRrPRbDR3mjvN6wzq19d+x7vKh/fr8Rg3lX/cZs6bz7fD9Xh5391dPs7n/e6fw/lj/dCvt8NlzffDdb47B/14eZ45hS+n8zHoa/9dvfx/6RxaFM/R/F2uG+rnTG2on78I69U31EsdqJe2bKlXZ72ODfU2DPV9qRvqe+P6XfS2etvy/3dvrPe+pb77TfUugnrXLfvH9bveb1vftuz/sbB+lC39j/Jd77etXzf13zg/Q9qW+ek8+UiXLfW/959s2j+6sF6XTfXC/lXktnrd8v1p5/lDfcv82sLfz8qW9U24vumm9Y3nf/Ny4/p/n3/v59Hh6XT968HLV5iup8Pj+YjDl4/L0x/vvv/7xnf44Obt+vp0fP64HsP0/fRm/vnRvO9l8ft5SY4j2Yvcx/ODOOi6b77EYVk/KfPQ7r+isf8A", + "bytecode": "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", + "debug_symbols": "pZjNbiJLDIXfhTWL+rFddl5lFEUkISMkRCImXOkq4t1vGftMZhZ3U2xyvgb8lQPl7lZ/bV73z5efT4fT2/uvzcOPr83z+XA8Hn4+Hd9fdp+H99N89WtT/A+3zUPdbrhHUARHSMSI0Ai7hczqNqNGtIgeQREcIREjQiPsFiMsIyxjWvqMHkERHCERI0Ij7BZaImpEWDQsGhYNi4ZFw6Jh0bBYWCwsFhYLi4XFwmJhsbBYWCwstZTMmtkyeyZlcqZkjkzNTF9NX01fTV9NX01fTV9NX01fTV+dPprZSmbNbJk9kzI5UzJHpmamr6evp6+nr6evp6+nr6evp6+nr6eP0kfpo/RR+ih9lD5KH6WP0kfp4/Rx+jh9nD5OH6eP08fp4/Rx+iR9kj5Jn6TP9znP9K0tnvP14UmZnDnXUc+RqZkW6ZvaPGtmy/RJLQ4EYIAABkABPrVzbKvv8tocKqABOoAADBDAACjAAlopgApogA5wc3dggAAGwM3k4Ob5VTYfgYAKaIAOIAADBDAACoC5wdxgbjD7PFRxIAADBODC4WAJvvurOnQAARgggAFQgCX4FARUAMwEM8Hso1DNQQADoABL8HkIqIAG6AACwMwwM8wMM8MsMAvMAvPtwlAcCMAAAQyAAizhdpmoDhXQAB1AAAYIYAAU4GbfkD5lARXQAB1AAAbArDArzD5oNzD0bOjZ0LOhZ0PPhp4NZoPZYLY091IAFdAAHUAABghgANzcHdw8J677oAVUQAN0AAEYIIABUADMDeYGc4O5wdxgbjD7oDV2GAAFWIJffwIqoAHcLA5uHg4MEMAAKMASfAYDKqAB3KwOBGCAAAZAAZbAMDPMDLPPYAB6ZvTM6JnRM6NnRs8Cs8AsMAvMArPALDALzAKzwDxgHjDfZnBcr9sNbiufPs/7vd9V/nGfOe8+P3bn/elz83C6HI/bzT+74+X2oV8fu9MtP3fn+e4c9P3pdeYUvh2Oe6fr9ru6/H/pHNosnqP5u5wX6udMLdTPXwT1rAv11CzrqZeVelbUsy3Ui0nWj9IW6kfH+oP4vnpZ+f+HdtTrWKkfele9EmW98sr+Uf6u1/vWl5X9bwX1Vlf6t/pdr/et35b675gfo74yP7/3Dy39/jRw8qJBC/VcsD6XlfWZsD4T3VfPK98fK75/tqX6gfMP68r8S8H6UlfWF8H5X3Rl/wuhf+FyZ/3f5+/HebR7OZz/enJzddP5sHs+7vPw7XJ6+ePdz38/8A6e/Hyc31/2r5fz3k3fj3/mnx9dx5aKPs5Luh/RlujRH0D4weBt1+KH9fZJmofyePXG/gM=", "file_map": { "50": { "source": "struct foo {\n value: Field,\n counter: u8,\n dummy: u8,\n}\nstruct bar {\n dummy: [u8; 3],\n value: Field,\n counter: u8,\n}\nstruct bar_field {\n dummy: [Field; 3],\n value: Field,\n counter: u8,\n}\nfn main(x: [foo; 3], y: u32, z: u32) -> pub u8 {\n let a = [y, z, x[y].counter as u32];\n let mut b = [bar { value: 0, counter: 0, dummy: [0; 3] }; 3];\n let mut c = [bar_field { value: 0, counter: 0, dummy: [0; 3] }; 3];\n for i in 0..3 {\n b[i].value = x[i].value;\n b[i].counter = x[i].counter;\n b[i].dummy[0] = x[i].dummy;\n c[i].value = x[i].value;\n c[i].counter = x[i].counter;\n c[i].dummy[0] = x[i].dummy as Field;\n }\n if z == 0 {\n // offset\n assert(y as u8 < x[y].counter);\n assert(y <= a[y]);\n // first element is compatible\n assert(y as u8 < b[y].counter);\n // fallback\n assert(y as u8 < c[y].counter);\n }\n x[0].counter\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_0.snap index dc891aa2df1..bd8d24f88f0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_0.snap @@ -85,8 +85,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjBbuM6DEX/JessLImkqP7KoCjSNh0ECNIi0z7goei/P9G8dzqzeBtn03uchEdsItqGP3fPx8ePnw+ny8vrr93dj8/d4/V0Pp9+Ppxfnw7vp9fLfPVzt8Qfrbu7st9py5AMzbCMnuEZYw2b1XVGyagZLUMyNMMyeoZnjDV6Wnpa+rS0GS1DMjTDMnqGZ4w1fMkoGWnxtHhaPC2eFk+Lp8XTMtIy0jLSMtIy0jLSMtIy0jLSMtJSlgVZkBXZkIJUpCE70pHwFfgKfAW+Al+Br8BX4CvwFfjK9MnMuiALsiIbUpCKNGRHOhK+Bl+Dr8HX4GvwNfgafA2+Bl+DT+AT+AQ+gU/gE/gEPoFP4BP4FD6FT+FT+BQ+hU/hU/gUPoXP4DP4DD6DL/a5zoytbZHz9R4pSEXOdTyyIx05MmNTj8iCrMiY1CVACEowQic4IaZ2jm2JXV5qQCFUQiMIQQlG6AQnjIS6LIRCqIRGCHMLUIIROiHMEhDm+VXWGIGEQqiERhCCEozQCU6gudJcaa40xzwUCxCCEowQwh4wALH7ozp2f/EAISjBCJ3ghNDMH7nGECQUQiU0ghCUYIROoDmmYYUYh4RCqAT2rOxZ2bOyZ2XPSrPSbDQbzUbzel1YAoSgBCN0ghMGYL1KlIBCqIRGEIISjNAJTghz7McYsoRCqIRGEIISaHaaneaYsxUGex7sebDnwZ4Hex7sedA8aB40D5jbshAKoRIaQQhKMEInOCHMc/JazFlCIVRCIwhBCUboBCfQXGmuNFeaK82V5kpzzFmVgE5wwgDE5SehECohzBogBCUYoROcMAAxgwmFEGYLCHMPEIISjNAJThgApVlpjhlMYM/KnpU9K3tW9qzsWdmz0Ww0G81Gs9FsNBvNRrPRbDR3mjvN6wzq19d+x7vKh/fr8Rg3lX/cZs6bz7fD9Xh5391dPs7n/e6fw/lj/dCvt8NlzffDdb47B/14eZ45hS+n8zHoa/9dvfx/6RxaFM/R/F2uG+rnTG2on78I69U31EsdqJe2bKlXZ72ODfU2DPV9qRvqe+P6XfS2etvy/3dvrPe+pb77TfUugnrXLfvH9bveb1vftuz/sbB+lC39j/Jd77etXzf13zg/Q9qW+ek8+UiXLfW/959s2j+6sF6XTfXC/lXktnrd8v1p5/lDfcv82sLfz8qW9U24vumm9Y3nf/Ny4/p/n3/v59Hh6XT968HLV5iup8Pj+YjDl4/L0x/vvv/7xnf44Obt+vp0fP64HsP0/fRm/vnRvO9l8ft5SY4j2Yvcx/ODOOi6b77EYVk/KfPQ7r+isf8A", + "bytecode": "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", + "debug_symbols": "pZjNbiJLDIXfhTWL+rFddl5lFEUkISMkRCImXOkq4t1vGftMZhZ3U2xyvgb8lQPl7lZ/bV73z5efT4fT2/uvzcOPr83z+XA8Hn4+Hd9fdp+H99N89WtT/A+3zUPdbrhHUARHSMSI0Ai7hczqNqNGtIgeQREcIREjQiPsFiMsIyxjWvqMHkERHCERI0Ij7BZaImpEWDQsGhYNi4ZFw6Jh0bBYWCwsFhYLi4XFwmJhsbBYWCwstZTMmtkyeyZlcqZkjkzNTF9NX01fTV9NX01fTV9NX01fTV+dPprZSmbNbJk9kzI5UzJHpmamr6evp6+nr6evp6+nr6evp6+nr6eP0kfpo/RR+ih9lD5KH6WP0kfp4/Rx+jh9nD5OH6eP08fp4/Rx+iR9kj5Jn6TP9znP9K0tnvP14UmZnDnXUc+RqZkW6ZvaPGtmy/RJLQ4EYIAABkABPrVzbKvv8tocKqABOoAADBDAACjAAlopgApogA5wc3dggAAGwM3k4Ob5VTYfgYAKaIAOIAADBDAACoC5wdxgbjD7PFRxIAADBODC4WAJvvurOnQAARgggAFQgCX4FARUAMwEM8Hso1DNQQADoABL8HkIqIAG6AACwMwwM8wMM8MsMAvMAvPtwlAcCMAAAQyAAizhdpmoDhXQAB1AAAYIYAAU4GbfkD5lARXQAB1AAAbArDArzD5oNzD0bOjZ0LOhZ0PPhp4NZoPZYLY091IAFdAAHUAABghgANzcHdw8J677oAVUQAN0AAEYIIABUADMDeYGc4O5wdxgbjD7oDV2GAAFWIJffwIqoAHcLA5uHg4MEMAAKMASfAYDKqAB3KwOBGCAAAZAAZbAMDPMDLPPYAB6ZvTM6JnRM6NnRs8Cs8AsMAvMArPALDALzAKzwDxgHjDfZnBcr9sNbiufPs/7vd9V/nGfOe8+P3bn/elz83C6HI/bzT+74+X2oV8fu9MtP3fn+e4c9P3pdeYUvh2Oe6fr9ru6/H/pHNosnqP5u5wX6udMLdTPXwT1rAv11CzrqZeVelbUsy3Ui0nWj9IW6kfH+oP4vnpZ+f+HdtTrWKkfele9EmW98sr+Uf6u1/vWl5X9bwX1Vlf6t/pdr/et35b675gfo74yP7/3Dy39/jRw8qJBC/VcsD6XlfWZsD4T3VfPK98fK75/tqX6gfMP68r8S8H6UlfWF8H5X3Rl/wuhf+FyZ/3f5+/HebR7OZz/enJzddP5sHs+7vPw7XJ6+ePdz38/8A6e/Hyc31/2r5fz3k3fj3/mnx9dx5aKPs5Luh/RlujRH0D4weBt1+KH9fZJmofyePXG/gM=", "file_map": { "50": { "source": "struct foo {\n value: Field,\n counter: u8,\n dummy: u8,\n}\nstruct bar {\n dummy: [u8; 3],\n value: Field,\n counter: u8,\n}\nstruct bar_field {\n dummy: [Field; 3],\n value: Field,\n counter: u8,\n}\nfn main(x: [foo; 3], y: u32, z: u32) -> pub u8 {\n let a = [y, z, x[y].counter as u32];\n let mut b = [bar { value: 0, counter: 0, dummy: [0; 3] }; 3];\n let mut c = [bar_field { value: 0, counter: 0, dummy: [0; 3] }; 3];\n for i in 0..3 {\n b[i].value = x[i].value;\n b[i].counter = x[i].counter;\n b[i].dummy[0] = x[i].dummy;\n c[i].value = x[i].value;\n c[i].counter = x[i].counter;\n c[i].dummy[0] = x[i].dummy as Field;\n }\n if z == 0 {\n // offset\n assert(y as u8 < x[y].counter);\n assert(y <= a[y]);\n // first element is compatible\n assert(y as u8 < b[y].counter);\n // fallback\n assert(y as u8 < c[y].counter);\n }\n x[0].counter\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index dc891aa2df1..bd8d24f88f0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/regression_struct_array_conditional/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -85,8 +85,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "pZjBbuM6DEX/JessLImkqP7KoCjSNh0ECNIi0z7goei/P9G8dzqzeBtn03uchEdsItqGP3fPx8ePnw+ny8vrr93dj8/d4/V0Pp9+Ppxfnw7vp9fLfPVzt8Qfrbu7st9py5AMzbCMnuEZYw2b1XVGyagZLUMyNMMyeoZnjDV6Wnpa+rS0GS1DMjTDMnqGZ4w1fMkoGWnxtHhaPC2eFk+Lp8XTMtIy0jLSMtIy0jLSMtIy0jLSMtJSlgVZkBXZkIJUpCE70pHwFfgKfAW+Al+Br8BX4CvwFfjK9MnMuiALsiIbUpCKNGRHOhK+Bl+Dr8HX4GvwNfgafA2+Bl+DT+AT+AQ+gU/gE/gEPoFP4BP4FD6FT+FT+BQ+hU/hU/gUPoXP4DP4DD6DL/a5zoytbZHz9R4pSEXOdTyyIx05MmNTj8iCrMiY1CVACEowQic4IaZ2jm2JXV5qQCFUQiMIQQlG6AQnjIS6LIRCqIRGCHMLUIIROiHMEhDm+VXWGIGEQqiERhCCEozQCU6gudJcaa40xzwUCxCCEowQwh4wALH7ozp2f/EAISjBCJ3ghNDMH7nGECQUQiU0ghCUYIROoDmmYYUYh4RCqAT2rOxZ2bOyZ2XPSrPSbDQbzUbzel1YAoSgBCN0ghMGYL1KlIBCqIRGEIISjNAJTghz7McYsoRCqIRGEIISaHaaneaYsxUGex7sebDnwZ4Hex7sedA8aB40D5jbshAKoRIaQQhKMEInOCHMc/JazFlCIVRCIwhBCUboBCfQXGmuNFeaK82V5kpzzFmVgE5wwgDE5SehECohzBogBCUYoROcMAAxgwmFEGYLCHMPEIISjNAJThgApVlpjhlMYM/KnpU9K3tW9qzsWdmz0Ww0G81Gs9FsNBvNRrPRbDR3mjvN6wzq19d+x7vKh/fr8Rg3lX/cZs6bz7fD9Xh5391dPs7n/e6fw/lj/dCvt8NlzffDdb47B/14eZ45hS+n8zHoa/9dvfx/6RxaFM/R/F2uG+rnTG2on78I69U31EsdqJe2bKlXZ72ODfU2DPV9qRvqe+P6XfS2etvy/3dvrPe+pb77TfUugnrXLfvH9bveb1vftuz/sbB+lC39j/Jd77etXzf13zg/Q9qW+ek8+UiXLfW/959s2j+6sF6XTfXC/lXktnrd8v1p5/lDfcv82sLfz8qW9U24vumm9Y3nf/Ny4/p/n3/v59Hh6XT968HLV5iup8Pj+YjDl4/L0x/vvv/7xnf44Obt+vp0fP64HsP0/fRm/vnRvO9l8ft5SY4j2Yvcx/ODOOi6b77EYVk/KfPQ7r+isf8A", + "bytecode": "H4sIAAAAAAAA/+1bzW4jRRDusT2OZxzHk7/Nz+5ekLgBshNnE245sKtd7Q93bk6WvAIXkCxxAC7ckOAJkJC4ceUFOPECnODAY0CHrvjzNzWd8aY7jtGOZM1Md03V119XVXdPjxPz39H995e465Y7N93Zlmdm9hDZU3ce3OwYBtQ1iIUxWQKMjSXA2FwCjK0lwJguAcb2EmBcWQKMnQgYY+DMlgRnHhBnAji7pQsH3iZmm/hsYrGBawPDOp7tWEtarjS2q5T94C5kQG5AfcDEOszIbkj9J4OjgTahCIj/MHM6W3H0n4n+NI7+wYrT89Fkqh/bInZlkvZ4MuXyMTyTgMwTkHlSIfMUZJ5WyDwDmWcVMs9B5nmFzAuQeVEh8xJkXoJME2RegcwrkslAJ5afuvvBDY6TwWgU2Q8+7JnZvjfQFrHdjmN7nJA9Y2YXBYbs5yZqzA0Tsid4mB/JiT2RmUzxJFTXmpTbIXUp1En/2nz9Dsixb7WoTrDYQ/y3Z2Z93B7it1b/+2DrA8L08aTcloxsBfbxi4zwhu7XzQr8Btq4MjFXh9Q1oSwFbi+5Q3mqy6CuNZm1k7v7FthBXYIjJfn33H3fndvwjDxfKPbbZH8Gt1KGHLGuplIm8ta333XXXfez/vUZzCci5rFDjt3UTGMX2yT2Bc8K1JlweC4XT4hn5M6Wky+SqU2UadTE3InD4VX+w7lT05THALRvf11FHnN6g+RXFfkuyIj9vrvPoW6VuMjicHHga1tbwdokfIzb1kte7oFOzrFrcdozqjvWiv2csMbytTVT5hf5wbHW1vUVrIVSxz7XV+z0FTuarmZAXey/q6T71N0Pbnj0TJlf9jVuYyDbtX1N7Ocmqu8Pff2G/LCvFQrWQqnjPiwUO4Vi57Z09U117GTKcyHXmdKOdaevpbQDsTVIHq/tkVLZJ+5sx6QJjavzxumagidTnjsNxE1PaR/H6AaUL2LtJfZzU+6XGDG6QXiYH47RTQVrodRh32Id2tlU7Gi6+gF1rQbU9baNi2+jb9ytE3OaHWzzOtlZQO6oPb7/X3JHSD+Joatvyv0t7c6U52KM71tOX0tpB2JrkDxe2yOlsq/dWRvftf7e8HC3ruDpKc9xHG3F4a72GCz2cxM1rofcl9fxKtxtK1gLpQ75xzq0s63Y0XT1A+paDajrbRsX38Ye3Uu9dhY7XMZ2kD+Jhcjr6AHvzaAt+w7qRyhPzHQ9he8+tT29lOT/Bp0/kU55HvN6U8GTkvzPoPMvd61h4vc0mg3e72lWlKOehMpTpU32Oqd6kf/FnWPvw2IuN4otvEcOtXdkIt9R5FGnyPdNmbtOhW30qaaiS9sjMib8PENsa36N9rk/fyWckd6hq/3ZIb6Ro7UKvo0p7wUYM39ft8m2r687c9rOFXnU2SXbiCunOm1vLnZfcTtaFe1oQPtRnjlIqew3d9bmrg2FO43rwlTHHOuqynGc90X+d3eOvP+qxoTY0vqf5yrzxoTml3VjIidd7QC2cb8oVExE+ibDGxNo801j4g93vqsx8ac7LzImcM7E4x5yg8/ynqnmO9r3JCLXhTqZF+J+dNV4a38bHmzGlPtGe+eBfBTUFlxvbNawjfsKPMZtzYlVW4/g+4ANwor4tmvYRqwZyd+bE+uOIn8PZLYIK+LboTp8jucoux47Gq49RX7Xg2sH6uRZ7VsrsSm8taAu5Hsa60NfJlMczEE6qd9ejZ99RX4PZPjd5D7U8Vpc8xmMLYkHjU/BuAg+kTPm08ePPZjP+4o8ciYcFSSPvqfxs7dAfnY8/GjxuOPhR+Nz18MPcsf5dy+AbfR1zv2Ia7+GLp/t6/yCczniul9Dl8/2A0UedXIORFzy7AJjdqT5JHLAPulrr8bPQ0X+Acjw9xcPoW7bw8/O7fAz9xih8bN7A34KDz/3PfwsMuf7clro+OIxFLnzzTHuqv/MO8fQ+MT85hsT96kO54NiU5u78To+9FjBOVMbK+5an97mPId9HvsUvyNgfhY5z1n38KOtb7T9/TrzA83nkbtdDz+4t37b/IScB163LmN+MPY26Tlch+CaOVHK6mDT2oLrVZ4n4rx0t4aum/DC80TEtVdD1yJynvCziHnizPcdk+v52boBPzxP1NbKd21M8OU87V2ZL+dpfGJs8DxR8627lvOKOfnRvo9OTNm3NH54zMR3fb51xtV/r8zt8+Pzn7rfxPn4xPdHPCZoeVf7ZoLfU2nfteM7ZnxPxXXyLH4DEZP345Ppn/Clz2U/nI8W1KP8504B7pMYaNvpG+K8OB4PLw7HF+Oj8evXo/Mx7yvYA9/xh7Z/fvTo7Hx0NB58OrS3B7dtf3x8eHJ+MDo/Pjs6HB8+urb92v8nMY7tseLu8T+aKI97Syj/lVNg/fIbiNFLWcWelfveI5dUnC91KGWtyWyZ9t9N/E+ryIvtfFLGKHVdqMMcY49Vd498oS7BkZL8d06B9An+D1WeLxT7HbI/g1sp429Suop8V5G3/fMtxS22PWBeHwq2NunHMsYmvmP9+h/Oiz2PaUsAAA==", + "debug_symbols": "pZjNbiJLDIXfhTWL+rFddl5lFEUkISMkRCImXOkq4t1vGftMZhZ3U2xyvgb8lQPl7lZ/bV73z5efT4fT2/uvzcOPr83z+XA8Hn4+Hd9fdp+H99N89WtT/A+3zUPdbrhHUARHSMSI0Ai7hczqNqNGtIgeQREcIREjQiPsFiMsIyxjWvqMHkERHCERI0Ij7BZaImpEWDQsGhYNi4ZFw6Jh0bBYWCwsFhYLi4XFwmJhsbBYWCwstZTMmtkyeyZlcqZkjkzNTF9NX01fTV9NX01fTV9NX01fTV+dPprZSmbNbJk9kzI5UzJHpmamr6evp6+nr6evp6+nr6evp6+nr6eP0kfpo/RR+ih9lD5KH6WP0kfp4/Rx+jh9nD5OH6eP08fp4/Rx+iR9kj5Jn6TP9znP9K0tnvP14UmZnDnXUc+RqZkW6ZvaPGtmy/RJLQ4EYIAABkABPrVzbKvv8tocKqABOoAADBDAACjAAlopgApogA5wc3dggAAGwM3k4Ob5VTYfgYAKaIAOIAADBDAACoC5wdxgbjD7PFRxIAADBODC4WAJvvurOnQAARgggAFQgCX4FARUAMwEM8Hso1DNQQADoABL8HkIqIAG6AACwMwwM8wMM8MsMAvMAvPtwlAcCMAAAQyAAizhdpmoDhXQAB1AAAYIYAAU4GbfkD5lARXQAB1AAAbArDArzD5oNzD0bOjZ0LOhZ0PPhp4NZoPZYLY091IAFdAAHUAABghgANzcHdw8J677oAVUQAN0AAEYIIABUADMDeYGc4O5wdxgbjD7oDV2GAAFWIJffwIqoAHcLA5uHg4MEMAAKMASfAYDKqAB3KwOBGCAAAZAAZbAMDPMDLPPYAB6ZvTM6JnRM6NnRs8Cs8AsMAvMArPALDALzAKzwDxgHjDfZnBcr9sNbiufPs/7vd9V/nGfOe8+P3bn/elz83C6HI/bzT+74+X2oV8fu9MtP3fn+e4c9P3pdeYUvh2Oe6fr9ru6/H/pHNosnqP5u5wX6udMLdTPXwT1rAv11CzrqZeVelbUsy3Ui0nWj9IW6kfH+oP4vnpZ+f+HdtTrWKkfele9EmW98sr+Uf6u1/vWl5X9bwX1Vlf6t/pdr/et35b675gfo74yP7/3Dy39/jRw8qJBC/VcsD6XlfWZsD4T3VfPK98fK75/tqX6gfMP68r8S8H6UlfWF8H5X3Rl/wuhf+FyZ/3f5+/HebR7OZz/enJzddP5sHs+7vPw7XJ6+ePdz38/8A6e/Hyc31/2r5fz3k3fj3/mnx9dx5aKPs5Luh/RlujRH0D4weBt1+KH9fZJmofyePXG/gM=", "file_map": { "50": { "source": "struct foo {\n value: Field,\n counter: u8,\n dummy: u8,\n}\nstruct bar {\n dummy: [u8; 3],\n value: Field,\n counter: u8,\n}\nstruct bar_field {\n dummy: [Field; 3],\n value: Field,\n counter: u8,\n}\nfn main(x: [foo; 3], y: u32, z: u32) -> pub u8 {\n let a = [y, z, x[y].counter as u32];\n let mut b = [bar { value: 0, counter: 0, dummy: [0; 3] }; 3];\n let mut c = [bar_field { value: 0, counter: 0, dummy: [0; 3] }; 3];\n for i in 0..3 {\n b[i].value = x[i].value;\n b[i].counter = x[i].counter;\n b[i].dummy[0] = x[i].dummy;\n c[i].value = x[i].value;\n c[i].counter = x[i].counter;\n c[i].dummy[0] = x[i].dummy as Field;\n }\n if z == 0 {\n // offset\n assert(y as u8 < x[y].counter);\n assert(y <= a[y]);\n // first element is compatible\n assert(y as u8 < b[y].counter);\n // fallback\n assert(y as u8 < c[y].counter);\n }\n x[0].counter\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index b6d9881857c..2c8d0144474 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -75,8 +75,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "tZrBbts4EED/xeccRHI45PRXiqJIW3cRIEiDNFlgUeTflyPOU5KDDa+MvXSea/N5ZM5IFJU/hx/Hby9/fb17+Pnr9+HT5z+Hb0939/d3f329//X99vnu18P43z+Hxf+pdviUbg66zJBmyDOUGWSGOoPO0GboMwyL3BzaMkOaIc9QZpAZ6gw6Q5uhzzAtfVr6tPRp6dPSp6UPSx1BZ2gz9BlsDbbMkGbIM5QZZIZpsWmxabFhaSPYGtKyREwRc8QSUSLWiBqxRewRw5fCl8KXwpfCl8KXhq971IgtYo9oM+YlYoqYI5aIEnH4skeN2CL2iDZjWSKmiDliiSgRw1e8HJJDAzpgAbIACchAAQSoAGbBLJgFc8VcMVfMFXPFXDFX93jya7mLQwYKIEAFFGhAByzAG2AC5oa5YW6YG+aGuWFumBvmjrlj7pg75o65Y/YGScXBzdWhAxbgjTIhARkogAAVUMDNXmHeOBNsQvbemZCADBRAgAoo0IAOYE6YE+aE2RspmYMAFVCgAR2wAO+nCQnIAOaMOWNeuyo5NKADFrB21goJyEABvLuyQwUUaEAHLMD7a0ICMlAANxeHCijQgA5YgPfXhARkwM3iIEAFFGhAByzALzgTEpABzIpZMXvH5epgAd5xE9yjDhkogAAVUKABHbAA77jcHBKQgQIIUAEFGtABCzDMhtkwG2bDbJgNs4W5eIPk7tABC/AGmZCADBRAgAoogDlhTpgz5ow5Y86YM+aMOWPOmDPmtUFGE5W1QVZIQAYKIEAFFGhAD/AuqNWhAAJUQIEGdMACvAuqOvhiwn9574LqyXsXTBCgBniFa3ZIQAYKIEAFFGhAByzAa16LQwIyUAABKsDwTmKdxDqJdRLrJNZJrJNYJ7FOYl7Y61cYiRmJGYkZiVkkJn5RKMkhAwUQoAIKNKADFuA1PwFzwpwwe82XxaECGuAFWcbhiJdf8Qy96oo4CFAB/3B18G8ftSF+Ep6QgBqf8Rqb0ACGeyGtH/ZCmiBABRRoQAf4duXbvdhKd8hAAQSogAIN6IAFeLFNwNwwN8wNc8PcMDfMDXPD3DF7HRZzyEABBKiAAg3ogAV4HU7AbJgNs2E2zIbZMBtmC3NdFiABGSiAABVQwO93kkMHLMCrd0ICMlAAASqgAOaEOWHOmDPmjDlj9vOzZAcfNYq/+tlYxCEBGSiAABVQoAEdsADBLJgFs2AWzN5EUh3crA4N6IAF+Il6QgIyUAABKoC5Yq6YK2bFrJgVs2JWzIpZMStm7y9pDhaw3jOvkIAMFECACijQADd3BwtY+8unsifAPV6H3k0TFPDL3+LQAQtY76RXSEAGCiBABfzC6qW13lev0AGboN5NExKQgQIIUAEFGtABzAlzwpwwezfV7CBABRRoQAcswLtpQgIygDljzpi9v2pxaEAHLMA7bkICMlAAASqAuWAumAtmwSyYBbNgFsyCWTALZsEsmFssD7Qp0IAOxMJDWXgoCw9l4aEsPJSFh/ZYt+i68FihAR2IhYey8NC1Ds2hAj58cfDh616VD0+vrzcHtsO+Pj8dj74b9m5/bOyaPd4+HR+eD58eXu7vbw5/396/rB/6/Xj7sMbn26fx7nAfH36MOIQ/7+6PTq83b6OX00PHlS8Gj7PaNrxePF59F2MdryqnxufT48duUwnB2Fh6yyDZB0M5Y6iF4x/7K/sMftsehrzP0BWD1nLKoKcNZdEWhnGfpHtyUC+2yMHqKcOZuWyZuWy2nJpLu3ou05kUxtYdP8PAvkshW0kOLLsUl01nKlfP59ksrp7QrhICy/nUhCa9fkbb1e15XnFRf55XXDSjebl+Rtv/OaPjYcB2HCOfHSdss3KB4Hx3yNt01H2lfWFRLFcXxRnDuIHitxw3TO8MevHF06xvhmo7DOPhyDafY/vx1HSUM4qx31dDMTb60lsS/eIkStpmY+zW7SiqD/PZbI9hbJ5tOdRlj0Fy3c77pe0yvF18xtSenIxzF+Getx+i15PXr3LmJDEeQ3CSGA8ill2KVLaSGA97dimybIpxujulkOtPmGezKCVtWZS8SzE2VVCMXZB9CtmykJp2KXQ7Z2bVtk9R8qaQuk/ROPmPZxTlesXOSW2yTWrfN6ml6pti34GUbWkzbPsUY+N3q4ts+7LYLsfDpjuuYmMDn+Ic+/Qne73KmWXiQmH19zPaLk6hKQcxdvbTnoNotV1rELvOoEJVflggXvwr6HYnre9vXP7DeK4cbdnz/WMnngMY++zLnuXMB0P5YPgyXt1+v3v68Pc7r+56urv9dn+Mlz9fHr6/e/f5n0fe4e9/Hp9+fT/+eHk6uuntj4DGP5917FON08uX8QB/vGqjKltexquxMfN5XNCk+jv+wbIsN2VZX/oni7WbYvbl1dP8Fw==", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_0.snap index d6701268f81..49c09a1f5aa 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_0.snap @@ -75,8 +75,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 16ac2756cec..16b6d1cde44 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/simple_shield/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -75,8 +75,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "16": { "source": "use crate::cmp::Eq;\nuse crate::hash::Hash;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n\n /// Returns the curve's generator point.\n pub fn generator() -> EmbeddedCurvePoint {\n // Generator point for the grumpkin curve (y^2 = x^3 - 17)\n EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860, // sqrt(-16)\n is_infinite: false,\n }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\nimpl Hash for EmbeddedCurvePoint {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n if self.is_infinite {\n self.is_infinite.hash(state);\n } else {\n self.x.hash(state);\n self.y.hash(state);\n }\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\nimpl Hash for EmbeddedCurveScalar {\n fn hash(self, state: &mut H)\n where\n H: crate::hash::Hasher,\n {\n self.hi.hash(state);\n self.lo.hash(state);\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n multi_scalar_mul_array_return(points, scalars)[0]\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [EmbeddedCurvePoint; 1] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n multi_scalar_mul([EmbeddedCurvePoint::generator()], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n if crate::runtime::is_unconstrained() {\n // `embedded_curve_add_unsafe` requires the inputs not to be the infinity point, so we check it here.\n // This is because `embedded_curve_add_unsafe` uses the `embedded_curve_add` opcode.\n // For efficiency, the backend does not check the inputs for the infinity point, but it assumes that they are not the infinity point\n // so that it can apply the ec addition formula directly.\n if point1.is_infinite {\n point2\n } else if point2.is_infinite {\n point1\n } else {\n embedded_curve_add_unsafe(point1, point2)\n }\n } else {\n // In a constrained context, we also need to check the inputs are not the infinity point because we also use `embedded_curve_add_unsafe`\n // However we also need to identify the case where the two inputs are the same, because then\n // the addition formula does not work and we need to use the doubling formula instead.\n // In unconstrained context, we can check directly if the input values are the same when solving the opcode, so it is not an issue.\n\n // x_coordinates_match is true if both abscissae are the same\n let x_coordinates_match = point1.x == point2.x;\n // y_coordinates_match is true if both ordinates are the same\n let y_coordinates_match = point1.y == point2.y;\n // double_predicate is true if both abscissae and ordinates are the same\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n // If the abscissae are the same, but not the ordinates, then one point is the opposite of the other\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: false,\n };\n let point2_1 = EmbeddedCurvePoint { x: point2.x, y: point2.y, is_infinite: false };\n // point1_1 is guaranteed to have a different abscissa than point2:\n // - if x_coordinates_match is 0, that means point1.x != point2.x, and point1_1.x = point1.x + 0\n // - if x_coordinates_match is 1, that means point1.x = point2.x, but point1_1.x = point1.x + 1 in this case\n // Because the abscissa is different, the addition formula is guaranteed to succeed, so we can safely use `embedded_curve_add_unsafe`\n // Note that this computation may be garbage: if x_coordinates_match is 1, or if one of the input is the point at infinity.\n let mut result = embedded_curve_add_unsafe(point1_1, point2_1);\n\n // `embedded_curve_add_unsafe` is doing a doubling if the input is the same variable, because in this case it is guaranteed (at 'compile time') that the input is the same.\n let double = embedded_curve_add_unsafe(point1, point1);\n // `embedded_curve_add_unsafe` would not perform doubling, even if the inputs point1 and point2 are the same, because it cannot know this without adding some logic (and some constraints)\n // However we did this logic when we computed `double_predicate`, so we set the result to 2*point1 if point1 and point2 are the same\n result = if double_predicate { double } else { result };\n\n // Same logic as above for unconstrained context, we set the proper result when one of the inputs is the infinity point\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n\n // Finally, we set the is_infinity flag of the result:\n // Opposite points should sum into the infinity point, however, if one of them is point at infinity, their coordinates are not meaningful\n // so we should not use the fact that the inputs are opposite in this case:\n let mut result_is_infinity =\n infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n // However, if both of them are at infinity, then the result is also at infinity\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [EmbeddedCurvePoint; 1] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n embedded_curve_add_array_return(point1, point2)[0]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index da1e2970ccd..0e2a4677770 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -32,7 +32,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_0.snap index da1e2970ccd..0e2a4677770 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_0.snap @@ -32,7 +32,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index da1e2970ccd..0e2a4677770 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -32,7 +32,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 0e2795222e7..a9ae4d6eee7 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -36,7 +36,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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", + "debug_symbols": "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9U0386tvPps3Rrj67sOXCFfvWM1rRq751dxF88X7yas7kK93pFffYe01m2X2q3sYWzW7ydbVnbktfpF63c0LWjWz6I1wdUZxnNaf56a630v3UxGuOq0/9aTmz3o+jnD3ne668r682g/8Buj7+sKvItSMXG9Xoyje6nnzHUS52opePw7w8mor+MTqd6Osjt/uOhGu3k76qNEDv/uOuY/BL/lfjQ067+V8XM3BcKm7YperbyW/Hb6q++63Kr5GmFcR6ucq3kE1+TTCXX/Qp7bi7r3/lwjjak9qXS/87nc3vkS4uvJ+fUq62pNeY8Xu7WodnP3h7h7GvSsj3P2ChjKC3+2Huod5B1mvzqhZ8+V83tXmnFyHqxm5vuo5y9fVXNbJmajzuZr/8A70zopw93skT81mme3qWMxWT0mzXT37z1YzrGa7mgU6W81Enf3qTmz2+h7rvJvTOzuPxf892+0v71/f//3HX/76h1/L+u33iPXLj9//7acfzp///PXnv//h3/73f/8n/83ffvnxp59+/Ndf//PLv//+wz9+/eWHiBT/7ttz/ufP763D810fs/3lu28df79Xnz50vX9L/B0/JPr+w+f9W/Hv3yeq/o7kvX9b/P0Oy34Xk7zevx1/v+8p339o798z/tb3bH230d+/F/5++2E3iXjxo3V/fhusRvL42bqI3mNt5C+/x+b/Hw==", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_0.snap index 8fc123198fa..2c9fd541fa0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_0.snap @@ -36,7 +36,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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GPcUVnXfrR3GmHlzf6/HjtdjnB7LqD4MOr0+aNR5ofF4CfR5jDkqxhyH4zHx/TbH2XjwVT0hfDU93I8piNFfj0GnxyI4Fu2HMepa52ucxpitYsx5FiP+TwFWjKbXYYxaXODT+YPjz+1mjPl6DDu7xphqXmdqh/tB9dqXSfT1GNoOY2A8yM5qn/FK6ubhsXB1aNwx+usxTuuWUbd8Wrc8MB5GXyHGYb3Im0ZkOTwWqe8XlsPvF5Zam2Slw+tUe13raoc1hy4gvhfDDmPUvfr98vFwTMdVxzJO54+OJvVxne6HYD/ETmM0xJivx9DD+WPUKz8+vQ+6YzBitK8Q43A+tatqzk7rxayuU5uH17pVv/Qd7vD55UIDSbvOzosQWmFI6TDGm7WPw/n0C9dPnj1Tcg7oePIcNp/0LHejrJVuT+rtWQwRqgYnedxC8pkYaBiTJ/f7Xx5jHMao5zDR6yvEePJe4HmMerV7h+tnMZSwH0/WXZ/G4PqelCctMZ+JMXEsV389xumY4jtf1PgwBtYcepuvx3jcF/M8Bhp37zuqwzHt9d0i3Q6P5e2a1OmxfNm61rN5sL6s7fG9fvzhtYcRtOpt9MMYnevZ5+Y8iyHVTHHfGbavEOPwWOTN6yv9CjH6dRijnknvcHoYY7x5FceH57ZVVwbT4bnluj/urPp6jNMx1VYxlA/HA1119/QzX48xDsdD67ml6+m5ffOqtT9uzvhMDEWMfhqjfjOzj+uw9kdDDB6vx5DDMR1aDS/jcTfuZ2JM3Jteh8fyl/tb/goxTt7lW90g2+P79PhjR48jVEuX0eP7wacx7ve8VSvz8XPPZ2KgfWeO0/3ojBjtMEatqY/rmkcx7tuOq2I8+W55HqOei8c1r68QQw5j1L3HzcPxwG9l36+gxmGM6n8frffDGPWMfy9nHR4LVa/yzcNjwTrBeLIe/pkYAzHmYQyu9Zv79pgOYzBeP8vhecH97WA7jCF1rz+EDutF6v3RePJ70n8jhh3GqH76e7lTXo9xOn/oVcfypP/ly2Pw4Zhqfb+MJ78g8OUxxuGY/uVZ7voKMfrJd349k87Hz8U06L8Z4V4V7FggHIcxSBGDD2MoYozrMEbdDd4L8v0shlWH6rAnM8fzGIb9mIfnZdaT8Zh6dl4MLeV2Pe7k+UyM+hMJ9w02H8aoDi1rh+fFWj2RWqPDY2nVsWbtcUf3Z2JUJ7XRk7vKpzGofh/e6PS8EM7Lkw7Rz8T4oieGZ383qn754v/fdfzj/umHnz58+v7NXyL740+P9OnDDz9+fL9//NfvP//05l9/+99f819+/PTh48cP//7+10+//PT+n79/eu+R/N/eXfs/viP/P0e/b93GP755R/7zdT953Cdl3j9L/Pt13f+uev+s8fNdl0TsP3f/2f/0K3GT++cRP99zoffb3j+b/8z3Uy6x8f3zjJ/tjn+vd98/t9iB6/5qvv/Dd8D/1N530ft7p7n+8acPwf8B", + "debug_symbols": "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", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 8fc123198fa..2c9fd541fa0 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/slice_dynamic_index/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -36,7 +36,7 @@ expression: artifact } }, "bytecode": "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", - "debug_symbols": "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GPcUVnXfrR3GmHlzf6/HjtdjnB7LqD4MOr0+aNR5ofF4CfR5jDkqxhyH4zHx/TbH2XjwVT0hfDU93I8piNFfj0GnxyI4Fu2HMepa52ucxpitYsx5FiP+TwFWjKbXYYxaXODT+YPjz+1mjPl6DDu7xphqXmdqh/tB9dqXSfT1GNoOY2A8yM5qn/FK6ubhsXB1aNwx+usxTuuWUbd8Wrc8MB5GXyHGYb3Im0ZkOTwWqe8XlsPvF5Zam2Slw+tUe13raoc1hy4gvhfDDmPUvfr98vFwTMdVxzJO54+OJvVxne6HYD/ETmM0xJivx9DD+WPUKz8+vQ+6YzBitK8Q43A+tatqzk7rxayuU5uH17pVv/Qd7vD55UIDSbvOzosQWmFI6TDGm7WPw/n0C9dPnj1Tcg7oePIcNp/0LHejrJVuT+rtWQwRqgYnedxC8pkYaBiTJ/f7Xx5jHMao5zDR6yvEePJe4HmMerV7h+tnMZSwH0/WXZ/G4PqelCctMZ+JMXEsV389xumY4jtf1PgwBtYcepuvx3jcF/M8Bhp37zuqwzHt9d0i3Q6P5e2a1OmxfNm61rN5sL6s7fG9fvzhtYcRtOpt9MMYnevZ5+Y8iyHVTHHfGbavEOPwWOTN6yv9CjH6dRijnknvcHoYY7x5FceH57ZVVwbT4bnluj/urPp6jNMx1VYxlA/HA1119/QzX48xDsdD67ml6+m5ffOqtT9uzvhMDEWMfhqjfjOzj+uw9kdDDB6vx5DDMR1aDS/jcTfuZ2JM3Jteh8fyl/tb/goxTt7lW90g2+P79PhjR48jVEuX0eP7wacx7ve8VSvz8XPPZ2KgfWeO0/3ojBjtMEatqY/rmkcx7tuOq2I8+W55HqOei8c1r68QQw5j1L3HzcPxwG9l36+gxmGM6n8frffDGPWMfy9nHR4LVa/yzcNjwTrBeLIe/pkYAzHmYQyu9Zv79pgOYzBeP8vhecH97WA7jCF1rz+EDutF6v3RePJ70n8jhh3GqH76e7lTXo9xOn/oVcfypP/ly2Pw4Zhqfb+MJ78g8OUxxuGY/uVZ7voKMfrJd349k87Hz8U06L8Z4V4V7FggHIcxSBGDD2MoYozrMEbdDd4L8v0shlWH6rAnM8fzGIb9mIfnZdaT8Zh6dl4MLeV2Pe7k+UyM+hMJ9w02H8aoDi1rh+fFWj2RWqPDY2nVsWbtcUf3Z2JUJ7XRk7vKpzGofh/e6PS8EM7Lkw7Rz8T4oieGZ383qn754v/fdfzj/umHnz58+v7NXyL740+P9OnDDz9+fL9//NfvP//05l9/+99f819+/PTh48cP//7+10+//PT+n79/eu+R/N/eXfs/viP/P0e/b93GP755R/7zdT953Cdl3j9L/Pt13f+uev+s8fNdl0TsP3f/2f/0K3GT++cRP99zoffb3j+b/8z3Uy6x8f3zjJ/tjn+vd98/t9iB6/5qvv/Dd8D/1N530ft7p7n+8acPwf8B", + "debug_symbols": "td3frhy3kQbwd9G1L5r1j6RfxQgM21ECAYJsKPYCC8Pvvl1FVn0nC8xI4Sg37t9Z5Xw1093F6WbzzP757u/vf/7jnz9++PSPX//17vsf/nz38+cPHz9++OePH3/95affP/z66f6//vnu8v80efd9++5d07Wxd9/TvelrM959L/dmxoautWlrQ2vDayNro2tja9PXZqXQSuGVwiuFVwqvFF4pvFJ4pcj9v9R7c/+b3RtdG1ubvjZjbWZs9Fqbtja0Nrw2d0q/N7o2tjZ9bcbazNjYtTZtbWhteG1Wiq0Uu1PmvelrM9ZmxqZfa9PWhtbmTmnXvZW91b21vb2T2n0w+tjbubbj2tu2t7S3vLeyt553H75he9v3duyt5/F37+a1t21vaW89797zU/ZW99b2tu/t2Nu5tu26Ei3hkerghCQ04bHm6ImRmBvNk7ujJSjhycMhCU1YwpOnYyTmhp/VdDla4v518l7w03ihJ0ZibvjpvNASlLhfD3kX+fm8YImeGIm5IVfCA9lBCU5IQhOe7DvcO2JhJOaG98VCS1CCE/nevTXIj443x8JIeKAfFG+RhZaghAf60fFWWdCEJ/tB8YZZGIm54W0T27a3tLe8t7K3ure2t31vx97OtfXOYT+23joLlOCEJO5Q9n3g/bPQEyNxB7MfJe+hhZagBCckoQlP9uPmrbQwEnOBvJk4ht2WoAQnPFkdmrBET4zE3PBmWmgJTzYHJyShCU/ujp4YibnhzcTD0RKU8OTpkIQP85fDEj0xEv6h0fxjxj8oyMEJSWjCEj0xEnPDu0p893pXLXBCEpqwRE94YHzezQ3vqoWWoIQn++71T50FTViiJ0Zibnh7LeR7964SPxbeVQua8EA/BN5VCx7oe967KuBdtdAS3q9+LLyxFiShCUv0xEjMDe+vhZa4k9WPoPfXgiQ0YYmeGIk7Wf24e38ttAQlPNl3i/fXgiYs0RMjMRfY+0vZ0RKU4IQnx0WLJizRE56sjrnh/bXQEpTghCQ0YQlPNsdIzA3vrwVP7g5KcEISnjwclugJT56OueGfY3Y5WoISvOEfTdYcLUEJTkhCE5boibERV2p+LOJaLUAJTkhCE5boiZHwK0A/cN4yFteQnJCEJizREyMxN7xlFjzQj473hfkh8L5Y6ImRmBveFwstQQlOSCKTRyaPTB6ZPDLZ+8L8KHtfLFCCE5LQhCV6YiTmglxXoiUowQlJaMISnjwcIzE3vC8WPHA6OCEJTWROyxzvgn6fh+JdsNASfnneHJzwS3RyaMISPTHXeSh8JTyQHZTghAf67Yh/3Cx4oN+Z+MfNwkjMDW+ZhZagBCckoYlMlkz2lul+i+OfOwHvnYWWoAQnJKEJS/REJmsmx52PH8q49wlQwpP9WMQdUEATluiJkZgb3k0LLUGJTO6Z7I3W/UzwRlvoiZGYG95oCy1BCU5IIpNHJo9MHpk8Mnlm8szkmcneaMNPP2+0BU1Ywq9I/dTyRluYC+qNNsjREpTghH/QT4cmLNETIzE3vNEWWoISnPDXzA5/zeqwRE+MxNzw1htxV90SlOCEJ/uNtLfegiV6YiTmhvfgQkt48nBwQhKa8GR/O96DCyMxN7wH5+VoCUpwQhKasERP+J29HzjvwYD34EJLeLIfOO/BBUlowpN9z3sPLozE3PAenOJoCU/2Q+A9uCAJTXiyH4KYfYiZjSvREpTghCQ0YQl/Yb6fvdEC3mgLLUEJTkhCEx7oxyKmHi7fmzHZcPk+i+mGJSlpyUq9NEpzy2LKYYnWXjDvooXIJZeWIpddvTRKMxUTDpe4qMQlKWnJSr00UrSPiFEEq4tKEewvmaQUwfEbVuqlUfLz3StEJwVaghKckIQmLNETIxE7wye1vJW2WilmoS6XlqwUc1l+WGSUZkqvUsxp+YFRKnFJSpHsB0Z7KZL9lepM2VVqpUj2/WxckpKW6tVbL43STPWr1Eq1N2KWb0nz1ccMn09o2ZrjC41SJPuxXDN9oUgeLipxSUpRI+YfrdRLozRTMfu31EpU4pKUqsasGrNqzKoxs0a/rpLX8JmlHlOCS1yKmUpy9dIoeZ5Pc/WYBlxqJSr5K/VprB7NuGSlSFbXKM0UXaVINheVuCQlLVmpl0aK6zVzJHcXlSJ5uKSkJStFsk8O8yjNVPTlUitRiUtS0pKVvAaHRmmmold98qtHXy5JyfN8bqtHhy710ihFnu+N6NClVqJS1PDjFh26pCUrRQ0/btGhPlPVo0ND0aFLrUQlLklJS5Hsxyg6dCmS/XhEhy61EpVqD43aQ9GhS1aq17zm5L1T1qx8qJU82SfE+pqbD8XsfDwe0JKVeinOl0iZWyP6cqmVqMQlKWnJSr0UTwLYNVPRq0utRCUuxfsQ1yjNVPSlz4KN6MslKnEpUsylJSv10ijNVHToUitRiUtVg6tGdKjPt43o0KVRmqno0KVWohKXpBTJw9VLkex7PPoyFH251Erx2OVycUlKWvIaGo+MemmUZip6damVqMQlKWmpaljVsKphVaNXjehVjQdXVOKSlLRkpV6KGn6GRdeGomuXooafYdG1S1ySkpas1EujNFPRv0tVY1aNWTVm1ZhVI/rXJwFH9O/SKM2tGf271EpUihrmkpKWrBQ1umuUZir6d6mVqMQlKWnJSlWjVY3obp+HnNHdS61EpagxXVLSkpV6aZRmKrrb5y9ndPcSlbgkJS1ZqZdGaaakakjVkKohVUOqRnz++pzTjD5f6qVRmqno86VWolLUIJeUtBQ1/NFu9PnSKEWNeMB7lVqJSlySkpas1EujVDV61Yg+90nVGX2+xCUpRQ0/Y6PPl6KGn03R50szFX2+1EpU4pKUtGSlqjGqRvS5T0fO6POlVqISl6SkJStFDT9Po8+X5tZ9pxzPva9gA+PZdwsyKKCCBnZwgLO4nrIvNhDVGqpF2/s06k0FDexgVOPgLEbz97VKoIEEMiigggZ2cICzyKjGqBYDQV8LFBgUUEEDOzjAWYwBYbOBqCaoJqgmqCaoFuNCj/UQMTBszmIMDZsNJJBBARU0ENUU1WKM8Dnge1LiAhtIYFQbQQEVNLCDA5zFGC42o1r0RQwYmwwKqKCBHRzgLMbAsYlqA9Vi7BjRhTF4bCpooFcb0S0xgGzOYgwhm15tRLfEILLJoIAKGtjBAc7kWp2z2UACGYxqHFTQwKgmwQFGNT9p14qdzQYSGNVicc9aubOoYFRbi346GNViUU+MJYsxlmw2kEAGBVTQwA6iGqFajCUjlhHFWLJJIIMCKmhgBwc4i4Jqgmoxlvi8dIt1QUkBFfRqPj/dYn1QcoCzGGPJZgMJZFBABVFNUU1RTVHNUM1QzVDNUM1QzVDNUM1QzVDNUK2jWowlM871GEs2GRRQQQM7OMBZjLFkE9UGqsVYItE4Q0AFDcx7yhZrjzbnBTaQQAYFVNDADsYbikaPASQYK5KSDYw3JEEGY/dpUEEDOxjvjYKzuOYPFhtIIIMCKmhgB+O99eAsxgCy2UACGYz3NoIdHGDkxurCGCo2G0igr7y5Yt1hLBjcVNBAX4FzxfrDWDi4OYuxeHAzljPGO44FhFccrFhCuCmgggZ2cICzGAsKNxuIaopqimqKaopqsc7winMnVhpuzmKsNtxsIIEMCqhglIhTLpYcbkYJ/8SJBVLJBhIYJeIkiIVSmwoaiFOj49RY40NwjQ+LDSSQQZxyMT5sYp8N7LOBfTaxzyb22cQ+m9hnE/tsYp9NA6NaFJ4DnMlYUZVsIIEMCqiggR0cYFTzxolVVslYe3sFCWRQQAUN7OAAZzGWCW+iGqEaRbVY90sCKmhgBwc4i2tV8WIDCUQ1RjVGNUY1RjVGNUa1GDVarEKOUWOTQAajGgcVjGoS7OAAZ3FdYFiwgQQyKKCCBnZwgLMYo0ZbbCCBDAqoYLy3HpzFGCo2IzdOzxgqNhkUMHLjpI2hYrODA4wl4XFyxfrKzQYS6NXWqvMRy87X4nIFDezgAGcxRo3NBhLIIKpNVJuoNlFtolqMGmvleowamw0kkEEBFTSwg1HCT7lYeJaMEhokkEEBo4QFDezgAOvUELrABhLIoIAKGthB7DPGPmPsM8Y+Y+wzxj5j7DPGPmPss/XnCItRLQqvP0lYbCCBDAqooIEdHCCqKarFVUX8QUAsbktGtRkUUEEDvVqs6o9lbckGEsiggAoa+CZ3gLMY40P8qUAsdksSyKCAChrYwVEcKDFQYqDEQImBEgMlBkoMlBhvSsxiDArxxwuxEi5JIIMCKmhgBwc4k7E2LtlAAhkUMKpx0MAODnAWY3zYbCCBDAqIag3VYnzwZ9Mt1s8lo1r8+UyMD5sNJJBBARU0sIMDRDVGtRgq/Glzi7V1SQYFVNDADg5wFmOo2EQ1QTVBNUE1QTVBNUG1GCr8EXyL1XebMVRsNjCqjSCDUW0GFTSwg/EhHPssbkAW16XEYgMJZFBABQ3soFfzR/Ut1u1txgCy2UACGfRqcXcba/hI4kSM64fFGCo2IyzOyRgqNhkUUEEDOzjAWYyhYhPVJqpNVJuoNlEthgpZf2zWwQHOpMVQsdlAAhkUUEEDOzhAVGuoFkOFLwJosTQwyaCAChrYwQHOIqEEoUSMDzFRE8sEkwoaGCVGMErM4CzG+LDZQAIZFFBBAzuIaoxqgmqCaoJqMT742oSbAipoYAcHOIsxPmw2ECUUJRQlFCUUJRQlFCUMJQwlYlDYjGotKKCCBnZwgLMYg8JmAwlEtY5qHdU6qnVU66jWUS1GDV9L0WIZYpJABiOXgx0c4CzG+LDZQAIZjHchQQUN7OAAZzLWICYbSKCAChrYwQGiREOJhhINJWJQ2IxqGlTQwA4OcBbj+mGzgQRGrgUN7OAAZzFGgs0GEhjvogcFVNDADg5wFmMk2GwgSghKCEoISghKCEoISihKKErE5cFmVFt/SCygggZ2cICzuEaCxQYSiGqGaoZqhmqGaoZqhmod1dZIMIMEMiigggZ2cIBezRertFjtmGwggV7NF6K0WPGYVNDADg5wFmN82Gwggag2US3GB1/u0mIdZDKqcXCAMxlrIZMNJJBBARU0sIMDjGre/rEqMhnVNEgggwIqaGAHBziLMVRsohqhWlxK+IKaFisokwpGtR7s4ABnMQYQX9XSYiFlksCoNoMCKmhgXEpcwQF6tViAEisqkw0kkEEBPTeWpcRqyuQsxqgRK1RiQWWSQAYFVNDADg5wFg3VDNUM1QzVDNXWtynEaRSjxmYHBziLMWpsNpBABgVEtY5qHdU6qnVUi1EjlrDEcsskgQwKqKCBHRzgLE5Um6g2UW2i2kS1GDVijUusvkx2cIAzGSswkw0kkEEBFTQwqvXgAGcxRo3NBhLIoIAKGohqDdUaqhGqEaoRqhGqEaoRqhGqEaoRqhGqxagRC3xigWaSQAYFVLCDA5xFQQlBCUEJQQlBibjsiGU/sUgz2cEBzuIaQBYbSCCDKKEooSihKKEoYShhKGEoYSixRo1FrxZrk+b6FpbFDg5wFmPU2GwggQwKiGod1TqqdVTrqDZQbaBajBqxVCqWbyYFVDByKTiLMT5sNpBABgVUMN4FBzs4wLlJsXAz2UACGRTQwA5GCQnOYgwKmw0kkEEBFTSwg6jWUI1QjVCNUC0GBV/aRbFaM6mggVHNggOcxRgUNhtIIINRrQcVNLCDM75MjGKB5kJLUIITktCEJXpiJOLFD+f+AjK69leQ0bW/hIyu/TVkFMswFzRhiZ4YiTvb/vrru3f59W0//v75/Xv/9rY33+f2w5/vfvvp8/tPv7/7/tMfHz9+9+5/fvr4R/yP/vXbT59i+/tPn+9/vfvp/ae/39s78B8fPr53/fUdfvt6/Kvx9xnxy/dcZf26/ge/P/L3jU9+n676fXn0+/zf+/24KI7fvy95T35/5O/z1Q5+n/0xx/p9GSe/r1V/6qPfH0/2X291AO9JgpOEy1cMrIR7IHk5wY4SpE6D6/F+/NoE5aMEQ4KdvQYfS3fC5JcTjl5D/FnzSrh76+WEo3My/vxzJwi/nHC0H+KmdSXcl7VHr2HW+dDOjkU88t6vgeUsgZFwdCz4qnfB13g1oR0dTfbFAzvh8F28SZDrYJyVKz8nRejR7/vhehRwP2zMg3k/VuwnEb40JN+F8Hw5QuQsAh/5YvZyRG9nER0R4+xV6FXNoa29HnH4Ktgq4vC8UL4QMV6OeDzkPo9Q7IvD88JGtak9vpx5HnHhgvTwiJjgVSgdRjREnO3O7svb9oUZne2Lt9d2ZC9H8MkFrkgG6PVwvJEnL8Goxu774fh1EiGDM0KG6MsRevgqTCqi0+sR/SxiIGKevYpZH2Vyzz2+HEGHr0KoIh4PWc8jauy9I+T1iHkSodLyiKic7ovB9SpmO3oVV6vrk4v0LKLuofTJXdjziFnDRTsbL5TqEufm2RGhXm/knt86imAcVOaj8ULjj2/3vjg8qNypXkXns4iaIbkj5OWIcbYvpOapbtJZhCgi+PWIw2bvXBHjLAIXnaqHnfo2gs9OLa2rJFU7OyLaa8jRefZG/u2uqr0ecTIHqFZNdjSHqK1GmyfzRvJkEvKqDyGftj6J0F5XrDdfj1A5i7Aa/nu3lyNGO4sYiJhnr2LUlKYOaq9HHL4KqYF3SD+MuBAxXo54MrX6JMLia5DWPcCT5xTPI6bVbcR1dnaOuj3V8WS2/VnErOsbu85ehV11WXDf6x7uzotqd7brLEImjkh/OeLxJ8jzfVEXrXY/gjyKiD/y2OcFnx2Rt3eorC9HHE1QapfaEw8bpF1PJkmJ6uaSnkx5P83wtRI5XzB1nL2Oqy5O/Dn4N8g42x++kqjeyzUO9wfV7N58fHb9BxnzcH/UzbI/Dj/MeHuVId8gYx6c51bzSXb2+/V0yh5fo8RT5YfvQWsGhXT2swzcpNKTm9Svz5DD9xLfUrgynozB/0HG4f5oNZ1P7fF0/hf2x9vxi75BxsnFvNVTYJtPjsmzyRysSRA6zCCpjwO6ZwrPMrTmfknJXs94fH/2hYx6sEBq3yJDDzMwhurjKeAvHBep1yFq3+DY0uF7qYfTN0/36dtxkL5Bxkm/9Xow2/nx55ofuYf91utaQZ4843ie0eo8l/bkc/55hmlldP4GGeMwY9ajDmp0lHEPYdX3NtphxsyL+3s+tr+ecfpeei2ioNPzg3odF+qPp0CfZ8xeGbMf7o+Jz7fZz/YHX7Wgg6+mh69jCjLs9Qw6fS+C96J2mFHnOl/9NGO2ypjzLCO+P39lNL0OM2pygU/HD47vk82M+XrGODvHmGpcZ2qHr4PqsS+T6OsZ2g4zsD9onPU+45HUzcP3wrW84s6w1zNO+5bRt3zat9yxPwZ9g4zDfpE3a4Dl8L1Ifb6wHH6+sNTcJCsdnqdqda7rOOw5LOHhezLsMKOu1e+Hj4f7tF/1Xvrp+GFYH96v09cheB0yTjMaMubrGXo4fvR65Men10F3BiOjfYOMw/F0XNVz47RfxqjzdMzDc33UUuU77vD+5cICknadHRchLIUhpcOMN3Mfh+PpV86fPLun5Nyh/cl9mD9PejgLNCh7xcaTfnuWIUK1wEkeLyH5QgYWjMmT6/2vz+iHGXUfJnp9g4wnzwWeZ9Sj3TvOzjKU8DqezLs+zeD6nJQnS2K+kDHxXi57PeN0n+IzX3TwYQbmHKzN1zMer4t5noGFu/cV1eE+tfpsERuH7+XtnNTpe/m6ea1n42B9WI8nS6n9O88eJmj1W7fDDOO697k5zzKkFlPcV4btG2Qcvhd58/hKv0GGXYcZdU96x+lhRn/zKI4Pj22rVRlMh8eW6/rYWPX1jNN9qq0ylA/3B1bV3cPPfD2jH+4PrfsW09Nj++ZRqz1enPGFDEWGnWbUH0Vavw57vzdkcH89Qw73adda8NIfr8b9QsbEtel1+F7+7fqWv0HGybP8URfI4/F1enzP0OOEWtI16PH14NOM+zlv9cp88vdCzzOwfGf209dhjIx2mFFz6v265lHGfdlxVcaTz5bnGXVf3K95fYMMOcyoa4+bh/sDfxB9P4Lqhxm1/r03s8OMuse/p7MO3wvVWuWbh+8F8wT9yXz4FzI6MuZhBtf8zX15TIcZjMfPcnhccH3beRxmSF3rd6HDfpF6ftSf/ZHz12eMw4xaT39Pd8rrGafjh171Xp6sf/n6DD7cp1qfL/3JHwh8fUY/3Kf/di93fYMMO/nMr3vS+eSvYvv130y4ZwUNE4T9MIMUGXyYocjo12FGXQ3eE/J2ljFqhWofT0aO5xkDr2MeHpdZd8Z96tlxGVhSPq7HK3m+kFHfb3BfYPNhRq3QGu3wuIxWd6Sj0eF7abVibbTHK7q/kFErqQc9uap8mkH19/CDTo8L4bg8WSH6hYyvumN49pVN9ccX//+q42/3Tz/98uHzj2++BOzPvzzp84effv74fv/4jz8+/fLmX3//39/yX37+/OHjxw///PG3z7/+8v7vf3x+70n+b++u/Z8fyP8/hd+Xbv1v370j//m67zzugzLvnyX+/bruf1e9f9b4+e5LIvafzX/27yslbnL/3OPneyz09bb3z8N/5vuej3jw/fOMn8edf8933z+3eAHX/dF8/8dfgH/L3Q+x9vcuc/3tL98F/wc=", "file_map": { "50": { "source": "fn main(x: Field) {\n // The parameters to this function must come directly from witness values (inputs to main).\n regression_dynamic_slice_index(x - 1, x - 4);\n}\n\nfn regression_dynamic_slice_index(x: Field, y: Field) {\n let mut slice = &[];\n for i in 0..5 {\n slice = slice.push_back(i as Field);\n }\n assert(slice.len() == 5);\n\n dynamic_slice_index_set_if(slice, x, y);\n dynamic_slice_index_set_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_else(slice, x, y);\n dynamic_slice_index_set_nested_if_else_if(slice, x, y + 1);\n dynamic_slice_index_if(slice, x);\n dynamic_array_index_if([0, 1, 2, 3, 4], x);\n dynamic_slice_index_else(slice, x);\n\n dynamic_slice_merge_if(slice, x);\n dynamic_slice_merge_else(slice, x);\n dynamic_slice_merge_two_ifs(slice, x);\n dynamic_slice_merge_mutate_between_ifs(slice, x, y);\n dynamic_slice_merge_push_then_pop(slice, x, y);\n}\n\nfn dynamic_slice_index_set_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[3] == 2);\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_index_set_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 > 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice[x - 1] = slice[x];\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 0);\n}\n// This tests the case of missing a store instruction in the else branch\n// of merging slices\nfn dynamic_slice_index_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n } else {\n assert(slice[x] == 0);\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_array_index_if(mut array: [Field; 5], x: Field) {\n if x as u32 < 10 {\n assert(array[x] == 4);\n array[x] = array[x] - 2;\n } else {\n assert(array[x] == 0);\n }\n assert(array[4] == 2);\n}\n// This tests the case of missing a store instruction in the then branch\n// of merging slices\nfn dynamic_slice_index_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n }\n assert(slice[4] == 2);\n}\n\nfn dynamic_slice_merge_if(mut slice: [Field], x: Field) {\n if x as u32 < 10 {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n\n slice = slice.push_back(10);\n // Having an array set here checks whether we appropriately\n // handle a slice length that is not yet resolving to a constant\n // during flattening\n slice[x] = 10;\n assert(slice[slice.len() - 1] == 10);\n assert(slice.len() == 6);\n\n slice[x] = 20;\n slice[x] = slice[x] + 10;\n\n slice = slice.push_front(11);\n assert(slice[0] == 11);\n assert(slice.len() == 7);\n assert(slice[5] == 30);\n\n slice = slice.push_front(12);\n assert(slice[0] == 12);\n assert(slice.len() == 8);\n assert(slice[6] == 30);\n\n let (popped_slice, last_elem) = slice.pop_back();\n assert(last_elem == 10);\n assert(popped_slice.len() == 7);\n\n let (first_elem, rest_of_slice) = popped_slice.pop_front();\n assert(first_elem == 12);\n assert(rest_of_slice.len() == 6);\n\n slice = rest_of_slice.insert(x as u32 - 2, 20);\n assert(slice[2] == 20);\n assert(slice[6] == 30);\n assert(slice.len() == 7);\n\n let (removed_slice, removed_elem) = slice.remove(x as u32 - 1);\n // The deconstructed tuple assigns to the slice but is not seen outside of the if statement\n // without a direct assignment\n slice = removed_slice;\n\n assert(removed_elem == 1);\n assert(slice.len() == 6);\n } else {\n assert(slice[x] == 0);\n slice = slice.push_back(20);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 30);\n}\n\nfn dynamic_slice_merge_else(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_else(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 1);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[1] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n if y != 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 5 {\n // We should not hit this case\n assert(slice[x] == 22);\n } else {\n slice[x] = 10;\n slice = slice.push_back(15);\n assert(slice.len() == 6);\n }\n assert(slice[4] == 10);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 10);\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_index_set_nested_if_else_if(mut slice: [Field], x: Field, y: Field) {\n assert(slice[x] == 4);\n assert(slice[y] == 2);\n slice[y] = 0;\n assert(slice[x] == 4);\n assert(slice[2] == 0);\n if x as u32 < 10 {\n slice[x] = slice[x] - 2;\n // TODO: this panics as we have a load for the slice in flattening\n if y == 1 {\n slice[x] = slice[x] + 20;\n } else {\n if x == 4 {\n slice[x] = 5;\n }\n assert(slice[4] == 5);\n }\n } else {\n slice[x] = 0;\n }\n assert(slice[4] == 5);\n}\n\nfn dynamic_slice_merge_two_ifs(mut slice: [Field], x: Field) {\n if x as u32 > 10 {\n assert(slice[x] == 0);\n slice[x] = 2;\n } else {\n assert(slice[x] == 4);\n slice[x] = slice[x] - 2;\n slice = slice.push_back(10);\n }\n\n assert(slice.len() == 6);\n assert(slice[slice.len() - 1] == 10);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n assert(slice.len() == 7);\n assert(slice[slice.len() - 1] == 15);\n\n slice = slice.push_back(20);\n assert(slice.len() == 8);\n assert(slice[slice.len() - 1] == 20);\n}\n\nfn dynamic_slice_merge_mutate_between_ifs(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 50;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n } else {\n slice[x] = slice[x] - 2;\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 8);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n slice = slice.push_back(15);\n\n if x != 20 {\n slice = slice.push_back(50);\n }\n\n slice = slice.push_back(60);\n assert(slice.len() == 11);\n assert(slice[x] == 50);\n assert(slice[slice.len() - 4] == 30);\n assert(slice[slice.len() - 3] == 15);\n assert(slice[slice.len() - 2] == 50);\n assert(slice[slice.len() - 1] == 60);\n}\n\nfn dynamic_slice_merge_push_then_pop(mut slice: [Field], x: Field, y: Field) {\n if x != y {\n slice[x] = 5;\n slice = slice.push_back(y);\n slice = slice.push_back(x);\n assert(slice.len() == 7);\n\n let (popped_slice, elem) = slice.pop_back();\n assert(slice.len() == 7);\n assert(elem == x);\n slice = popped_slice;\n } else {\n slice = slice.push_back(x);\n }\n\n slice = slice.push_back(30);\n assert(slice.len() == 7);\n\n if x == 20 {\n slice = slice.push_back(20);\n }\n\n let (slice, elem) = slice.pop_back();\n assert(elem == 30);\n\n let (_, elem) = slice.pop_back();\n assert(elem == y);\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 866cb19af4e..d34d9ad079b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -46,8 +46,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/81Zy64jNRB1ku4kncwlYS6v4TV7Vt15z+5KzIMNG9ixy00miD9AYtOCDXwAEh+AhNgg8QMsEBt2SCAh8TXYGdf0yenqzp0ZWxpLJbftcr1cVa44HfOk3bXQ8d+J72WMTeaufJ+/WCsC0so7IONd+O5a6Hm9Ugt9CwMLQwuZhZGFsYVbFi4svGJhYmFq4VULty1cWnjNwusW3rDwpoW3LNyx8LaFdyy8a+E9C+8Df9WIL41wIN9/vs9834V1J9+VH+cv1oqM+Iakv8lXm8yctsDyzzM4t1j2EZoR6OcDT+ejsqLPurh24cfov7LH+ealqb7vwH6kZzw9piPrMXXd5It7Qj+JQN8e1eFCdCzrtpS1pDzljWsprCVgzy/JPjF8De0Tx9eKw6Vp9i+J0w/LGLzzXOjfB/rGhM9jD+LI/5T+wyj0i8dC/1Ec+gd3Zzlf/gbOO14s5kvJV6mpN1nrA2+8f7j1aMzx+R3QZTzmibHVb7FFJ5wtcs0WHeKNtgh3DrNcs2uP5pD/iGQNHUcd4ifysH34ThpEkac4dIg+yjNQ7CNnOVTWhJbEcgq0EH8AOiI+fst+nMt9P1Vosu8OTV0fnBP7Otk/IN0SwOs09EKX57okI8qVEh+sS+TecfIszakusg/tiXslZ6aE/4WpaG7898TU78CkgZ85w09o9RQdM1OPo3A5Zb7jOEqAhyZP1zTnP5Svf0b3h6R7qtDTclo43WcFxyzqrsnTVdYGLbpjXLWdbaQ6bd+Wk7TabdKin1azhjuLKn/2zpyF8O+26IHy9ZSz6Cv0UsL/2PcO99MWGxgT7n7XbMByuna/1GX+hOSMdPfmt4GuIV5or7YcqeU8vqsj1ZQ5+1ViqrhgnsbocY+5ne+Lz3zvfO572MM+2lPm+N5r+o0V8XxXXFdjkzWsaTgeDOmIDeV29vkB6DIe80RfGTTQTBXcDq0J7ue+j1s76/HCdSCuiT3dby0tJ3OdoeV3zacEX6vptPOcKHYZgtzH/WW1hveaawmshfwt4mT4DeRgG6TlzfXV7JMp+EPFPlPCZ1txntDqoAflKS082wHpiHJivsU617VBecrz2MOc2EfOcIj4tJbBWlKe8hn5seRPpiVypIT/tR9PfN+HPbJ/qvDvE/8TuZU5zkuZgp8p+M6mX/lvF4Mx/Xm9qf7gENunpp43kX9K+N/68Yj0FX+6ek45D+ttcZhvD9vldr9f7Lacx9BmTe9CUd7TiyfvgBwvxoTL2XznII+49+/N31qexpWp33kx3lq0XKbdM3Hv0+Lg/h+TfKndm3w2KIf4i3bvii5jEz6Wtuv5Zjdb7NbXy/l2vnqmWGrzxZv4CtLmuDEmnJ9MTd0P2d4h3oQ4/gLqkLe9N0XjW1T5pukt60eQB336pm9Zgv+zqWj+5L8nph4Loj/WoFoccQ2K54//cTTVoH3T/j6UEv4vvnfjfxpook2wznvUQPNXoPkv0dRqQc0nZX6k4GN9KPJMTL2uHNE+tCnWsNpezg34f38bLbYRn7PQaatPeV9XkS8lOr0Gfjg2pr1m1upi2Ysxo9WZ+LvFNalVsZZFfHwnQvzfgd8fppLriFvW+Tm8v1vwnjUnJuXpnFbjYu0v+MJ7VNZllLUxrKXE55Yfo72QlsiREv5ffixngvW67J8q/IfE/0RuZY5r/7GCP1bw3fn8KfR8j7qHrquOPIk+zrFs4jsxapTZZrO6N7vOF+v97rBfzM/VKKH575ar691iuc0fF0dxzvH/HzzsouXlJgAA", - "debug_symbols": "pZbdbuIwEIXfJddceOzxH69SoYrStIoUBZTCSquKd9+ZzEygK7FamRu+Y8g5GTvj4O/uvX+7fL4O08fxq9u+fHdv8zCOw+freDzsz8Nxom+/O8cfPnVb2HQ+C4qgLghOAAIvCN3WE1AQBUmQBUVQF6ATgMALJAUlBSUFJQUlBSUFJSVKSiRfINCVSKArI6EI6Mq06ZITgIDulwlBQPcrhChIAkqpBJ67I1ZhdkqePk08e2VQUhZQSZmXjmrKRVmFxSlBGZSojMqk1JyiOUVzquZUzalcB02+BiUqozIps7IoOY+WCZwzASa8ibgsLzjOSCyyiWKiLksP4JSg9MqgRGVUJmUWcpNAYVFVcKOIABPeRDCBJqKJpIJbAyoLNBFNJBPcWo5FMVFVcNuI4J4EFnyxZ1H1G24Jz+vDPSHCmwgm0EQ0kUxwIM+dW0VEVcHN4vkJcLeI4GRecO4bn1mgiaiFceuIWEq9Xjed7fDX89z3vMHvtjy9CE77uZ/O3Xa6jOOm+7UfL8tFX6f9tPC8n+lXWoZ+eidS4Mcw9qyum5vbPbYCz3QxQ0irPf6/P4H5k2/xl2j+klv8tajfu5b6fVj9mJ/zx9Dij6s/5ef8uen+Ia9+bPHn9f5Nz+/OX5+sv7bUH/gvYfEHaKk/rPcP2T3pjy3zd9Xm71v2X6rONnCqdysA5UcC5McRxSNqRPF3L4G/Iv61iZ2v62uEdFtGgLpmBO/aMjDcMhCbMhDKmoE+ttWR062O0prh7jLS8xm1sY50ey7oGp9LfJyxo9H+MMw/TstXTpuH/dvY6/DjMh3ufj3/Ptkvdto+zcdD/36Ze066Hbnp4wWq23iAHZ2SeUQHDwhux8crHgagYeIhnQZePL1SPODuyqX9AQ==", + "bytecode": "H4sIAAAAAAAA/81Zy64jNRB1ku4kncwlYS6v4TV7Vt15z+5KzIMNG9ixy00miD9AYtOCDXwAEh+AhNgg8QMsEBt2SCAh8TXYGdfk9Onqzp0ZWxpLJXfb5VMPu8qVTsc8aXctdfxz4nt5xyZjV77PX6wVAbHyDuh4F567lnrertRS39LA0tBSZmlkaWzplqULS69YmliaWnrV0m1Ll5Zes/S6pTcsvWnpLUt3LL1t6R1L71p6z9L7IF914kujHOj3n+8z33dh3ul35d/zF2tFRnJD4m/y1SYz1RZY/3kG+xbLP4IZAT8feJyPyhM+2+LahX/H8ytr3Nm8NKfnO7Ae8YzHYxyZj2nrJl/cE/wkAr7dqsOF2FjWfSlzSVmVjXMpzCXgzy/JPzHOGvonzlkrDpem+XxJnH5YxpCd54J/H/CNCZ/HHsTR/yn+wyj4xWPBfxQH/+DuLHeWv4H9jheL+VLyVWrqTeb6IBvvH249euf4/A5wmY9lYmz1W3zRCeeLXPNFh2SjL8LtwyzX/NqjMZQ/Il1Dx1GH5Ik+7B++kwZR9CkOHcJHfQaKf2Qvh8qcYEksp4CF/AOwEfnxWdbjWO77qYLJZ3do6vbgmPjX6f4B2ZYAX6ehF1we65KOqFdKcrAukXvH6bM0VVtkHfoT10rOTIn/C3PC3PjnianfgUmDPHNGnmD1FBszU4+jcDllvuM4SkCGpk/XNOc/1K9/xvaHZHuq4Gk5LZzts4JjFm3X9Okqc4MW2zGu2vY2Up22b8tJWu02abFPq1nD7cUpf/bO7IXI77bYgfr1lL3oK3gp8X/se8f7aYsPjAl3v2s+YD1du1/qOn9Ceka6e/PbgGtIFvqrLUdqOY/v6kg1Zc7nKjGnuGCZxuhxj7md74vPfO/O3Pewhs9oTxnje6/pN1bE/V1xXY1N5rCm4XgwZCM21Nv55wfAZT6WiWdl0ICZKrwdmhPez30ft3bW44XrQJwTf45N+32qnZu2nK/lvbacP1HWJaD3Ebus2yR1ZgJzIX+LuHPzG+jB9qZl1RdaDYv87LtM4cf7g2MU626u087VgA/KKhbmnwHZ2FXkcJ3r2qCsyjz2MCb+kT0cIj/NZTCXlFU5I/8u+ZOxRI+U+L/27xPf92GNrJ8q8vskv6K3MsZ5KVP4M4Xf+fQr/+xiMOZ5Xm9Of3CI71NTz5soPyX+b/37iOyV83T1nHoe1tviMN8etsvtfr/YbTmPoc+avgtF+Z5ePPkOyPFiTLiczXcOyoh7/978W8vTuDL1Oy/GtxYtl2l3UNz7tDi4/8ckX2r3Ju9N0/3F68WWsQkfS9v1fLObLXbr6+V8O189Uyy1ncWbnBXE5rgxJtw5mZr6OWR/h/gmxPEX0Ia87XtTNLnFKd80fcv6EfTBM33Tb1nC/7M5Yf7knyemHgti/9i014Fcb+L+438cXGMNQY+270Mp8f/ie/f+TwMm+gTrvEcNmL8C5r+EqdWC2pmU8ZHCj/Uh19ZYV45oHfoUa1htLecG/L+/DYt9xPssOG31Ka/rKvqlhNNrkIfvxrTXzFpdLGsxZrQ6E3+3uCa1KtayyI/fiZD/d5D3hznpdeQt6/Ic398tfM+aE5OyOqbVuFj7C7/IHpV1HWVuDHMpybnl39FfiCV6pMT/l3+XPcF6XdZPFflDkl/RWxnj2n+s8I8Vfrc/fwqe79H20HXVUSbh4xjrJmcnRo0y22xW92bX+WK93x32i/m5GiW0/N1ydb1bLLf54+Kozjn5/wOPFf/W5SYAAA==", + "debug_symbols": "pZbdbuIwEIXfJddceOzxH69SoYrStIoUBZTCSquKd9+ZzEygK7FamRu+Y8g5GTvj4O/uvX+7fL4O08fxq9u+fHdv8zCOw+freDzsz8Nxom+/O8cfPnVb2HQ+C4qgLghOAAIvCN3WE1AQBUmQBUVQF6ATgMALJAUlBSUFJQUlBSUFJSVKSiRfINCVSKArI6EI6Mq06ZITgIDulwlBQPcrhChIAkqpBJ67I1ZhdkqePk08e2VQUhZQSZmXjmrKRVmFxSlBGZSojMqk1JyiOUVzquZUzalcB02+BiUqozIps7IoOY+WCZwzASa8Cc5ILJKJbKKYqMvaAzglKL0yKFEZlUmZhdwlUFhUFdwpIsCENxFMoIloIqng3oDKAk1EE8kE95ZjUUxUFdw3IrgpgQVf7FlU/YZ7wgcWYMKbCCbQRDSRTHAgz517RURVwd3i+RFwu4jgZF5wbhyfWaCJqIVx74hYSr1eN51t8dfz3Pe8w+/2PL0JTvu5n87ddrqM46b7tR8vy0Vfp/208Lyf6Vdahn56J1LgxzD2rK6bm9s9tgLPdDFDSKs9/r8/gfmTb/GXaP6SW/y1qN+7lvp9WP2Yn/PH0OKPqz/l5/y56f4hr35s8ef1/k3P785fn6y/ttQf+D9h8QdoqT+s9w/ZPemPLfN31ebvW/Zfqs42cKp3KwDlRwLkxxHFI2pE8Xcvgb8i/rWJna/ra4R0W0aAumYE79oyMNwyEJsyEMqagT621ZHTrY7SmuHuMtLzGbWxjnR7Lugan0t8nLGj0f4wzD+Oy1dOm4f929jr8OMyHe5+Pf8+2S923D7Nx0P/fpl7TrqduenjBarbeIAdHZN5RAcPCG7HxyseBqBh4iGdBl48vVI84O7Kpf0B", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_0.snap index 0eaf035cc3a..a990dca773e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_0.snap @@ -46,8 +46,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/81ZO48jRRDusWdsz4y9NrfH+3EhEVKPH2uTOSAngYzEa58lJBJEgkTikH+ARAYJSEhIBIiEDAn+Ft1LF/vN55rZkzy9upZKPd1dXfXVo192Yv4rzxwl4TsNtbSxSN821PayUnUoyyaA8Rl89xz1g12Zo4GjoaORo9xR4ah0NHY0cXTlaOpo5ugVR08cXTt66uhVR685et3RG47edPSWo7cdvePoXUfvgX7ViS8NOMD3T6jzUPdg3OPbhra9rFQ56e1S/sbeLHNTLx3jX+QQt1j+EZkR5NthkPPR6V4+2+LLJLQxf2WOz81rc//9FOajPBPksRwZj2nrxi5XIj+NIN+F6jgRG0/nvpSx9FTXjWMZjKXgz+/IPzFyDf0TJ9eq47Vpzq8y2Poj2RoFS2WtyM9AvjHdrasJxRF1iO5BDNvsvHbwSelTH+ovTMx1YauE9Ake9g/vA8MoeKqjPydnpr4Pca5hbBBHRhhxTmK6z58M/POy508WBU97/qB/Hit/EpKPeIaKfySWI2VMZMk9JQNZyD8EG5Efv2U+9n0Q6pkik3N3ZM7twT7xr8f+PtnWB76koTbmPI9Q7kzBxestUo7ZuGuqOsbNSVtJHHqK77xNK+jHuGK+4dwBjCP/tyBzE76npvlcb8stTZ/IwrNI5ubmPIe723MXe16LKejQ8PSUMVyLGt4Oc+q5YCse8O2IfIt7R0FYiyi+nf+/h5eKbzU82j5Xgp1sO/pYi0fku/8hUTBqsUhbYlES1h7Zuu0G65FzuikWor/XYgfiwzeL9BeKPM0+Y7rbCzPC83Go/R7zKWFI42Cw2l5iFJ3iAz63PyGc6Mcuz70nZD/qQn9p+dqnMcTI666MhF/8PAY/9xWdvK+MYUy+DcRB+j4Ltc/pn2FO076LfXyv0fa5iTIvaahFD/fxukJ7tqG2l5VqZs5jPCYbxh3aMOneBjsz57GfxNZbnf8WwHezz6Efx/BuhnP5bib8X4HML8K3djfjOKUkj88dHBPeL03db7Hu5dr+lJFtCen2pYTxTLGdz2uZy/e1lPivQntg9NiMyF/C/3Wo/fgvDTIx3ohr0CDzG5D5K8mcmvsiMvFuyjGeKfxT4BE8U8KAczXsVyBXm8v73hTwtcnCMWlnihxtzTfN6yn4JiSnaNCHbV+03JC334vuB+Kvtjd70aJTbEJ+7X6q3dHa7qfa79z4RvMlPdUxb0O/vajMrdfzG+BgH2SnF7dX889Y4S8V/2h5lZOsh968Q5KFseX7gfae43e9L8NTXeddDX3iH4nhCPlpLIex9FTXU4S23LdYluDIiP+H0Jb1OYA5Mn+m6B+Q/hpupY/fFrnCnyv83qffh28f95j5vN7c/0ktvs9M/bc0Q/oz4v8ptHENS51egPO43lXHxe64W+0Oh+V+x+cw+qyMoH+3Xmz28+V+fbta7BY3j65/vtncfDi/tcv1YX88LBePrX+/urndL1c7+7y6g/OQfm094f7si6xJXLPIj29R5P9deB39Eb75P0vU5/n+buFLGuo7GUpfeqr3aWsZ9zjhF93F6RyjjJUwhmeHL+PQRn+hLMGREf9foS0xwX1J5s8U/SPSX8Ot9PEeVyr8pcLv4/OnyAs12t71fzd3Okk+9jE2yR2f1/8CLzVTLpEkAAA=", - "debug_symbols": "rZbfjqowEIffhWsuOv037b7KxmxYFzckBA2rJzkxvvuZYaaoF5pNPTd+vwLzUUqLPTdf/efp+2OYdvuf5u393HzOwzgO3x/jftsdh/1ER8+N4R8LzZtrG2sFTuAFQRAFKEiCvMCRxBNAYAVO4AVBEAUoSIK8wIvFi8WLxYvFi8WLxYvFiyXQJYFAByOBDiIhCUid2iYaAQhInQlO4AWkBkOMSlSSCIBIJrBtg0YJSpIBjQE6pVeyj3qHXEfdS0YJSqt0yqCMSlQmpXqyerJ6snqyejLfn548B2VUopJ9NAg5C8GYEqAELs0c6FprONDFlgYBwJQAJdgSXAmlHOjW1nLAElIJWYM1JUAJtgQWOg6+hFACmz0HLIHNgQObaR4AT0oJoE/BE1OCKyEuUwd4PlrkkErIGnhWsoWn5UKrdEqvDMqoRCUZ4+XSNmXVfRznvudFd7MMaXEeurmfjs3bdBrHtvnTjaflop9DNy08djOdpU730xeRhLth7Dld2mu1eVwKPHJLMT32Wh7u6+FxfcwGVBAz4GqAdGewjw3Jeq+GZKN9ZHj2DLF0AW7qw+/HIIVSn7CmPiettyZW1Fu31nt8rT64mvqw1kd8rR6r7u9wrfc19bjev+r93dTnF/ufa/rv+B9jqXdQ03+33t+hebiG45MJbGxelxDlh4vwucTx910lzppKiXdXifd1Eg9plXgbKr4pt2Ma6sbUYbw+SQqVw4HmRhL/gyTX9iRe3643tW83/ErybLGZYrD2/mO/oVa3Hea7neyFTfPQfY69NnenaXtz9vj3UM6UnfBh3m/7r9Pcs+m6Haafd0Bs6XO/oe0ptwK09Oez4b0QN6OlJnITlmvpLLrNhbv2Dw==", + "bytecode": "H4sIAAAAAAAA/81ZOY8rRRDusWdsj8dem7eP+3ghEVKPj7XJHJCTQEbitd9ISCSIBIlkQv4BEhkkICEhESASMiT4W3QvXew3n2u8evL06rVU6qu66qujj7ET81955igJ7TTU0sciY7tQ28tK2aEsmwDGZ9DuOeoHuzJHA0dDRyNHuaOxo8LRxNHU0ZWjmaO5o1ccPXF07eipo1cdvebodUdvOHrT0VuO3nb0jqN3Hb0H+lUnvjTgAN8/oc5D3YN5j28X+vayUuakt0v5W3uzyk2zdIx/mUPcYvlHZEaQb4dBzkf1vXy2xZdp6GP+yhqfm9fmvv0U1qM8E+SxHJmPaevWrtYiP40g34WqmoqN9akvZS6tm7pxLoO5FPz5HfknRq6hf+LkWlldm/b8KoKtP5KtUbCU1or8DOQb092+mlIcUYfoHsSwzS4aF5+UPo2h/rGJuS9smZA+wcP+4XNgGAVPWfl7cm6a5xDnGsYGcWSEEdckpvv8ycA/L3v+ZFHwnM8f9M9j5U9C8hHPUPGPxHKkzIkseadkIAv5h2Aj8mNb1uPYB6GeKzI5d0fm1B4cE/967O+TbX3gS1pqY07zCOXOFVy83yLlmI27p8oqbk7aUuLQU3znbVrDOMYV8w3XDmAe+b8FmdvQnpn2e/1cbmn6RBbeRbI2N6c53N2ZuzzwXkxBh4anp8zhXtTwdphTzwXb+AHfjsi3eHaMCes4im8X/5/hheJbDY92zhVgJ9uOPtbiEfntf0wUjFos0jOxKAhrj2zddYO14pxui4Xo752xA/HhN4uMjxV5mn3GdHcWZoTn41D7M+ZTwpDGwWC1s8QoOsUHfG9/QjjRj13ee0/IftSF/tLytU9ziJH3XREJv/h5An7uKzr5XJnAnLQNxEHGPgu1z+mfYU3buYtj/K7Rzrmpsi5pqUUPj/G+Qnt2obaXlXJuTmM8IRsmHdow7d4GOzensZ/G1lue/hbAb7PPYRzn8G2Ga/ltJvxfgcwvQlt7m3GcUpLH9w7OCe+Xpum3WO9y7XzKyLaEdPtSwHym2M73tazl91pK/FehPzB6bEbkL+H/OtR+/pcWmRhvxDVokfkNyPyVZM7MfRGZ+DblGM8V/hnwCJ4ZYcC1GvYrkKut5XNvBvjOycI56WeKHG3Pt63rKfimJGfcog/7vmi5Id9+L3oe5GfkCm7k1+4l7V0n8dDea+fue+13brzvfUnr5rpdGLcXlYX1WH8DHGxvVjd9ob3HtTua3xHIjznIdzrmFX+XPvTNOyRZeC/y+0D7nuPvel+GdVPnXQ1j4h+J4Qj5aS6HubRu6hmHvry3WJbgyIj/h9CX/TmANbJ+rugfkP4GbmWMvy1yhT9X+L1Pvw9tH/eY+bzZ3v9JLb7PTPO3NEP6M+L/KfTxXJI6vQBntdmX1XJf7df743F12PM9jD4rIujfb5bbw2J12Nyul/vlzaPrX2y3Nx8ubu1qczxUx9XysfUf1je3h9V6b5+Xd3Ae0q/tJzyffZE9iXsW+fFbFPl/F15Hf4Q2/2eJ+jzf32f4kpb6ToYyltbNMW0v4xkn/KJ7XJ9ilLkC5vDu8GUS+ugvlCU4MuL/K/QlJnguyfq5on9E+hu4lTE+4wqFv1D4fXz+FHmhRtu7/u/mTifJxzHGJrnj8/pfp4JXGJEkAAA=", + "debug_symbols": "rZbfjqowEIffhWsuOv037b7KxmxYFzckBA2rJzkxvvuZYaaoF5pNPTd+vwLzUUqLPTdf/efp+2OYdvuf5u393HzOwzgO3x/jftsdh/1ER8+N4R8LzZtrG2sFTuAFQRAFKEiCvMCRxBNAYAVO4AVBEAUoSIK8wIvFi8WLxYvFi8WLxYvFiyXQJYFAByOBDiIhCUid2iYaAQhInQlO4AWkBkOMSlSSCIBIJrBtg0YJSpIBjQE6pVeyj3qHXEfdS0YJSqt0yqCMSlQmpXqyerJ6snqyejLfn548B2VUopJ9NAg5C8GYEqAELs0c6FprONDFlgYBwJQAJdgSXAmlHOjW1nLAElIJWYM1JUAJtgQWOg6+hFACmz0HLIHNgQObaR4AT0oJoE/BE1OCK4E9yAFLSCVkDTwtWcPzcqFVOqVXBmVUopKM8XJpm7LsPo5z3/Oqu1mHtDoP3dxPx+ZtOo1j2/zpxtNy0c+hmxYeu5nOUq/76YtIwt0w9pwu7bXaPC4FHrqlmJ57LQ/39fC4PmYDKogZcDVAujPYx4ZkvVdDstE+Mjx7hli6ADf14fdjkEKpT1hTn5PWWxMr6q1b6z2+Vh9cTX1Y6yO+Vo9V93e41vuaelzvX/X+burzi/3PNf13/Jex1Duo6b9b7+/QPFzD8ckENjavS4jyw0X4XOL4A68SZ02lxLurxPs6iYe0SrwNFd+U2zENdWPqMF6fJIXK4UBzI4n/QZJrexKvb9eb2rcbfiV5tthMMVh7/7HfUKvbDvPdVvbCpnnoPsdem7vTtL05e/x7KGfKVvgw77f912nu2XTdD9PPOyC29Lnf0P6UWwFa+vPZ8GaIm9FSE7kJy7V0Ft3mwl37Bw==", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 0eaf035cc3a..a990dca773e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/to_be_bytes/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -46,8 +46,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/81ZO48jRRDusWdsz4y9NrfH+3EhEVKPH2uTOSAngYzEa58lJBJEgkTikH+ARAYJSEhIBIiEDAn+Ft1LF/vN55rZkzy9upZKPd1dXfXVo192Yv4rzxwl4TsNtbSxSN821PayUnUoyyaA8Rl89xz1g12Zo4GjoaORo9xR4ah0NHY0cXTlaOpo5ugVR08cXTt66uhVR685et3RG47edPSWo7cdvePoXUfvgX7ViS8NOMD3T6jzUPdg3OPbhra9rFQ56e1S/sbeLHNTLx3jX+QQt1j+EZkR5NthkPPR6V4+2+LLJLQxf2WOz81rc//9FOajPBPksRwZj2nrxi5XIj+NIN+F6jgRG0/nvpSx9FTXjWMZjKXgz+/IPzFyDf0TJ9eq47Vpzq8y2Poj2RoFS2WtyM9AvjHdrasJxRF1iO5BDNvsvHbwSelTH+ovTMx1YauE9Ake9g/vA8MoeKqjPydnpr4Pca5hbBBHRhhxTmK6z58M/POy508WBU97/qB/Hit/EpKPeIaKfySWI2VMZMk9JQNZyD8EG5Efv2U+9n0Q6pkik3N3ZM7twT7xr8f+PtnWB76koTbmPI9Q7kzBxestUo7ZuGuqOsbNSVtJHHqK77xNK+jHuGK+4dwBjCP/tyBzE76npvlcb8stTZ/IwrNI5ubmPIe723MXe16LKejQ8PSUMVyLGt4Oc+q5YCse8O2IfIt7R0FYiyi+nf+/h5eKbzU82j5Xgp1sO/pYi0fku/8hUTBqsUhbYlES1h7Zuu0G65FzuikWor/XYgfiwzeL9BeKPM0+Y7rbCzPC83Go/R7zKWFI42Cw2l5iFJ3iAz63PyGc6Mcuz70nZD/qQn9p+dqnMcTI666MhF/8PAY/9xWdvK+MYUy+DcRB+j4Ltc/pn2FO076LfXyv0fa5iTIvaahFD/fxukJ7tqG2l5VqZs5jPCYbxh3aMOneBjsz57GfxNZbnf8WwHezz6Efx/BuhnP5bib8X4HML8K3djfjOKUkj88dHBPeL03db7Hu5dr+lJFtCen2pYTxTLGdz2uZy/e1lPivQntg9NiMyF/C/3Wo/fgvDTIx3ohr0CDzG5D5K8mcmvsiMvFuyjGeKfxT4BE8U8KAczXsVyBXm8v73hTwtcnCMWlnihxtzTfN6yn4JiSnaNCHbV+03JC334vuB+Kvtjd70aJTbEJ+7X6q3dHa7qfa79z4RvMlPdUxb0O/vajMrdfzG+BgH2SnF7dX889Y4S8V/2h5lZOsh968Q5KFseX7gfae43e9L8NTXeddDX3iH4nhCPlpLIex9FTXU4S23LdYluDIiP+H0Jb1OYA5Mn+m6B+Q/hpupY/fFrnCnyv83qffh28f95j5vN7c/0ktvs9M/bc0Q/oz4v8ptHENS51egPO43lXHxe64W+0Oh+V+x+cw+qyMoH+3Xmz28+V+fbta7BY3j65/vtncfDi/tcv1YX88LBePrX+/urndL1c7+7y6g/OQfm094f7si6xJXLPIj29R5P9deB39Eb75P0vU5/n+buFLGuo7GUpfeqr3aWsZ9zjhF93F6RyjjJUwhmeHL+PQRn+hLMGREf9foS0xwX1J5s8U/SPSX8Ot9PEeVyr8pcLv4/OnyAs12t71fzd3Okk+9jE2yR2f1/8CLzVTLpEkAAA=", - "debug_symbols": "rZbfjqowEIffhWsuOv037b7KxmxYFzckBA2rJzkxvvuZYaaoF5pNPTd+vwLzUUqLPTdf/efp+2OYdvuf5u393HzOwzgO3x/jftsdh/1ER8+N4R8LzZtrG2sFTuAFQRAFKEiCvMCRxBNAYAVO4AVBEAUoSIK8wIvFi8WLxYvFi8WLxYvFiyXQJYFAByOBDiIhCUid2iYaAQhInQlO4AWkBkOMSlSSCIBIJrBtg0YJSpIBjQE6pVeyj3qHXEfdS0YJSqt0yqCMSlQmpXqyerJ6snqyejLfn548B2VUopJ9NAg5C8GYEqAELs0c6FprONDFlgYBwJQAJdgSXAmlHOjW1nLAElIJWYM1JUAJtgQWOg6+hFACmz0HLIHNgQObaR4AT0oJoE/BE1OCKyEuUwd4PlrkkErIGnhWsoWn5UKrdEqvDMqoRCUZ4+XSNmXVfRznvudFd7MMaXEeurmfjs3bdBrHtvnTjaflop9DNy08djOdpU730xeRhLth7Dld2mu1eVwKPHJLMT32Wh7u6+FxfcwGVBAz4GqAdGewjw3Jeq+GZKN9ZHj2DLF0AW7qw+/HIIVSn7CmPiettyZW1Fu31nt8rT64mvqw1kd8rR6r7u9wrfc19bjev+r93dTnF/ufa/rv+B9jqXdQ03+33t+hebiG45MJbGxelxDlh4vwucTx910lzppKiXdXifd1Eg9plXgbKr4pt2Ma6sbUYbw+SQqVw4HmRhL/gyTX9iRe3643tW83/ErybLGZYrD2/mO/oVa3Hea7neyFTfPQfY69NnenaXtz9vj3UM6UnfBh3m/7r9Pcs+m6Haafd0Bs6XO/oe0ptwK09Oez4b0QN6OlJnITlmvpLLrNhbv2Dw==", + "bytecode": "H4sIAAAAAAAA/81ZOY8rRRDusWdsj8dem7eP+3ghEVKPj7XJHJCTQEbitd9ISCSIBIlkQv4BEhkkICEhESASMiT4W3QvXew3n2u8evL06rVU6qu66qujj7ET81955igJ7TTU0sciY7tQ28tK2aEsmwDGZ9DuOeoHuzJHA0dDRyNHuaOxo8LRxNHU0ZWjmaO5o1ccPXF07eipo1cdvebodUdvOHrT0VuO3nb0jqN3Hb0H+lUnvjTgAN8/oc5D3YN5j28X+vayUuakt0v5W3uzyk2zdIx/mUPcYvlHZEaQb4dBzkf1vXy2xZdp6GP+yhqfm9fmvv0U1qM8E+SxHJmPaevWrtYiP40g34WqmoqN9akvZS6tm7pxLoO5FPz5HfknRq6hf+LkWlldm/b8KoKtP5KtUbCU1or8DOQb092+mlIcUYfoHsSwzS4aF5+UPo2h/rGJuS9smZA+wcP+4XNgGAVPWfl7cm6a5xDnGsYGcWSEEdckpvv8ycA/L3v+ZFHwnM8f9M9j5U9C8hHPUPGPxHKkzIkseadkIAv5h2Aj8mNb1uPYB6GeKzI5d0fm1B4cE/967O+TbX3gS1pqY07zCOXOFVy83yLlmI27p8oqbk7aUuLQU3znbVrDOMYV8w3XDmAe+b8FmdvQnpn2e/1cbmn6RBbeRbI2N6c53N2ZuzzwXkxBh4anp8zhXtTwdphTzwXb+AHfjsi3eHaMCes4im8X/5/hheJbDY92zhVgJ9uOPtbiEfntf0wUjFos0jOxKAhrj2zddYO14pxui4Xo752xA/HhN4uMjxV5mn3GdHcWZoTn41D7M+ZTwpDGwWC1s8QoOsUHfG9/QjjRj13ee0/IftSF/tLytU9ziJH3XREJv/h5An7uKzr5XJnAnLQNxEHGPgu1z+mfYU3buYtj/K7Rzrmpsi5pqUUPj/G+Qnt2obaXlXJuTmM8IRsmHdow7d4GOzensZ/G1lue/hbAb7PPYRzn8G2Ga/ltJvxfgcwvQlt7m3GcUpLH9w7OCe+Xpum3WO9y7XzKyLaEdPtSwHym2M73tazl91pK/FehPzB6bEbkL+H/OtR+/pcWmRhvxDVokfkNyPyVZM7MfRGZ+DblGM8V/hnwCJ4ZYcC1GvYrkKut5XNvBvjOycI56WeKHG3Pt63rKfimJGfcog/7vmi5Id9+L3oe5GfkCm7k1+4l7V0n8dDea+fue+13brzvfUnr5rpdGLcXlYX1WH8DHGxvVjd9ob3HtTua3xHIjznIdzrmFX+XPvTNOyRZeC/y+0D7nuPvel+GdVPnXQ1j4h+J4Qj5aS6HubRu6hmHvry3WJbgyIj/h9CX/TmANbJ+rugfkP4GbmWMvy1yhT9X+L1Pvw9tH/eY+bzZ3v9JLb7PTPO3NEP6M+L/KfTxXJI6vQBntdmX1XJf7df743F12PM9jD4rIujfb5bbw2J12Nyul/vlzaPrX2y3Nx8ubu1qczxUx9XysfUf1je3h9V6b5+Xd3Ae0q/tJzyffZE9iXsW+fFbFPl/F15Hf4Q2/2eJ+jzf32f4kpb6ToYyltbNMW0v4xkn/KJ7XJ9ilLkC5vDu8GUS+ugvlCU4MuL/K/QlJnguyfq5on9E+hu4lTE+4wqFv1D4fXz+FHmhRtu7/u/mTifJxzHGJrnj8/pfp4JXGJEkAAA=", + "debug_symbols": "rZbfjqowEIffhWsuOv037b7KxmxYFzckBA2rJzkxvvuZYaaoF5pNPTd+vwLzUUqLPTdf/efp+2OYdvuf5u393HzOwzgO3x/jftsdh/1ER8+N4R8LzZtrG2sFTuAFQRAFKEiCvMCRxBNAYAVO4AVBEAUoSIK8wIvFi8WLxYvFi8WLxYvFiyXQJYFAByOBDiIhCUid2iYaAQhInQlO4AWkBkOMSlSSCIBIJrBtg0YJSpIBjQE6pVeyj3qHXEfdS0YJSqt0yqCMSlQmpXqyerJ6snqyejLfn548B2VUopJ9NAg5C8GYEqAELs0c6FprONDFlgYBwJQAJdgSXAmlHOjW1nLAElIJWYM1JUAJtgQWOg6+hFACmz0HLIHNgQObaR4AT0oJoE/BE1OCK4E9yAFLSCVkDTwtWcPzcqFVOqVXBmVUopKM8XJpm7LsPo5z3/Oqu1mHtDoP3dxPx+ZtOo1j2/zpxtNy0c+hmxYeu5nOUq/76YtIwt0w9pwu7bXaPC4FHrqlmJ57LQ/39fC4PmYDKogZcDVAujPYx4ZkvVdDstE+Mjx7hli6ADf14fdjkEKpT1hTn5PWWxMr6q1b6z2+Vh9cTX1Y6yO+Vo9V93e41vuaelzvX/X+burzi/3PNf13/Jex1Duo6b9b7+/QPFzD8ckENjavS4jyw0X4XOL4A68SZ02lxLurxPs6iYe0SrwNFd+U2zENdWPqMF6fJIXK4UBzI4n/QZJrexKvb9eb2rcbfiV5tthMMVh7/7HfUKvbDvPdVvbCpnnoPsdem7vTtL05e/x7KGfKVvgw77f912nu2XTdD9PPOyC29Lnf0P6UWwFa+vPZ8GaIm9FSE7kJy7V0Ft3mwl37Bw==", "file_map": { "18": { "source": "pub mod bn254;\nuse crate::{runtime::is_unconstrained, static_assert};\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self) {\n // docs:end:assert_max_bit_size\n static_assert(\n BIT_SIZE < modulus_num_bits() as u32,\n \"BIT_SIZE must be less than modulus_num_bits\",\n );\n self.__assert_max_bit_size(BIT_SIZE);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n fn _to_le_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n fn _to_be_bits(self: Self) -> [u1; N] {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_le_bits\n pub fn to_le_bits(self: Self) -> [u1; N] {\n // docs:end:to_le_bits\n let bits = self._to_le_bits();\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[N - 1 - i] != p[N - 1 - i]) {\n assert(p[N - 1 - i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// The bit decomposition returned is canonical and is guaranteed to not overflow the modulus.\n // docs:start:to_be_bits\n pub fn to_be_bits(self: Self) -> [u1; N] {\n // docs:end:to_be_bits\n let bits = self._to_be_bits();\n\n if !is_unconstrained() {\n // Ensure that the decomposition does not overflow the modulus\n let p = modulus_be_bits();\n assert(bits.len() <= p.len());\n let mut ok = bits.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bits[i] != p[i]) {\n assert(p[i] == 1);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bits\n }\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8;N]` array\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_le_bytes\n pub fn to_le_bytes(self: Self) -> [u8; N] {\n // docs:end:to_le_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_le_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_le_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[N - 1 - i] != p[N - 1 - i]) {\n assert(bytes[N - 1 - i] < p[N - 1 - i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8;N]` array of length required to represent the field modulus\n /// This array will be zero padded should not all bytes be necessary to represent `self`.\n ///\n /// # Failures\n /// The length N of the array must be big enough to contain all the bytes of the 'self',\n /// and no more than the number of bytes required to represent the field modulus\n ///\n /// # Safety\n /// The result is ensured to be the canonical decomposition of the field element\n // docs:start:to_be_bytes\n pub fn to_be_bytes(self: Self) -> [u8; N] {\n // docs:end:to_be_bytes\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n // Compute the byte decomposition\n let bytes = self.to_be_radix(256);\n\n if !is_unconstrained() {\n // Ensure that the byte decomposition does not overflow the modulus\n let p = modulus_be_bytes();\n assert(bytes.len() <= p.len());\n let mut ok = bytes.len() != p.len();\n for i in 0..N {\n if !ok {\n if (bytes[i] != p[i]) {\n assert(bytes[i] < p[i]);\n ok = true;\n }\n }\n }\n assert(ok);\n }\n bytes\n }\n\n // docs:start:to_le_radix\n pub fn to_le_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n static_assert(1 < radix, \"radix must be greater than 1\");\n static_assert(radix <= 256, \"radix must be less than or equal to 256\");\n static_assert(radix & (radix - 1) == 0, \"radix must be a power of 2\");\n }\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix(self: Self, radix: u32) -> [u8; N] {\n // Brillig does not need an immediate radix\n if !crate::runtime::is_unconstrained() {\n crate::assert_constant(radix);\n }\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32) -> [u8; N] {}\n\n // `_radix` must be less than 256\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32 - i] as Field) * (r * self) + (1 - b[32 - i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n /// Convert a little endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_le_bytes(bytes: [u8; N]) -> Field {\n static_assert(\n N <= modulus_le_bytes().len(),\n \"N must be less than or equal to modulus_le_bytes().len()\",\n );\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[i] as Field) * v;\n v = v * 256;\n }\n result\n }\n\n /// Convert a big endian byte array to a field element.\n /// If the provided byte array overflows the field modulus then the Field will silently wrap around.\n pub fn from_be_bytes(bytes: [u8; N]) -> Field {\n let mut v = 1;\n let mut result = 0;\n\n for i in 0..N {\n result += (bytes[N - 1 - i] as Field) * v;\n v = v * 256;\n }\n result\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n/// An unconstrained only built in to efficiently compare fields.\n#[builtin(field_less_than)]\nunconstrained fn __field_less_than(x: Field, y: Field) -> bool {}\n\npub(crate) unconstrained fn field_less_than(x: Field, y: Field) -> bool {\n __field_less_than(x, y)\n}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n if is_unconstrained() {\n // Safety: unconstrained context\n unsafe {\n field_less_than(x, y)\n }\n } else {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n }\n}\n\nmod tests {\n use crate::{panic::panic, runtime};\n use super::field_less_than;\n\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_be_bytes();\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 0, 2]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bytes: [u8; 8] = field.to_le_bytes();\n assert_eq(bytes, [2, 0, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n // 259, in base 256, big endian, is [1, 3].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_be_radix(256);\n assert_eq(bytes, [0, 0, 0, 0, 0, 0, 1, 3]);\n assert_eq(Field::from_be_bytes::<8>(bytes), field);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n // 259, in base 256, little endian, is [3, 1].\n // i.e. 3 * 256^0 + 1 * 256^1\n let field = 259;\n\n // The radix (in this example, 256) must be a power of 2.\n // The length of the returned byte array can be specified to be\n // >= the amount of space needed.\n let bytes: [u8; 8] = field.to_le_radix(256);\n assert_eq(bytes, [3, 1, 0, 0, 0, 0, 0, 0]);\n assert_eq(Field::from_le_bytes::<8>(bytes), field);\n }\n // docs:end:to_le_radix_example\n\n #[test(should_fail_with = \"radix must be greater than 1\")]\n fn test_to_le_radix_1() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(1);\n } else {\n panic(f\"radix must be greater than 1\");\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be greater than 2\n //#[test]\n //fn test_to_le_radix_brillig_1() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(1);\n // crate::println(out);\n // let expected = [0; 8];\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test(should_fail_with = \"radix must be a power of 2\")]\n fn test_to_le_radix_3() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(3);\n } else {\n panic(f\"radix must be a power of 2\");\n }\n }\n\n #[test]\n fn test_to_le_radix_brillig_3() {\n // this test should only fail in constrained mode\n if runtime::is_unconstrained() {\n let field = 1;\n let out: [u8; 8] = field.to_le_radix(3);\n let mut expected = [0; 8];\n expected[0] = 1;\n assert(out == expected, \"unexpected result\");\n }\n }\n\n #[test(should_fail_with = \"radix must be less than or equal to 256\")]\n fn test_to_le_radix_512() {\n // this test should only fail in constrained mode\n if !runtime::is_unconstrained() {\n let field = 2;\n let _: [u8; 8] = field.to_le_radix(512);\n } else {\n panic(f\"radix must be less than or equal to 256\")\n }\n }\n\n // TODO: Update this test to account for the Brillig restriction that the radix must be less than 512\n //#[test]\n //fn test_to_le_radix_brillig_512() {\n // // this test should only fail in constrained mode\n // if runtime::is_unconstrained() {\n // let field = 1;\n // let out: [u8; 8] = field.to_le_radix(512);\n // let mut expected = [0; 8];\n // expected[0] = 1;\n // assert(out == expected, \"unexpected result\");\n // }\n //}\n\n #[test]\n unconstrained fn test_field_less_than() {\n assert(field_less_than(0, 1));\n assert(field_less_than(0, 0x100));\n assert(field_less_than(0x100, 0 - 1));\n assert(!field_less_than(0 - 1, 0));\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap index eeb35b4f10b..e20123d298b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_-9223372036854775808.snap @@ -231,8 +231,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_0.snap index daefa81fc65..210d67c2c6e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_0.snap @@ -223,8 +223,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "td3frjO5cff7e5njHIhksViVW3kRBI7jBAYMO3CcDWwEufetLrLqu+L9SrOe1jMn1mfGs+rXajWr/1Gt//7lX//wL//17//8xz//21/+85d//D///cu//PWPf/rTH//9n//0l9//7m9//Mufn//2v395XP/THvrLP7Z/eL6u82rn1fdre/5ner2289rP6zivcl7nedXzus6rnVffr/3U66deP/X6qddPvX7q9VOvn3r91Oun3njWG9drO6/9vI7zKud1nlc9r+u82nn1/Sqnnpx6curJqSennpx6curJs966Xu28+n6dj/Pazms/r+O8ynmd51XP66k3T7156umpp6eennp66umpp6eennp66umznl2vvl/X47y289rP6zivcl7nedXzus7rqbee9fz5ao/z2s5rP6/jvMp5nedVz+s6r3ZeTz1/1muPCy3xrNiuTdNHQhIzoYmVsIRv9Mcj0RI9MRKSmAlNrIQlsnLLyi0rt6zcsnLLyi0rt6zcsnLLyi0r96zcs3LPyj0r96zcs3LPyj0r96zcs/LIyiMrj6w8svLIyiMrj6w8svLIyiMrS1aWrCxZWbKyZGXJypKVJStLVpasPLPyzMozK8+sPLPyzMozK8+sPLPyzMqalTUra1bWrKxZWbOyZmXNypqVNSuvrLyy8srKKyuvrLyy8srKKyuvrLyysmVly8qWlS0rW1a2rGxZ2bKyZWXLyp6VPSvnGOw5BnuOwZ5jsOcY7DkGe47BnmNw5BgcOQZHjsGRY3DkGBw5BkeOwZFjcOQYHDkGR47BkWNw5BgcOQZHjsGRY3DkGBw5BkeMwX7BD2IMBlqiJ0ZCEjOhiZXIyj0rj6w8svLIyiMrj6w8svLIyiMrxxgcF/wgxmDgqiwXemIkJDETmlgJS/hBjMFAVo4xOC+MhCSuynpBEythiWflfq35awxutERPjIQkZkITK2GJrLyy8srKKyuvrLyy8srKKyuvrLyycozB515wxBgMtERPjIQkZkITK2GJrOxZ2bOyZ2XPyp6VPStfI64/Nwm5xlcfF3piJCQxE5pYCUv4wTW+NrLyNb66XBgJScyEJlbCEn5wja+NlsjKPSv3rNyzcs/KPSv3rNyz8sjKIyuPrDyy8sjKIyuPrDyy8sjKIytLVpasLFlZsrJkZcnKkpUlK0tWlqw8s/LMyjMrz6w8s/LMyjMr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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_9223372036854775807.snap index 961ccdff05b..6299007332a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_false_inliner_9223372036854775807.snap @@ -219,8 +219,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index eeb35b4f10b..e20123d298b 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -231,8 +231,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_0.snap index daefa81fc65..210d67c2c6e 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_0.snap @@ -223,8 +223,8 @@ expression: artifact } } }, - "bytecode": "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", - "debug_symbols": "td3drju5ce/9e5ljH4hksViVWwmCwHGcwMDADhznAR4EufetLrLqu+K9pVnT+s+J9ZnxrPq1Ws3qN6r13z/96x//5b/+/Z//9Od/+8t//vQP//jfP/3LX//0889/+vd//vkvf/j93/70lz8//+1///S4/qc99Kd/aL97vq7zaufV92t7/md6vbbz2s/rOK9yXud51fO6zqudV9+v/dTrp14/9fqp10+9fur1U6+fev3U66feeNYb12s7r/28jvMq53WeVz2v67zaefX9KqeenHpy6smpJ6eenHpy6smz3rpe7bz6fp2P89rOaz+v47zKeZ3nVc/rqTdPvXnq6amnp56eenrq6amnp56eenrq6bOeXa++X9fjvLbz2s/rOK9yXud51fO6zuupt571/Plqj/Pazms/r+O8ynmd51XP6zqvdl5PPX/Wa48LLfGs2K5N00dCEjOhiZWwhG/0xyPREj0xEpKYCU2shCWycsvKLSu3rNyycsvKLSu3rNyycsvKLSv3rNyzcs/KPSv3rNyzcs/KPSv3rNyz8sjKIyuPrDyy8sjKIyuPrDyy8sjKIytLVpasLFlZsrJkZcnKkpUlK0tWlqw8s/LMyjMrz6w8s/LMyjMrz6w8s/LMypqVNStrVtasrFlZs7JmZc3KmpU1K6+svLLyysorK6+svLLyysorK6+svLKyZWXLypaVLStbVrasbFnZsrJlZcvKnpU9K+cY7DkGe47BnmOw5xjsOQZ7jsGeY3DkGBw5BkeOwZFjcOQYHDkGR47BkWNw5BgcOQZHjsGRY3DkGBw5BkeOwZFjcOQYHDkGR4zBfsEPYgwGWqInRkISM6GJlcjKPSuPrDyy8sjKIyuPrDyy8sjKIyvHGBwX/CDGYOCqLBd6YiQkMROaWAlL+EGMwUBWjjE4L4yEJK7KekETK2GJZ+V+rflrDG60RE+MhCRmQhMrYYmsvLLyysorK6+svLLyysorK6+svLJyjMHnXnDEGAy0RE+MhCRmQhMrYYms7FnZs7JnZc/KnpU9K18jrj83CbnGVx8XemIkJDETmlgJS/jBNb42svI1vrpcGAlJzIQmVsISfnCNr42WyMo9K/es3LNyz8o9K/es3LPyyMojK4+sPLLyyMojK4+sPLLyyMojK0tWlqwsWVmysmRlycqSlSUrS1aWrDyz8szKMyvPrDyz8szKMyvPrDyz8szKmpU1K2tW1qysWVmzsmZlzcqalTUrr6y8svLKyisrr6y8svLKyisrr6y8srJlZcvKlpUtK1tWtqxsWdmysmVly8qelT0re1b2rOxZ2bOyZ2XPyp6V/VSej0eiJXpiJCQxE5pYCUtk5ZaVW1bOMThzDM4cgzPH4MwxOGMMzguW8IMYg4GW6ImRkMRMaCIrxxjUC34QY3BdaImeGAlJzIQmVsISfiBZWbKyZGXJypKVJStLVpasLFlZsvLMyjMrz6w8s3KMQbswE5pYiauyX/CDGIOB63Tz+lCuMbgxEpKYCU2shCX84BqDG1l5ZeWVlVdWXll5ZeWVlVdWXlnZsvI1Bke70BMjIYmZ0MRKWMIPrjG4kZU9K3tW9qzsWdmzsmflawyOa/O7xuAFvcbgRkv0xEhIYiY0sRJXZb3gB9cY3GiJnhgJScyEJlYiK7es3LNyz8o9K/es3LNyz8o9K/es3LPyNQbHc1vVuGYSaImrsl0YCUnMhCZWwhJ+EFdPAi2RleMCil+QxLOyPC5oYiUs4QfXGNxoiZ4YCUlk5ZmVZ1aeWXlmZc3KmpU1K2tW1qysWVmzsmZlzcqalVdWXll5ZeWVlVdWXll5ZeWVlVdWXlnZsrJlZcvKlpUtK1tWtqxsWdmysmVlz8qelT0re1b2rOxZ2bOyZ2XPyn4qr8cj0RI9MRKSmAlNrIQlsnLLyi0rt6zcsnLLyi0rt6zcsnLLyi0r96zcs3LPyj0r96zcs3LPyj0r96zcs/LIyiMrj6w8svLIyiMrj6w8svLIyiMrS1aWrCxZWbKyZOUcgyvH4MoxuK4xOAJ+cI3BjZboiZGQxExcleeFlbCEH8QYDLRET4yEJGYiK2tW1qysWXll5ZWVV1ZeWXll5ZWVYwz2CythCT+IMRhoiZ4YCUnMRFa2rGxZ2bKyZ2XPyp6VYwzqBUnMhCZWwhK+YTEGAy3REyMhiZnQxEpYIiu3rNyycsvKLSu3rNyycsvKLSu3rNyycs/KPSv3rNyzcs/KPSv3rNyzcs/KPSuPrDyy8sjKIyuPrDyy8sjKIyuPrDyycoxBv9ASPTESkpgJTayEJfxgZuWZlWdWnll5ZuWZlWdWnll5ZuWZlTUra1bWrKxZWbOyZmXNypqVNStrVl5ZeWXllZVXVl5ZeWXllZVXVl5ZeWVly8qWlS0rW1a2rGxZ2bKyZWXLypaVPSt7Vvas7FnZs7JnZc/KnpU9K/up7I9HoiV6YiQkMROaWAlLZOWWlVtWblm5ZeWWlVtWblm5ZeWWlVtW7lm5Z+WelXtW7lm5Z+WelXtW7lm5Z+WRlUdWHll5ZOWRlUdWHll5ZOWRlUdWzjHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGPQcg55j0HMMeo5BzzHoOQY9x6DnGGyPHIRPtVIvjZKUZklLq2SlymiV0SqjVUarjFYZrTJaZbTKaJXRKqNXRq+MXhm9Mnpl9MroldEro1dGr4xRGaMyRmWMyhiVMSpjVEbuG9vjGobzERolKc2SllbJSp66huNRK10ZIzRKUpolLa2SlTx1DcyjVqoMrQytDK0MrQytDK0MrYxVGasyVmWsyliVsSpjVcaqjFUZqzKsMqwyrDKsMqwyrDKsMqwyrDKsMrwyvDK8MrwyvDK8MrwyvDK8Mjwz2uNRaqVeGiUpzZKWVslKldEqo1VGq4xWGa0yWmW0ymiV0SqjVUavjF4ZvTJ6ZfTK6JXRK6NXRq+MXhmjMq7xOyXUS1dGC0lplrS0Slby1LWzPboyZqiXRunK2POGZklLq2QlT8U432qlK2OFRklKs6SlVbKSp2Kcb7VSZWhlaGVoZWhlaGVoZWhlrMpYlbEqY1XGqoxVGasyVmWsyliVYZVhlWGVYZVhlWGVYZVhlWGVYZXhleGV4ZXhleGV4ZXhleGV4ZXhmRGTdI5aqZdGSUqzpKVVslJltMpoldEqo1VGq4xWGa0yWmW0ymiV0SujV0avjF4ZvTJ6ZfTK6DkWYnLOtNAoSWmWtLRKVvJUjN+ta/k81EujdE3Pk9AsaWmVrOSpa/wetVIvjVJlzMqYlTErY1bGrAytDK0MrQytjGv8agvNkpZWyUqeusbvUSv10pURa/Iav0ezpKVVspKnrvF71Eq9VBlWGVYZVhlWGVYZVhleGV4ZXhnX+NUZktIsaWmVrORHMcHnqJWuDA+NkpRmSUurZCVPtap3jcv1CGlplazkqWtcHrVSL42SlCqjV0avjF4ZvTJGZYzKGJUxKmNUxqiMURnX+F0tZCVPXeP3qJV6aZSkNEtaqgypDKmMWRkxmbWHemmUpDRLWlolK3kqprduVYZWRkxy3bN4pTRLWlolK3nqGr9HrdRLlbEqY1XGqoxVGdf4XRLy1DV+j1qpl66MGAvX+D2aJS2t0pUR852v8bt1jd+jVuqlK2OFpDRLWlqlHFESo3arlXpplKQ0S1q6KlvISp669rpHrdRLoySlWdJSjjyp0S01uqVGt9TolhrdUqNbanRLjW6p0S01umMCUex/YwbRUS+NkpRmSUurZKXcs8dUoqPKkMqQyqgj6ZhPZLF810g+WiUreeoayUet1EujJKXKqCNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSNpqSPpmF4U1yhiftFRL42SlGZJS6tkpbz6ERONjirDK8MrwyvDKyMvbTXJa1tN8uJWk7q6Nevq1qyrW7Oubs26uhXTjqyFZklLedUlph4d5VWXmHx01Eq9NEpSmiUtVUY/EwrbnnO01UujJKVZ0tIqWclTozJiRtDcFDihwgUNejHmBx022CFpMU8ozrz3TKFDhQsa9GLMGTpssMMBSVPSYg5fnI/HDKIebSRmDCUb7HBAgRMq/FLXoBdjJl+MuphHlOxwQIGRFhtvzOo7XNCgF2N232GDHQ4okDQnzUlz0rzSYrZRssEOr7r6CMYMuRb0Yszsi/OxmFeU7HBAgRMqXNCgFztpnbROWietk9ZJ66R10jppnbQYhNqDDXY4oMAJFS5o0IsxB1BHMCpIUOGCBr0Yo/uQYjGkDwVOqHBBg16MIX3YIGlKWgzpvTjKG1LekPKGlDekvKHFG4qBftjhgKTFkN4bbQzpQy/GkD5ssMMBBTIYYkgfRtoMGvRiDOnDBjscUOCECklz0rzSYvJSssEOYzD0oMIFDXpxD/TNBjscUCBpMdBVgwsa9GIM9MMGOxxQ4ISRtoILGvTiHuibDXY4IHUHFYQKQgWhglAhduOHE1JXWF5hefdAv7ry2gN9s8EOBxQ4ocKYTvwIGvRijPnDmFbcgjGxOD7YGPOHAieMqcsjuKDBeG/725oP2GCkSXBAgRMqXNCgF6MTHDZImpFmpBlpRpqRZqQZaU6ak+akOWlOmpPmpDlpTppXWkyhSjbY4YACJ1QYaSsYadfHElOoepxtxZSp52XBYPzZDC5o0Isx0OMoPmZNJTscUOCECq2WIcax9WD82QhOqHBBg16M0X3YYIcDkiakCWlCmpAmpE3SJmmTtEnaJG1P5493vCf0by5o0Isxug9ZZzG6DwcUSJqSpqQpaUraIm2RtkhbpC3SFmmLtEXaIm2RZqQZaUaakWakGWlGmpEWU/sfsf3G5P5DhQsa9GRMrUo22OGAAidUuGCkadCLMfX/sMEOBxQ4ocIFI20FvRhfBzhssMMBBU5I3UGFQYVBhUGFQYX4CsDhgl/qxvJerSKmXyUb7HBAgRMqvNL2t/9jWvKhF2Nq8uGVdh4HcKVdX4ltMTErKXDCK+36jmyLCVpJg/HergYd07SSDUaaBAcUOKHCBQ16Mb7Kc9ggaYu0RdoibZG2SFukLdKMNCNtf8UnNs/9JZ/4uPeXeuITiu/u9PgA4rs6hwIVrsMeM62eN7GCAidUuKBBL8bB9GGDHZIWO1abwQkVLmjQi3sfu9lghwNGmgYnVLigQS/GwfRhg9QdVBhUGFQQKggV9u52c0DqCssrLO/e3VrQoBf37nazwQ4HFBhpHlS4oMErzWMz2t+ja8EGOxzwSvMenFBhpK2gQS/G7tZHsMEOBxQ4ocIFDXrRSDPSjDQjzUgz0ow0I81IM9KcNCfNSXPSnDQnzUlz0pw0r7SYxpVsMNJmMNI0GHWvrSRmZj1vMgdjL/IICpxQ4YIGvbj3sZsNdkhaJ62T1knrpHXSOmmDtEHa3h+34IACJ1S4oEEv7v3xZoOkCWlCmpAmpAlpQpqQNkmbpE3SJmmTtEnaJG2SNkmbpClpSpqSpqQpaUraHv6xRcXwPzToxcXWt4f/Zi/GN1sfPRgLGVt17CEPG+xwQIETKlzQYKX1xwM22OGAAidUuKBB0hppjbR9KCzBAaUYs6LOY4wa7HBAgRMqXNCgFwdpcfv2Ou7reybV4YACJ1S4oMFIizcf92wPo26847hrezihwgUNejFmQR5SN+7FXs9Y6TEZ6vxb5b+Nm7CHHVJBWTJlyZQlU5ZMWTIlbZG2SFukLdIWaYu0RdoibZG2SDPSjLSY43gdnPaYJDWvp6D0mCU1r+PUHlOiZhx7xpyopBdjVuNhgx0OKPB6Fz02rpjbeLigQU/G/Khkgx0OKHDCqHttffHMo3nd3+zxjKO9PcSkqMNr4NiWllbJSp66xsxRK/XSKEmpMkZljMoYlTEqQypDKkMqQypDKiNmPMRbjhkPW6tkJU/FjIetVuqlUZJSZczKmJUxK2NWhlaGVsY11uKIOeYuHUlplrS0SlbyVDyub6uVrowVGiUpzZKWVslKnrpG1lErXRkWGiUpzZKWVslKnrpG2VErXRkeGiUpzZKWVslKfhSzmI5aqZdGSUqzpKVVslJltMpolXHt9uK0JGYxHUnpmREnIjGL6WiVrOSpay951Eq9NEpSqoxrnMdZTcxiOrLUNabj4DpmMR2NkpRmSUurZCVPXWP6qDKkMqQypDKkMqQypDKkMqQyZmVcYzpOHWIW09EoSWmWtLRKVvLUNaZ9hVqpl0ZJSrOkpVWykqeuMR3nNTGL6aiXRklKs6SlVbKSp+KxnLF1xoM5t3pplKQ0S1paJSt5yivDK8MrwyvDK8MrwyvDK8MrwzMjZjYdPTNanDLF1KbkgAInVLigQS/GMwQPI60FOxxQ4IQKFzQYaddgjAlQyQY7HFDghAoXNEjaIG2QNkgbpA3S4qmDcXQfz2RKLmjQi/H8wcMGOxxQYKRJUOGCBr0YzyQ8bLDDSJtBgRMqXNCgF+NZoYeRpsEOBxQ4ocIFDXoxnh96GGkr2OGAAidUuKDBSLvaRszSSjbY4YACJ1QYaTF44/mGh17cz/rdbLDDAQVOqJC0/dzRGMf7yaMXdT97dLPBDgcUOKHCBSOtBb24n0e62WCHAwqcUOGCpO2nBF/DVPdzgjcb7HBAgRMqXNBgpF3DVPezgzcb7HBAgRMqXNAgaUKakCakCWlCmpC2ny0swQUNenE/Y3izwQ4HFDhh1LWgF/cThjcb7HBAgRMqXJA0JW2RtkhbpC3SFmmLtEXaIm0/hXgGvbifRLzZYIcDCpxQYaR50KAX99OJNxvscECBEyq80uKMPiaCJT0ZE8GSDXY4oMAJFUZaCxr0YnSNwwY7HFDghAojrQcNenE/2XizwQ4HFDhhpI3ggga9uJ92vNlghwMKnJC0QdogbZAmpAlpQpqQJqQJadE1rgdn9phKljToxegahw12OKDACSNtBhc06MXoJYcNdjhgpGlwQoULGvRi9JLDBjsckLRF2iJtkbZIW6RFL7mesNljKlmywwEFTqhwQYNejF5yPauzx1SyZIcDCpxQ4YKR5kFP2u4lmw12OKDACRUuaJC0RlojrZHWSItecj29rcezupIKFzToxeglhw12OCBpnbROWvSS69GePSajJb0YveSwwQ4HFDihQtIGaYM0IU1IE9KENCFNSBPShDQhTUibpE3SJmmTtEnaJG2SNkmbpE3SlDQlTUlT0pQ0JU1JU9KUNCVtkbZIW6Qt0hZpi7RF2iJtkbZIM9KMNCPNSDPSjDQjzUgz0ow0J81Jc9KcNCfNSXPSnDQnzSstpr4lG+xwQIETKlzQIGmNtEZaI62R1khrpDXSGmmNtEZaJ62T1knrpHXSOmmdNHqJ00ucXuL0EqeXOL3E6SVOL3F6idNLnF7i9BKnlzi9xOklTi9xeonTS5xe4ruX9OCCBr24e8lmgx0OKHBC0iZpk7TdS64jJt+9ZLPBDgcUOKHCBQ1G2nXE5LuXbDbY4YACJ1S4oEHSjLTdS2awwwEFTqhwQYNe3L1kM9I02OGAAidUuKDBSFvxoywP2GCHAwqcUGGkWdCgF3cv2WywwwEFTqiQtEZaI62T1knrpHXSOmmdtE7a7iUeNOjF3Us2G+xwQIETKrzqXk+BHTGXL9lghwMKnFDhggZJm6RN0iZpk7RJ2iRtkjZJm6RF17geOzxiLl+ywQ4HFDihwgUjbQS9GF3jsMEOBxQ4ocIFSVukGWlGmpFmpBlpRpqRZqQZaUZadA2RYIMdDihwQoULGvRkzOVLNhhpGhxQ4IQKFzToxegahw2SFv1BLKhwwajrQS9Gfzhs8Fr063vqI+b9JSdUuKBBL0ZTOGywQ9IGaYO0QdogbZA2SBPShLRoFdcD20bM+0sKnDDSenBBg16MVnHYYIcDCpyQtEnaJG2SpqQpaUqakqakRau4vo4/Yt5fckGDXoxWcdhghwMKJG2RFq1ixhCJVnHoxWgVhw12OKDACRWSZqQZaU6ak+akOWlOmpPmpEWrmDEKo1VcX90f+4cXg/unFw8bjDQLDihwQoULGvRitIrDBklrpDXSGmmNtEZaI62R1kmLBnJ943/sn2k8HFDghAoXNOjF3Us2SRukRS+5vlI99s83Hk6ocEGDXoxecthgh5HWggInVLigQS9GLzlssEPSopdc3/gf+4ceDxUuaNCL0UsOG+xwQNKUNCVNSVPSlLRF2iJtkbZIi15yffl/7B+EPFS4YKRJ0IvRSw4b7HBAgRMqXJA0I81Jc9KcNCfNSXPSnDQnLXrJ9W37sX9AMrh/QvKwwUjT4IACJ1S4oEEvRi85bJC0RlojrZHWSGukNdIaaZ206CXXV9bH/rnJwwEFXmnXV8vH/tnJwwUNejF6yWGDHQ4okLRB2iBtkDZIE9KENCFNSBPShDQhTUgT0oS0SdokbZI2SZukTdImaZO0SdokTUlT0pQ0JU1JU9KUNCVNSVPSFmmLtEXaIm2RtkhbpC3SFmmLNCPNSDPSjDQjzUgz0ow0I81Ic9KcNCfNSXPSnDQnzUlz0rzSYsZossEOB4y0FpwwRrcFFzToxd1LNhvscMBI68EJFS5o0IvRSw4b7HBA0jppnbROWietkzZIG6QN0nYvGUGBEypc0KAXdy/ZbLBD0oS03UtmUOGCBr24e8lmgx0OKJC03TU06MXdNTYb7HBAgRMqXJA0JW2RtkhbpC3SFmmLtEXaIm2Rtkgz0ow0I81IM9KMNCPNSDPSjDQnzUlz0pw0J81Jc9KcNCfNK20+HrDBDiPNgwInVLigQS9G1zhssEPSGmmNtEZaI62R1kjrpHXSOmmdtE5aJ62T1knrpHXSBmmDtEHaIG2QNkgbpA3SBmmDNCFNSBPShDQhTUgT0oQ0IU1Im6RN0iZpk7RJ2iRtkjZJm6RN0pQ0JU1JU9KUNCVNSYtecj2PZuxJqYde3A1Egh0OKHBChQsa9OJuIJuk7V/XbsEBBU6ocEGDXty/tr3ZIGk0kEkDmTSQPf30erLP2NNPDz25p59ez5gZe/rpYYcDCpxQ4YLxhiToxegahw12OKDACRUuGGkz6MXoGocNdjigwAkjTYMLGvRidI3DBjscUOCEpA3SBmmDNCFNSBPShDQhTUgT0oQ0IU1Im6RN0iZpk7RJ2iRtkjZJm6RN0pQ0JU1JU9KUtOga13efxp6UerigQS/GEchhgx0OKJC0RdoibZG2SDPSjDQjzUgz0ow0I81IM9KMNCfNSXPSnDQnzUlz0pw0J80rbU9KPWywwwEFTqhwQYOktRrHe6Lp9Q3BsSeaHi5o0Iu7P2w22OG1vNf35caeaHo4ocIFDXox+sNhgx1GWgsKnFDhgga9GP3hMNIk2OGAAidUuKAVoxN4fAAx5q8vwY09efRQ4YIGvRhj/rDBDgeMtPiEYswfKlzQoBdjzB822OGApC3SFmmLtEXaIs1IM9KMNCPNSDPSjDQjzUgz0pw0J81Jc9KcNCfNSXPSnDSvtD159LDBDgcUOKHCBZ9p/frS24jJo4fxxJXDBjscUOCE9S72hNDr+9FjTwg9HFDghAoXNOjFfUywSVo8e/SxOaDACRUuaNCL8Wilw1g7I9jhgAInVLigQS/Go5WuL7KN/STDww4HFDihwgUNRtrVYfaTDA8b7HBAgRMqXDDSNOjFeLbKYYMdDihwQoWR5kGDXoxHKx022OGAAidUSJqRZqQ5aU6ak+akOWlOmpMWj1Z6xHCKRysdejImhCYb7HBAgRNeadeXvUZMCE0a9GL0h8MGOxxQ4ISkNdIaaY20TlonrZPWSeukddLi0WvX9/VGTAhNGvRiPHrtsMEOBxQYaSOocEGDXoxecthghwMKJC16yfXdsxETQpMGvRi95LDBDgcUOCFp0Uuub22NmBCa9GL0ksMGOxxQ4IQKI02DBr0YveSwwQ4HFDihQtIWaYs0I81IM9Kil1xfmxsxITQ5ocIFDXoxeslhgx2SFr3k+nrbiAmhSYULGvRDiQmhyQavtOuLbLIf2Hh41b2+cCb7gY2HBr0YXeOwwQ4HpG4M/+sLZ7KfvHg970f2kxcPB5z82ZcKLFlnyTpLNliywZINlmywZDHmD0kbpA3SBmmDNCFNSBPShDQhTUgT0oS0GPPX98lkP5rx+gqY7EczXt+ukv0Qxh4rKkb34YQKFzToxRjdh/EuYiuJ0X04oMAJFS5o0Isxug9JW6Qt0hZpMbpHbKkxug8XNOjFGN2HDXY4oMBIi88iRvfhgga9GKP7sMEOqRsj9poML/vBisH9YMXDBjscUOCEsbwSXNCgF2McX9PTJSZj9mtGucRkzOSAAiNtBRUuGGk96MX9S0GbkWbBDgcUOKHCBQ16cf9m0CZpg7RB2iBtkDZIG6QN0gZpQlp0gmvqssRszS4teNWV+IRiSEt8ALHDPhxwQoXxZ/FhxTCV+Cz2gIyVukfhZp5vSqszd2l15i6tztyl1Zm7tDpzl1Zn7tLqzF1anblLqzN3aYs0I81IM9IszzelmcAJFS5o0Iv+gLFKIiLG2+GA8d7iE9rn6LEm9zn6pif3PMfDBjscUOCEChc0SFojLUbhNc1ZYp5jckCBEypc0KAXYxQekhbn89fVL9nzHA8FTqhwQYNe3NfwJNhghwMKnFDhgvHePOjFGIWHDUZaD17r7JpJLX3/JNimF+u6vfS6bi+9rttLr+v20uu6vfS6bi+9rttLr+v20uu6vfS6bi9dSVPSlDQlTUlT0pQ0Ja2u20uv6/bS67q99LpuL72u20uv6/bS67q99LpuL33/UFh8sPuHwjYNetHyArHEbEKJI5uYTZgcUOCEChc06MmYTZhssMMBBU6ocEGDkXZtRjGbMNlghwMKnFAhdXtUGMEBBU6ocEGDXhwP2GCkSXBAgRMqXNCgF+UBGyRNSBPShDQhTUgT0oS0SdokbZI2SZukTdImaZO0SdokTUlT0pQ0JU1JU9KUNCVNSVPSFmmLtEXaIm2RtkhbpC3SFmmLNCPNSDPSjDQjzUgz0ow0I81Ic9KcNCfNSXPSnDQnzUlz0rzS5PGADXY4oMAJFS5okLRGWiOtkdZIa6Q10hppjbRGWiOtk9ZJ66R10jppnbROWietk9ZJG6QN0uglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLhF4i9BKhlwi9ROglQi8ReonQS4ReIvQSoZcIvUToJUIvEXqJ0EuEXiL0EqGXCL1E6CVCLxF6idBLJr1k0ksmvWTSSya9ZNJLJr1k0ksmvWTuXnKdEszdSzYb7HBAgRMqXNAgaZ20TlonrZPWSeukddI6aZ20TtogbZA2SBt1xDSHwgUN1nHUlAdssMMBBZImpAlpQpqQNkmbpE3SJmmTtEnaJG13jRWMtOv0bO7+4MEOBxQ4ocIFDXpx94fNOkacq8MBBU6ocEGDdUQ67QFJs4qIyVbj+tqnxGSrpEEvxo9WHDbY4YACJyRtkhY/WhHnhTHZ6jB+tOKwwQ4HjDQJTqhwQYNejB+ROmww0mJFxY9IHUbaDE6ocEGDXowfkTpsMNI0OKDA6zOOmwu6u3K8+d2VNxvscECBEypc0GClxRyicT1wQWIO0WH8Vsthgx0OKMX40ZU47YvJQMkOBxQ4ocIFDXoxtt8Y/jFFKNnhgAKpqyykspDKQioLqSxkbIgx3mIGUNKgF2NDPGywwwEFTkjaIm2Rtkgz0ow0I81IM9KMNCPNSDPSjDQnzUlz0pw0J81Jc9KctPiJl9iTxQygETdvYlbPiJsAMftmf5ox+yY5ocKr7tiMbf2KsL2tX03B9ra+Gdv6DHYY23osQ/zWUFysj/kwh7HZHzbY4YACJ1S4IGlCWmz2cc085sMkOxxQ4IQKFzToRSVNSVPSlDQlLUZLNIWYD5Nc0GD1nZgPk2ywwwEFkrZIW6Qt0hZpRpqRZqQZaUaakWakGWlGmpHmpDlpTpqT5qQ5aU6ak+YVETNUJG7FxQyVZIMdDihwQoULGiStk9ZJ66R10jppnbROWhz/xkCPGSpJL8bx72GDHQ4okLpxpBtNIWadJDscUOCEChc06MU40o2+E7NOkh0OKHBChQsa9KKSpqQpaUqakqakKWlKmpKmpC3SFmmLtEXaIm2RtkhbpC3SFmlGmpFmpBlpRpqRZqQZaUaakeakOWlOmpPmpDlpTpqT5qR5ps2YdZJssMMBBU6ocEGDpDXSGmmNtEZaI62R1khrpDXSGmmdtE5aJ62T1knrpHXSOmmdtE7aIG2QNkgbpA3SBmmDtEHaIG2QJqQJaUKakCakCWlCmpAmpAlpk7RJ2iRtkjZJm6RN0iZpk7RJmpKmpClpSpqSpqQpaUqakqakLdIWaYu0RdoibZG2SFukLdIWaUaakWakGWlGmpFmpBlpRpqR5qQ5aU6ak+akOWlOmpPmpNFLGr2k0UsavaTRSxq9pNFLGr2k0UsavaTRSxq9pNFLGr2k0UsavaTRSxq9pNFLGr2k0UsavaTtXiLBDgcUOKHCBQ16cfeSTdIGaYO0QdogbZA2SBukDdKENCFNSBPShDTJI5vZxKAX5wM22OGAAidUSNokbZKmpClpSpqStruGBiNtBaOuBb24+8Nmgx0OKHBChQvmUdtsy4v2gA12OKDACRUSEWPeIjjG/KHACRUuaNCTMftGrgkHM2bfJDsc8Eq7vg02Y/ZNUuGCBr0YY/6aIjRj9k2ywwEFTqhwQYNe7KR1inWKdYp1inWKdYoNig0WPYa0xNqJIX0o8Eqb8eZjSB8uaNCLMaQPG+zwSruunM54iFhyQoULGvRiDPTDBjskbZI2SZukTdImaZM0JU1JU9KUNCUtDgSua68zJtckG+xwQIETKvxS16AXY0hfl4JnPAIsKXBChQsa9KJTN3buhx1G2gwKnFDhggY9uSftHDbY4YACJ1S4oEHSGmmNtBjo11XsuSftHAqcMNJWMNKudhUP+5LrMXozHvaV7PCqez3ubu6pPNfT4eaeynOocEErxui+HhQ39/Sc67lqc0/POVS4oMFrPWi84xjHhw12OGCkxZuPcXyoMNJilcQ4PvRijOPDBjscMNJipcY4PlS4oEEvxjg+bDA+Yw8OKHBChQsa9OIe85sNxnvbHFDghFfaiq0kxvyhQS/GmD9ssMMBBU5IWnSCFdtkjPnDBjscUOCECr/UjXcR22+M+eCeiHPYYM/htCfiHAqcUOGCBr24x/xmg6TFkI6RtefZHBr04h7oLdhghwMKjBW1KyhcxdiNr1icPUxjlexhutlgh/GxeDCOua4Pds9FsQiOgXMYx1zxZzFwDuOYK5ZBqzHt+SWHChc0GBWuDrPnlxw2GEdtMzigwFheDSpc0KAXYzAcNhhpKzigwAkVLmjQizFEopHu+SWHHQ4osLrynh1yTYydex7IdZl77nkghwsa9OI+N91ssMMBBZLWSGukNdIaaZ20TlonLbb161sOc88DOZxQ4YIGvbgPZDepGzs1iXUWO7VDg16M0XLYYIcDCpww0npwQYNejJ3aYYMdDihwQtImaZO0SZqSpqQpaUqakqakKWlKmpKmpC3SFmmLtEXaIm2RtkhbpC3SFmlGmpFmpBlpRpqRZqQZaUaakeakOWlOmpPmpDlpTpqT5qR5pcWTopINdjigwAkVLmiQtEZaI62R1khrpDXSGmmNtEZaI62T1knrpHXSOmmdtE5aJ62T1kkbpA3SBmmDtEHaIG2QNkgbpA3ShDQhTUgT0oQ0IY1eovQSpZcovUTpJUovUXqJ0kuUXqL0EqWXKL1E6SVKL1F6idJLlF6i9BKllyi9ROklSi9ReonSS5ReovQSpZcovUTpJUovUXqJ0kuUXqL0EqWXKL1E6SVKL1F6idJLlF6i9BKllyi9ROklSi9ReonSS5ReovQSpZcovUTpJUovWfSSRS9Z9JJFL1n0kkUvWfSSRS9Z9JJFL1n0kkUvWfSSRS9Z9JJFL1n0kkUvWfSSRS9Z9JJV99znqnvuc9U997nqnvtcdc99rrrnPldf0KAXxwOSNkgbpA3SBmmDtEHaIG2QJqQJaUKakCakSR0xLTFYR0xrPmCDHQ4ocEKFpE3SJmlKmpKmpClpu2tIMNJmMOpq0Iu7P2w22OGAAidUuGAdI65Vx4jLHrDBDgcUOKFCIq4xP69H/MyYJ5YUOKHCBQ160rgOblwHN66DG9fBY07ZvJ4BNONJUUmFCxr04jXmkw12OCBpjbRGWiOtkdZI66R10jppnbQedWewLn7HFLfzb2PwxtX8mOKWFDihwgUN1q2BmA6XbLBuDZgMKHBChQsa5A3NB2yQtEnaJG2SNkmbpCnFlGJKMaWYUkwppl+Kseh7HMfWt8fxZoN1a8D2xe9NgRMqXNBg3Ygwq4v1Mdst2eGAAidUuKDBujVgTpqT5qQ5aU6ak+akOWlOmleaPx6wwbph4I8FDdatgT1f7rDBDgekbptQYd0w2DPjDhvscECBEyr8Utdg3YjYM+PiCv2eGXfY4YACJ1S4oMG6NbBn0R2SJqQJaUKakCakCWlC2r61de2d9iy6wwY7jLQVrEuge75c3FHY8+UOvah1fXLPl4uri3u+XFyt2zPjdP/bujWw58BtrgdssMO6NbDnwB1OqHBBg3UjYs+BO2yww0iLVWICJ1S4oEEvet2I2HPgDjscUOCEChc0mLc9dM+BO2ywwwHztofuOXCHChc06MX2gA12OCBpjbRGWiOtkdbytofuOXCHDXY4oMAJFS5oMN5bMDrBYYMd5m0P3XPgDidUuKBBL8oDNtghaZI3Q3TPdjs06MX5gA12OCB1Y+d+3SLRPdvtcEGDedtD92y3wwY7HFDghAoXNEjabgojKHBChev0KN2T2Q69aA/YYIfjtDbdk9kOJ4zDxVgllrdTdE9bO2yww/pv96SzwwY7HDBuLkhwQoULGvRie8AG88aJ7klnhwInVLigwbxxonvS2WGDHQ4ocEKFCxokbZA2SBukjbxNo3vS2eGEChc06MUYvIcNdkiakCakCWlCmuTOUvdUtM35gA12KMU9IFswzlA2BU4YZyixccXQOzToxdhhHzbY4YDUjfHm12jZM8L2v41B5rG8McgOBcZCxhYVe97DBWMhY50ZETH0DltyP1jpupek+8FKhwNKLtmZ2rWpcEGDtXb21K7DBqkbo2UvTuPPYojEO44nJCU7HFDghAoXtFxRexLXZgyRwwY7HDDOu1cwzrtjRV1DZF7PLtU9iWu/oX1Ku1mfRUzBGvEJxRSspEEvxvezDhvscECBE5IW38+6Hr+lMQUr6cX4ftZhgx0OKHBChdd6eMQqiYFz6MUYOIcNdjigwAkVkrZIW6QZaUaakWakGWlGmpEW38/y+OTj+1mHXozvZx022OGAAieMtBZc0JJ7ulbsY/fErOuCle6JWYcKFzToxUax2OsdDihwQoULGvRiDOlD0jppMSD3e4sBedhgh7FkEoxlmMGocO3U9lyqGKZ71tR+m8IqEVaJsEqEVRL7lsMGOxyQD2CSFkeDj2sw7ElRhw12OKDACRUuaDDSrm1nT4o6bJC6iz9bLKSxkMZCGgsZQyS63J7ddDihwgUNejF2SYcNdkiak+akOWlOmpPmlbbnPB022OGAAidUuKBB0hppjbRGWiOtkRYj63rItu5JUdczqXVPXoqPcE9eOlzQYCzDNS7244Cuxz3rfvDP9SRl3Y/4uR7vq3tK0/WY4yc7HFDghAoXNOjFGEOHpE3SJmmTtEnaJG2SNkmbpClpSloMshZrJwbZocAJFS5o0IsxyA4bJG2RtkhbpC3SFmmLtEWakWakGWlGmpFmpBlpRpqRZqQ5aU6ak+akOWleEfGAnhHnF/GAnmSHAwqcUOGCBr3YSGuRtoIdDihwQoULGvRif8BIi3fcOxxQ4IQKFzToxXikwCFpg7RB2iBtkDZIG6QN0gZpQlo8fuD6OojGJK7kgAInVLigQS/uw9tHMA6IWjAOIntwQYNe3Iesmw1SbB+nbk6ocEGDXoznCBw22CFpi7R4YsB+b/HEgEMvGm8+nhgQZwcx72rEyUpMqxpx1jH3AWds4M7b3MeTmwMKnJCV6qxUZ6V6rdSYNZVscF4PFh1BhQsa9GI84PqwwQ4HFEhaPFr3uiehMSkqadCL8WjdwwY7HFDghKR10uIB19dtBI1JUf26S6Ax/Sk5oMAJFS5okLrxEN3DBiNtBQcUOKHC6+O+JgbofnbToRdjFB422OGAAidUSNokbZKmpClpSpqSpqTFQ+01GI+vjyuRMaUpGWvHggMKnFDhgga9GI+vP2yQNCPNSDPSjDQjzUgz0pw0Jy0GusTbjIF+KHBChQsa9GRMaUo22OGAAidUuKBB0mIvfU0y0pjSlOxwQIETKlzFTt3Y816PeNeYppScUOGCBr0Ye97DBjuMNAkKnFDhgga9GHvewwY7JE1IE9KENCFNSBPSJmmTtEnaJG2SNkmbpE3SJmmTNCVNSVPSlDQlTUlT0pQ0JU1JW6Qt0hZpi7RF2iJtkbZIW6Qt0ow0I81IM9KMNCPNSDPSjDQjzUlz0pw0J81Jc9KcNCfNSfNKs8cDNtjhgAInVLigQdIaaY20RlojrZHWSGukNdIaaY20TlonrZPWSeukddI6aZ20TlonbZA2SBuk0UuMXmL0EqOXGL3E6CVGLzF6idFLjF5i9BKjlxi9xOglRi8xeonRS4xeYvQSo5cYvcToJUYvMXqJ0UuMXmL0EqOXGL3E6CVGLzF6idFLjF5i9BKjlxi9xOglRi8xeonRS4xeYvQSo5cYvcToJUYvMXqJ0UuMXmL0EqOXGL3E6CVGLzF6idFLjF5i9BKjlxi9xOglRi8xeonRS4xeYvQSp5c4vcTpJU4vcXqJ00ucXuL0EqeXOL3Edy+ZwQY7HFDghAoXNOjFTlonrZPWSeukddI6aZ20TlonbZA2SBukDdLiXCTu++8f1TtUuKBBL8a5yGGD1I0fzYp7rPuH8g69GD+addhghxSbLORkIScLOVnIyUIqC6ksZPx+1uGApClp8cs9e3GUN6S8IeUNLd7Q4g0t3lCcgBwKnJC0Pfyvo1e3B2ywwwEFTqhwQYOkOWlOmpPmpDlpTpqT5qQ5aZ5p6/F4wEhbwUizYNT1oMIFDXpxD/TNBjscUGCeEqxHU7igQS/2B2ywwwEFktaJiJ/Huk5p1/6hvMMOBxQ4ocIFDXpxj+MZbLDDAQVOqHBBg16cpE3SJmmTtEnaJC0G+owNJgb6Zgz0wwY7HFDghAoXJG0PdL24B/pmgx0OKHBChQsajLQYDHGl4bDBDgcUOKFC6joVnApOBaeCUyF+2vLQYNXdP5R32GCkeXBAgRMqXNCgF+M64jXrb+0fyjvscMAr7Zq+t/YP5V2z89b+obzDBQ1eadcMtrV/KO+wwXhvFhxQYKRJUOGCBr0YneCwwQ4HFEjaIG2QNkgbpAlpQpqQFp1gxacZnWDFe4sxb7F+Y3Sv+FhiSK8ZHFDghNdCWnwssUc/NOjFGOiHDXYotQwxji0+whixFh9WjNjDDgcUOKFS7Etdg16MEXvYYIcDCpyQNCPNSDPSnDQnzUlz0pw0J81Jc9KcNK+0eARYssEOBxQ4ocIFKy2e8BXP+V/xhK+kwAkVLmjQi7GXPmyQtE5a7KWvL7WsmD2WVLigQS/G4fh1l2DF7LFkhwMKnFDhgpE2gl6MU/vrRsSKR4AlOxxQ4IQKF4w0DXpx/6zDZtztiyWLM/dDhQsa9GKcuR822OGAkRZLFmfuhwoXNOjFOHM/bLDDWe9t/z7D5oKsksUqMVbJ/n2GzQ7jA1jB+AAsOOGVFgdleyLZoUEvxkH6YYMdDihwQtLiIP26W7JiIlnSk/E0sGSDHQ4ocEKFCxokLQ7dry8brJh/luxwQIETKlzQoBc7aZ20aArXNPIVzwhLCpxQ4YIGvTioGwP9OtdbMVdtxOFtPCMsadCLMdDjGDGeEZbscECBEypc0KAXJ2mTtEnaJG2SNkmLThCHgPGMsCSrJIb/YURYsMMBBV4RcVgXc+CSV0Qc4cUcuKQXY/gfXmlxhBdz4EYcy8UjwJIKFzToxRj+h1E3PtgY/ocDCpxQ4YKRFp98DP/NGP6HDXY4oMAJIyI+oRjzh56MmXHJBjscUOCEChc0GGnX9hAz45INdjigwAnrw4rHhSUN1ocVzwgbcfoge61bMP6D+Ld7/W422OGAAidUuKDBStuTog5jl/QIdjigwAkVLmjQi3tS1CZpjbS9fi0YES1Yb+jMeYp/u+c8bTbYYa2oPefpcMJY9B5c0GCkXZ/bnvO0/2w02CFpg7RB2uBdjAUN8rHITvuf//ndTz//5Q+//9uf/vLnf/7bX//4x5/+4b/rX/znT//wj//903/8/q9//PPffvqHP//Xzz//7qf/7/c//1f8R//5H7//c7z+7fd/ff6/z5X7xz//6/P1WfDf/vTzHy/9z+/468frP7VH/vHzHln9+fz236/r6Gn/ffdXf99f/32LHy+PAs/T2serCuPNElxTsaPA80Dy1d/LmyV49nPNRXh27VY1/H+VmK9L9JhKFRWe78FeFHi3FkartfDc699Zj+P6ptGpoLc+CaGCaL9VwR5VwcedClNzc3qesN9aD3o9g3tX0NluVbg61Kngt5ZhXd+o2BWe95jvVLBey/C8oXpjXJrmBvW8o3jn70eOquetuld/f03rfjkmHiM3hufZ+svWck2Z/mhkX7N/Px3a/fHp2H67JtrIz+J5qWHcWpltSpVQu1Wi99won1cj1r0SnmPreQ3i3lLEz6GdEsNvlYjvLpwPpPcb27a3fBvPG6J3/l7q7+edv7dajf66z45326S2bNXPqxkv1+L1GwUfja3RPx9bY3w6tt6uiVXHL8+LLnJrZS6G5xK9V2LNKvF6x/e2hEkthc2bJVZtFWb31oXPeiPPO813xobmjut5W/bl0dibDfN5XSW3iefFlJeLIP3TI8Lx+bYt8um2/XZN9JUL8bzm026tzO65VT0vEL0usd41q1bNks3y2Xf/VwH7tMC7NxG/m3nehMxb6yHO+HaJ5zWFVyVm+/BtzP4bFli121n2uLUipXZ8zwt491bkrBOVJ9e9Eitb9vMK3b3NWqtNPS/R3WszatVm1uNOp3veja5zlcd42bH1TQmZmqvi+s3slyU+3Y/rD9iP68f78bdrQmtlPs89Xx4U6fx0TegPWBPrt10TdSBw/Qr6rc1qPXInLO/WxdsSSgl/3CphdcJx/VrwvRJ1LHD9lOytQTrqVPwx+60Ks07FH0tuVeCyyLNp3KnQHnVRozW7tSq13sb1m/GfNu75eptY/m4/vKR25dZfHRTZhzvBN+vheYskN4jnfZGXw8s+Pby0H3B4aR8fXr5bEV5nC8/7NHfG1vM+Ta6I5zGV36pQF8qeN2fGnQr9Ud3yeWXkVgVpVWHeehfPA/Ws8NyqP60w7xyMXL82eypcP9n6qoJ/eh3df8CFdJ+/4WZ9/cZsrQiVW6uyTruuHz69U6HVRnn9OOitCryLpv3TCmt8WsFurcnecp9z/ULhpxVkfFph3nsXnvus66flPq3QH59WGLcaxKgDuus3zG5VmIMKt5YhfrF0VxC5tQzPJk+FW8sw6wL09cNEt5ahWtT1I0Z3Kiif5movx0Vrn57ttPYDTndaW79lv17Na12MWyN8Se361q0d+PVDBFXh1qHQ5HbZ9UT2OxX8Ucvg/Vafcsan6/y0wtJPK9i6UeF6vPCpcD3P99MKop9WmPfeRY3wJ+8tQ92Ffla4tQytzrWu54DeqlCX2Z4Vbi1D5108d2F3KnDx93qa3qcV7n2aXyvonX3G9fS0rCC39hkaD+7JCneOpa5ZvrnLeHf3Vh4/YJ/x7jrCx/uMa3JuvZNbvXKN2mdcM0ZvVaibuNcUwtdr880+3KeOupH8+pjsfQ1tk5vJb5bjzU581WKsL31C+s2luHV8uqT2HM+bsONWhbrMdk2dvFNham7ca97qmM/jj3oXzw5+p8J61Ch9HhrdqjCo8PpiQvT215f6lEt9X64W+q9YCGMhbn2cS1tVuHW6sZZ9uVZ4qwKHM8vvbZReMwPWvatsy6vR2OPWJmWPOuWxx63TLms1l8vazQrTq8KtyxHWrFUFvzUlrtdVdOv9VgVhVpy8vrjU9NPb4U39t6zw6UV0Y5qmzXuf5rTsD/Y83L5TQdke1N/MZ5NPb0e8W4hV18hs3TrnslVHZWbtzYS4T6dotGW/ZYWPN6nVR63JW0fIZnWFy8xer8l3t3Z0VLu+Hh396uj2XQm36jJuzW4thrPfcX99k+ptjeedxprXdk1V6HerTKXK68vAzT7eQO3jDfT9O2nchn3abq6PvqgyXk/u/oUqg289PK9yvK7in04oau9u+fyItdof3B7v7e5WJszaf4jc3eLjx6Gyypp3q3CK+3gzx6n5x9urf7qXf9sO/csM/tdfxni8OVNvvU6029d7o/4rSjyWs6nb67l3v1DFa7rWNYfica9Ka3Vh7+l7B7K0Zrt3SvD8MOqTbfPNO1mfX4eJwfmbXYd5bpiP2kZfTwDo7QdcUeqt/abvpPZy3vXOSZbHk0FOhVt3jX08aqc/mtyqUCd6PsatdxGPETgV3nyL7N0toR9Ro3Uugzz9pQn77SJDbhapqwhPu90qMgZ7yTH6vSLd6pypPTexlyOlv5t6JHUZuc3eb5X43k7hl97K48tbGfeKeF3EfVrvLcl41BTDp+31Gnm3s9c6+THVdq9E7d+eZ7P3lmJxmWfJuFdicTr7pYn9XYnx/vu8zJfs/ctB2K8rIj+kCCO32923I48fUIRZqM995r0txOoQ2WzOWyW8ZuSay8uNbPjH/eNtie/1j3dv5NkxahfzeL0u3n5HqIb9si9X+n/NMtR+wdtD7zWfVrdNnn69g+rvrhXUSPEvrWd+/0TjW1dufvGkmBOvbvr6lGn8lsvhXpcE/c23z95eaPj0OpYzO8jn60cBzPcPA+Cr/K+37vn+JPbx5YT69VH1LxSpSaXXWbn8gCW5XWTxXZuvjxb4VUXml7czX17di/3X6yI6uf6jKneKdK0m+qTdKrHqrOk6QL23PrTxyXz9GvH9IuPmhvYjVurqfI133DkHnHW91Ke0OwXq4rFPv3E34dnAnbvoLz+Pd3eXvn349QtF5IcU+dbh1y8VefyAIt86/Hr7ydSI9XXrAoNxam6vD87XfH8SyW7hdQn9eM/yfim+U+Ltt6EejSvGj/HyyOnd94i+c/T29tOoa6PuD7/zJpqxL+kvT2Dfl2B8PNqdVfnxLI3npdSaptGuneytEsY11YfbnRKNHfPzsuzL7dLWD2h8v1BEfkiRbzW+Xyry+AFFPm18z8/D6/LsdeZ2p0TnulV7c/b79rtF3zvvfFviW+edb9/I4FZGk/byM/H1m3Wu5wnjl1sYc9xpwE0G91JkPm6V4Hj8+dHcONYZ8dDR3buG32g841FPfnluU3e6J73vyRvbw/cu+z0+vej3+PSS3+PTC37j8QOOOH+piPyQIt9pvL9Y5PEDinzaeL93ue/x6cW+8e47Rt9ruu9LfNp0v3epb7x9jNyHB4vfutD3bgan1sSkpXbjo1xWT2Z8voNbs3HrOuP6+iWrX1GgTtDX0lcFRv94D/6+xLc2pvHuaumoScXj9XS9+Db269ub9cRTly/zcZv9XQ17t/OrSX//a+f3vM/5v2u8OQXqXOx87gr7yxrj/cH7mv/Pg/f/6928WacSkxOjiLyZV/X9Gi63apiveualL7tZg12yv55E+EvLUTNT/dZUgGXMXPfHnQHv9fzQ9br5vy1QM3yf97z7nQtyMmpVijxeX836ERcG3xUZxrO/7PWlY327ddZBt7SX1xbfl+gjD9WkvzzRfl/i8xU6vPHQj/5qdQ7Rj/v42xLfuwP4dl3wVJ7nqrh1YmtfLjp8/c7u372R+e7rrkwVnPK1e/59jfZxjfdvRTnBtvX6rby5+zbZw8+vX7f5VYvBY4+bt37rQ/laot/4XLu3ujHytfP1x6+owDMwVW9UGI/6tud4fLmc9XcV4gdBXm8Wq7YKu1WBr+Tpl0O+X/MulHfxZeL3r6jQ6qRufH2Kyd+/i3ePlvsRNZrWIVtbj5s1Vn0Nq1nTezWcCy8ut7as5zWoWht93fpUa4Q9i71ZF/7+nm7tlb8cJP2qGjzRurV1czkaU0f74+Zy8ESR9vVp0r+qxpQvT61vN2vUvIGmbdyrMdi+xrz5XnhOzPNIp93YwlbdlFh6p2s4X4ped8bIN7fO97OB6wzv1juoyY3u47M1cOvvP9+Xjz7qi3F9zlufgvUvH8Ot56w/b4fXEyz6nSsvykG39vXqoHvYbzlJXkc9z1PHnavEOh48feLeEnznS23xfInXK7LmdGt/88z69zWUT/P1vPC3Na6bjYOt6vXX636pysfb5vUtlC+XTtqtZ3qsehalrlubxqovCT1vJbw8F3s3++/z7du8HvHi9wrUdy/U9MbFyeuX6GsJ5FWbkHffDJpMrZ/2+gH+v1CjJiA9uW7ViNvf3Ap//e2gX6jy+ba5Os+h6P3OVe9R28X1g203CvCdnOu3Ne8U4CraeLwqIO++WPS9ix3vS3zrYoc8/Adsnf4Dtk7/IVun/8ZbJxfhrx8nvLFtMLX1eeP0zmQArdvPz9PSG5t3/3L5ntYvv+JBxt+5rPn49KLm49NLmo9PL2g+Pr2cKf3jy5nvS3x6j/Pji5nTpB67Z3rno1z1nVRZd+4XPC9i5moUuzMVTTjpka+/PPP9ddDqFwTm10sjv2Id8BbWejWg4gkwH25M47e8YS724LH7t+71fvgNiCmTC9p644OYs+6OTn3cuF8+tQ495q3Zus9LrvP/dU3+7z5H+fiLlu9LfLopzDl41q3emedlPFDBvpw/Pw+yv7sxzZrmtb7+2Mv4u9XwbvqGNqZPfJku/CtKPK8h15qULzMw5NeUqAdYPQ98/FWJ2X7TEpzvrS9PFf0VBax+O8/6rQL+4Ivyj1sFauagv/4k3hbg6ti9Aq3XBZX29TcDfk2Jx5e521+mPPx9Cf98Kd6du0vd6vpytffXFKhZal3nrQJ1HaV/Ofz6FQW42jzWrQLCT920ewX4lZrh9wrUYUO/9TFKnVTJvLdBt86E3mH3Sjy+TvO+V0JZinVvKXpnAqfc26T5oVR9uT3opzPE5N1T5b45Q0zefc3mmzPE5N23fb45Q0zePVru2zPERD+fIfb9Gq9niL2t8c0ZYr9Q41szxH5pOb4zQ+z9hl7fReh+awc06vR/fDld+jUF+CnAdm8J6pd3hrxagseHI/Xd0S3PPX5uW3bj6LZ9eYyJ2Z3j42/eFHm3DGxLze3VEwDeFqhv+PRHvzFBuj8eFPj6pLHvF6jvED+XYH66BK/egvibZvmdSeJvx/Ss23zz9a+dy7tnxn13v+H+8X5jPh4f7zfmL9yC+N5+4/PleDs+efbA14vev2aE1+PenpRXFd5uWl3rGLXr1+cJ/t3q/HTrfL8M/Pq7fv2Nsr9bBvtNl+HLepD164f5D/g5yG8+V+z7JYbcKvGtZ4q9K/HNJ4q9XYrvPU9sto8vn78v8fH3Mr/5NLG3Jb73LLG3n8j3niT2tsT3ngc03/4w1Kth+k/Pf/j9H/7013/++S9/+P3f/vSXP//n86/+5yr01z/9/l9+/uP5x3/7rz//4cv/+7f//z/y//mXv/7p55//9O///B9//csf/viv//XXP16Vrv/vp8f5n39c8jwmW2L9n373U3/+s6znTkJW1+c/j+c/P89Tx3harv/vuswrKvL85xV/2+X5t/p4/nO7irU5xu+e/2PXv2jXX7fnDvL5P/pP/3O9nf8D", + "bytecode": "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", + "debug_symbols": "td3frjO5cff7e5njHIhksViVW3kRBI7jBAYMO3CcDWwEufetLrLqu+L9SrOe1jMn1mfGs+rXajWr/1Gt//7lX//wL//17//8xz//21/+85d//D///cu//PWPf/rTH//9n//0l9//7m9//Mufn//2v395XP/THvrLP7Z/eL6u82rn1fdre/5ner2289rP6zivcl7nedXzus6rnVffr/3U66deP/X6qddPvX7q9VOvn3r91Oun3njWG9drO6/9vI7zKud1nlc9r+u82nn1/Sqnnpx6curJqSennpx6curJs966Xu28+n6dj/Pazms/r+O8ynmd51XP66k3T7156umpp6eennp66umpp6eennp66umznl2vvl/X47y289rP6zivcl7nedXzus7rqbee9fz5ao/z2s5rP6/jvMp5nedVz+s6r3ZeTz1/1muPCy3xrNiuTdNHQhIzoYmVsIRv9Mcj0RI9MRKSmAlNrIQlsnLLyi0rt6zcsnLLyi0rt6zcsnLLyi0r96zcs3LPyj0r96zcs3LPyj0r96zcs/LIyiMrj6w8svLIyiMrj6w8svLIyiMrS1aWrCxZWbKyZGXJypKVJStLVpasPLPyzMozK8+sPLPyzMozK8+sPLPyzMqalTUra1bWrKxZWbOyZmXNypqVNSuvrLyy8srKKyuvrLyy8srKKyuvrLyysmVly8qWlS0rW1a2rGxZ2bKyZWXLyp6VPSvnGOw5BnuOwZ5jsOcY7DkGe47BnmNw5BgcOQZHjsGRY3DkGBw5BkeOwZFjcOQYHDkGR47BkWNw5BgcOQZHjsGRY3DkGBw5BkeMwX7BD2IMBlqiJ0ZCEjOhiZXIyj0rj6w8svLIyiMrj6w8svLIyiMrxxgcF/wgxmDgqiwXemIkJDETmlgJS/hBjMFAVo4xOC+MhCSuynpBEythiWflfq35awxutERPjIQkZkITK2GJrLyy8srKKyuvrLyy8srKKyuvrLyycozB515wxBgMtERPjIQkZkITK2GJrOxZ2bOyZ2XPyp6VPStfI64/Nwm5xlcfF3piJCQxE5pYCUv4wTW+NrLyNb66XBgJScyEJlbCEn5wja+NlsjKPSv3rNyzcs/KPSv3rNyz8sjKIyuPrDyy8sjKIyuPrDyy8sjKIytLVpasLFlZsrJkZcnKkpUlK0tWlqw8s/LMyjMrz6w8s/LMyjMr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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index 961ccdff05b..6299007332a 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/uhashmap/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -219,8 +219,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/+29CXhkSVYeejO1lVQlKWuRaq9KVVVPz/R0T2uvKmxwASqm6Znumelllp6Z7q4qSZhnmxnGw2IwODHGxg8em40fBtv4sQzGmPHDYGMMGAwYPgwPbGwDZt93MGY1GMzjdt2j/PPXf0/GVUZkptSK79OXVzfinnPiRMSJEydOnKhl99PRP/2rFc+jxW8Nfo9lncnybhW/i72lpYiwFlPRWNsHNNb3AY0j+4DG0X1A49g+oHF8H9A4sQ9oPLIPaJzcBzRO7QMajyag8aWEk3hOdD5Z5MI4F3a5MMkHaz4Y8s6WN2bOrKNZebKKf/Hy/d/J4v865EcU9kuThDcm/BuL15cnRf0i0r8yCXxPAP/eJMBMAH9xooCz3WrD57pYP6hlqdppfT1xPe9NU90yqIvhHk2De7NG+DKqZ0b4p7KkfWqpRviMHuaPPU9bmVabnhrljbZ218Pyxlqd9chTLo9OQznuW3UodwWeP6x4Ttsf78uNhG2weNKps72baGU7yfg2Au+Mr8bnI1ie8iYhb7TViWeq+H8U8CAso2OMyi8U/88Wv+PwjX3fEPjHCX8H3eId82VSlJ8U5fO571zxnM95Nhd8aKsNL2Kbrhv8jTTwVwz+bYCfxYO/aPA/LA39O/BfC/BHE8B/rICfgjcfDrRHhL+jBz2ehvc78F+XBv6OnvX6NPBXDf4TAD+e8WZ5p32fTAP/nsF/Qxr4Wwb/jUngr+70nzclgb+2bfCfSgJ/fYf+p9PA3+n/z6SBv9P/n00Df83gvzkN/J258S1p4F83+G9NA/+GwX9bGvg3Df5zaeDvyJ+3p4G/afDfkQb+jnx7Zxr4O/Ln+STw23aIF9LA39ENX0wDf0f+3EkDf0f+3E0Df0f+3EsD/67B30wDf2d8bRXws73DXuIX+dooX1tvP9xJu7IPoA3DdNXZbLftBm0p+d9YF1ivI1j4vX1ra/JxyIutY9YKXiSAv2J1nhC8wDoZ/mnBu1rJr8HiPMM1RbBS2ZRU3ZB+W5s3qDzzoAzWREVYkyIvRZuOO/VG/NMOrVyPPOFavxee5OmxIYVldTTeIC+r9HeFB2E9TngmIuLB9rR2NzxHIuJBWGanMZk5KWiw/j8FeTFtOtb+tqdkNkTGiftIWB6fs4JufPdRxW9e779I8xPu7YyId8y7MUHPZJZULt6dFnW0ZHnHAPc45U1DHsuQGcjjOWOW6oN5DchjxyBMI/Q/8inH966H23C5nKXZbDd/xylvUtTR8rCfHKE85Bu3J/ItRX833mN/R5xGWz3b3Vb2nGXt/m7vPrX4Vf0d93pHxDvu75OCHoaF9GMfNVk5RuU/Heh78NH7z6qtuD0Qf7/aA3EeBR5VaY/PgvpyeyC/FA+99rBySj70OkcgLJ5bZyLiQVimD1hfQPnDfQHlT4q+cLyAh30Bcc5CfbA8PudpjN79g+JX9YVZ+G5EvPP6gpWbFt/ViHfH0/BuLaQPIP6pTM8zt+LQs8Rt2Y2vxrsTgtYG5eWJ9dcTAs8JgWc/wdoqYBlvkJd7HfvM5xiwTkaEdSoirDkBy8bhPLyPaYMIHYeGf4poTTUO54ke5g/z7rSgtSHysG6Yh3hOCzwNkcdjJwYsy0O5O0ffocyZpTzs248TTOyrPE/XIc/Webne/B2AK/+zNdZYpn14NlrtfCz/2MNtmN9VvJulMlhvpXOfoDzUf09SHs4TBqNf+oC1V6g+gGMJ+/gYvfuPxW8MfeCYoCdEH0g07oP1AcPfL31gTvBVrYH6IafLZIxq53wczWS72wzpM1hodzd/CiWHbJxWkUM4TpUcQv8W5q2qH+8BoOw4Rt9NC9qtXdSabVrgVvANxjDYBYw3oXYBHC/I1zF698vFbyq7QLd559czjVPNO7Wsbe9h+8FvZm2YS4UgOcjt9nvFb7/sOfVMtwfLxdRzruJnQ9DD/LLJxeCcAP4oGVEnPqi1/wkH73HCm7fTQ492wlRzOeLltrB6jpeUnyUarPwo0PAI0XBM8AHpQr++MpqnKtI8FUDzpENzw6EZZQS3HfbhhlOe5T/DP55pnqDMOibgc5+chToulvSNeqbHsM3fie03K8zzLNu9J6J4ouwrSjdWMpphKdxKVzBenEzMixNdeHGS6D8pyqPsaBAvjjuwuvHidcSLU4l5cbILL04R/adE+ZMOL044sLrxYqN1sHgxK2DVs/KxhbhQnmTiG9S7sPyDhYzK5fera51w+RuWQZhnZV8D8B4SsFkGZ5m2P/Ceu5o3Ub9Uexi2JuF9B+x3Sp/E+cLgqT3HGeKBfbcGcn+lkPtqvzj/u1X8v9hTWr2p9uvjwV+/O0n8iAv/+k3e0zYcyLs0uvyKNX8G3V/aLAz/VJZJPeJWFHraNgu1jlV6vtrX57U65nEfnBF4ZgQetX/Hfru9wHohIqxnI8J6PiKsFyPCilnHZyLCeiIirHsRYd2NCOupiLCeiwjrTkRYMfvXZkRYMfvX0xFhxeR9TDkRk19viQjrnRFhDSu/YsqvlwPvNyPCitmOb44IKybvY+omMfkVs0+8NSKsmHNaTH7F1H1j6iZvjwhrGHmfP/OaeRjqmD8fjUiXnR83eDsxVor/0Z97kvKs7L+s3f+dFLRGXI+vhvgvNBLhrhE+4zW+Q/zKN97onhJ5vcSt2FxbXVrdvrl2d3N7ZWvz+naN4But/K5srwvLe74QJ9LwelHFBzoOfM3TKOQ1KG8M8oxGjA+Udu9kZTGE/4i/Icrz/ltoWzYy3bdiwZrcI6wTWecYQDmhzmjyuY1JUZ9hOZvBZ5FmRB3zxGcBvqkQHDHOIik5PU15lo+8m0zDu2B/L8M/JeqRwnaq+Doq+Kpsp5PEc2xb9hXtZU4eVlhbBSzjDfKyVvJrePhdGZ9jwJqNCKsREZbyl087l4b7fxv+qSzl3Ngeh2ov/bjDu5OCVuWLiHXDPMRzUuBpiDweOzFgKd8r1gNQ5oxSnvJ/UPrD7SKvmx/ez9XauBBfqP+3lX8I/L9/sYCp5nWrt/LxZn0A+yD7jeB42YlJmOn+cKv4f7HHZDyyPXjUB1T/rFN5fEYe2rvfdPSBqud2pgU93lmbxL4SwfqA4Z/KksrFJW5L5Ou04Gti//gd/291Lka1M/p/Y5spX3DP/1vp1Z5fBMshJb9QDrH/92SX+plM82SH0sFZb1R+OGrfXME3GGrtwWfN1Xl6y5sRuK0fJTrXsGvtiTJKrb3qVJ7bj/0zjxYdUMmoqrqlkv3d5qvZeidOtFfxfIVtxzarE/U2zE8unlWbcntjm3J7K/7u9zPK55z2rnomaUbQUxP0qXbsj+3J52eI3/c16p+ngD9qHLIN7qTAe8rBe5LwKn9zZddDvNwW6AOnyh8nGqz8K4GGR0r8mpEPSBfbuxTNoxVpHg2g+RGH5hMOzSwnsC2wD59wyvMcwPDZBxjroPoS2+6t/ArUkf3NpwXNOIbZ33wQPtYzDk+6+Vhb/UJ8rBVu1BkeJ14k0gVXWHaU8WKO6FdnGVF28Pnakw6sbnox+5ufTsyL+S68OE30q3OUeDbyFPFizoHVjRcbrU5enEnMi9NdeHGG6D8jyp92eDEvYCnbNrYJ8wrnC/yG5bCVfx3oY2+od8KdoW+UvYdt608BvCcFbJZ/WabtHTbmlb+5fYt66awoxzpk6D4Hxo1kPni6BPPirUL+qz02oysvt/5oZ71Rjx8tvkms267wPJllur83iE/e+RBsN7W/xfuMyJ8Zhz+jDn8SrfVWvD7s6UqKn8pepNb6PGcq3Go9f9jfdH/jeVfFyFU6SNX+iTBGi28GyU/sb1X5yXYqz97EdiGUsXl6nMobD20dwWXYnmDlPwFk7Bsf7aQP49DymhjjfHI/OSLqrOwVWEeeaxA3zzWIm2MhHhEwE+8ZL7JMwTWwmhfr2e6+hP2cbT5/y7FlYBzUEfGO203FV2ZYSD/GhjV71hiV/0yg72kavyliy+bpduv+b0i7D9rPgts91M/i8xO3uxeXN61PXPi+iuGfyna3c4p9lZlAvqr4sjPEc5w/eE+2qg1yP8DaKmC93H0j9grL299MZL8K9rMw/P3a3/TsY4p3pwStDZHHfhbKRnJK4GmIPB47MWBV3cM8QnnYt9nPAvuqzZ/d9q2+mewOhi/Uz8LKHwM/i28lPRBlOvtSqPiwar+rQXnYPzmG0n71s/huRx+o6mcxKeg59LPYSa6fhfJnPah+FiiHWNagHGIZhWtjXh+iHOrVzwJlh+dnwXpjqJ+Fgm8wPD+L/e7j/TOOrKnq4z0u6Ok27/xCXeMs85cYpXpY+V8GG/q1QqAc5Hb774nbrSboU+3BcjG135DiZ8gewx9QPzsO/FEyok58UP5Kxx28DcKr/B7UGlT5BtWonmV+D7wPZeX/2PEhmBR8QLrY78FbN4fSfCSA5vpIOc2zDs0oI7jtlA+BKs/yn+GzPVjteym/Re6TR6COiyV9o57pMcx+D4OwkY87POlmI/f0f4bl7Xfkif0eEumKKyw7ynhxguj3zhJg/WZF/U9U5MVG62DxQq2P61l5f0JcOIYy8U3ZXsn5Ylzm9bg80gmXv+Fxh3lW9grAuyRge/N26F6/fYs6lbKnmx6u9CS172+0WZtiGVxP3G5lHXW38q8EGffmRzVMrG8N3m20yukLuTsRYb2eYKl9JxsziWzPq4l1zhWvH2GdDH+vezeIayrb3W9SrNNV3bx7Fz1/lap6soKVeM9xp02POPVG/NMOrVyPPNm47ZUneXpsSGFZHb19sJD+rvAgLJbPMc6fqr7H9yJOR8SDsGyd7p0t2O/nRd4A81Ov50UmBD3d7B9Pkw4wAXQqHeBDW531sPJ/8uo2zDfTvB7qR8FnH5XNTNnkWRYm2kt2Y+2rs0xKT0T9mdecLzh9QdkM1Tk85RvDZ6vYz/5WFP6sramxGA/+6g211owIf1PFPYkH//qiWhPFg7+yxGfBDQe2fZp9leX1EHmP+KeI1shj1d1XUWfSjXdzgtaGyOMxpM4WqPvaFKzZSLDyxDHMeoH1QkRYb40ES43/YeCXkhu90PVEKx6s5yLCejYirHdEhPWWiLBejAgrVr/PU8w+8faIsO5EhBVT5sRsx5i8fzoirJjjMVYdlY7TC11PtuLBitmOMWXOOyPCGtZ+fy8irJfDnLYZEdYbCJZ3hiBPZkviMwLfUyj1ae0uyzc8H9rEa5kbNcJn/MZ3iF/5hhrdUyKvl1im6zdWtteXbty5s71yfXtp2z0LrXxCvb6k1kXG6zT3ui6vqXNac8DXPI1C3inKG4M8o1HFMk3jL7e8FsJ/xK98cvmM1V79e3EMV4Vl8UdVTJSU9uQ83W514kllTzabvopHwzbE1PFoVBwTLx4N2klwnPKZ7x9ybIhVz1wcEfSExJhOZNMJ9t3lMwSJ9gbcMwSKr1XOEOQphd//sMHaKmB5tsuqY5/5HAPWXERY8xFhnRawEsfZCD7LY/iniNZU49CL46F4d1bQ2hB57J93VuA5K/A0RB6PnRiwLA/l7mn6DmXOLOVh3+azPNhXeZ4u21P8E9pTVP6J+O1Gq52P5X8a9hTrRSOovWCrt5rXOXaLii1gedg/DUbisbTI/QD1AcRptNWz3f0T+8QYvTta8E3pAypOjhov6hyGlQuRQ2fT8C5YHzD8/ZJDakwrfcD4cy4NPTtnec4LelQ741kebDOkz2B5Z3lQDvFZZZRDLKPUHo+SQ3yWZ7ZL/fgsj4qzqHRw9iNQfh/Kz7gsjuNIdrDXHtccWRNz7VE277xyVOMsO8szQfWw8q8ebcP8izTvHMR2W0rcbjVBn2oPlouJzoC6/AyJJfpnqJ/NA3+UjCizvSHeeQfvHOFVZ3nUGhTxcltYPcvO8pwkGqz8nwMaQs7FIF18lkfRPFOR5pkAmjccmk85NKOM4LbDPnzKKc/yn+HPZZonZTHsWGZZ+cehjoslfaOe6THMZ3nS2Er9uJ1HHJ4oW7WyoSgZzbC6+QPxWZ5BxO1EXvQ7bqcar4nXQG7cTuRFiridobzYaB0sXpwUsOpZ+dhCXChPMvEN6l1Y/i7oVdujnXD5G+y3fH7Ryn4kwNsSsFkG50nZH7xzTXh+1PRLtYdhaxLed8B+p/RJ7+4XFfuO75V5N8j9lUfb9Ci+qTNHDO/Ti4e0Z5Had1WqPaW055TC76rkc0rq3PyUyEtxV2Wo/7eVV2cHvLsq0+yR6Lsq8WxCnkYhb5ryxiDPaFT7u2l8/lcWQ/iP+NW+I+u9VX351X0bMWBN7BGW7RV759ES3VO4s9/unbdE/N55yxrRrmDlyc68eOdZEp/dvGE0HetSbz5fg210jGg9lobW1cTncNy4zlgnPgO113N3iKtf8SG9GEF58sY18qBXGcF9JvXZ4WNOvbvNycdK6pGn2604PMnTY0MKy+povEFeVunvCg/CYn05hb8OtnvMOJ8NActsyAfZxvu1iW28aee/pRXlH2JJ+dUcozx1dov9MdScgWvoccrDNTjqBJxG6H/kU/77rofbcLmcpUmB5+XEX9RjOCn+Gp9C+at0u2OUp+ah2Swr1TsO8lnlH3DkSYyzygwL6VdzEfup/xDQ97bCLpJ6XuT5N8W8mKcqfqyDjkHL81VoDNqf7dNesufHOmwxaFP7sZ4K5GuVs9J5Yh23l3Mswwprq4DFc6XBV7+Gh9/tZ9/TvcI6I2Al9h8LtgOz/1iivR/Xf+yMw7tzgtaGyGPb4TmB55zA0xB5PHZiwFI+YuyXizKH/Vixb7MfK/ZVnqfL/ImOjrVxod5U1Y/128GPdaaAqXzReI9O7WMrP9Z5ylPz77D4seLeIY9tz4/1dME3pQ8oPxJ1lk35sVo57/zBsPqxpo6dsh/8WFU7x/JjRTnE+zsoh/gMD6532Y8V5VCIH6vyTTn0Y+3kTWxb2aIja/rhx7o6pnFW9WO9PtaG+fE07xzEdvvAxO1WE/Sp9tgvfqyvpX7WLz/W10I7DcqP9XVAw37xY32jQ/NB8WN9M9Tx0I+1HNahH2s4Lw79WNtpo3WweDEIP9aPAr3qPWOdcD0/1nHKs7IfA/A+WsBmGZwnZX8I9WM1/VLtYYT6sbI+ibYl3jfz/Fjtu78Kct/8WCcF7PzvVvH/Yk9pdU3tWceDf/2G8rOKB399JW083+vXPb+LxPGfgm0ihn+KaI0sz5a8MahicnP8Kvy2IfK4j6v1eEPgUbCORIR1PBKsPHGctV7oOhaRrhcj0RWzjnl6JiKsJyLCuhcR1jsiworZv1im9kLXm1rxYN2NCOupiLCeiwjrTkRYMcfjZkRYT0aEFXNsPx0RVsx2jCmjY/LrLRFhvTMirGHlV8y54+XA+82IsCwGrMHDO9bz/9V9Tny/+s8X67RhiP96PBHuGuEzXuM7xD8t6DG6p0ReL+cDl7f+dGG2fG97eXtxe3V7/XqN4But/I5t957NGssnjrW7qs4H4p58nkYh7zjljUGe0ajOB6bZK19eDeE/4m+I8ryfENqWDYGH47/2Amtij7C8WLKzJbCzLPkZup39MuMR7lsdEfWuZ7t5iueV+Z7NX3X2H9V5Re/ewJqgJ/Fdf6tpZXrbJqzOJmOdeJ+8l/shDVe/7odUdfPaGe1VPHar3v+mYPXrLKZ3Lybin3Zo5Xrk6XYrDk/y9NiQwrI6ejERQvq7wqNi+qc8T4ft7vnY7xUPwjKfGeUTyTIzja7o+2AofbCqT0ujMAyrOaXqWmBC0BMyHzcGwDvVllV5d8bhXYz52Juf0uqdS8uh8x/HQk89/50M5Ks6U1gWCz1/HoNnzEM8oTHH2ebcC6wXIsJ6NiKs5yPCejEirLdFhBWzHd8SEdYTEWHdiwgrZv+KyfuY/StWv8+fj2ZxYOVps3X/1+YFlme3iv8Xe0rLy2reiQd/5Y6yB8WDv3ZX+e5FhL/pnYNL6yu3vhg6Zxv+KaI11Zzt+eLliedsFZe+QXl5YtmlfLvUubaGwMPjpRdYU5Fg5Ynns15gvSMirGciwYrN+5MRYcWiK0+sx/UC68WIsJ6PCOtOJFj5M/vfDAO/YveJJ4eUrphy4qmIsN4eEdazkWDF5P2wyq/8eTwSrDzF7F/DKAvzZ9btD2WOT9ebW/FgxdSZYsmJPD0XEVYs/StPsXSTmH0itiw8NaSwhnXdEXN+POiyME+Ha9HB6QCHa9HDuXY/zLWx23GzFY+uuYh0xdQxh3GuzROfk+gFVsw1csx+H8uek6dhXG/n6VAHGJy8P9QBBtfvD3WA/d+/8rTZikdXLB0gJiysY7e4VlMTnTgxHsKI+NbuXeFYAV8E8RSnC5gqDgHH4UbfJ/ZHR/9vg9Ev/zfzEyzzfzPa6lQen5FP9m6uqLDyf1N33nj3i4wLetLGT1hZUb6bEeEve7F608YQWl6vET5rB3yH+KeI1sh9cccXwItRlCf2BZgXtDYoL0+se6l4QcrnoCHwsHzuBdZUJFh54nm2F1jviAjrmUiwYvP+ZERYsejKE6+rhqUdX4gIK2ZffUtEWDH59WxEWLHGUJ6GVU68GBFWTN7H7F8x6Xo+EqzY8uvJIaQrf56OBCtPMcdQzLEdcwy9NRKsYZ63j0SEdTwSrDxttjphqfWS0otzvzjj9bvf85Ef9d6M0ij9bwH3DFnZ5aQP0He3W7vh1eh5BOBkBPcB8V3IYjjRBZDuYlhdoFV1MfzuxIvhGuUh/XgAqsyo8TFA3zuKAIjKqGFtlfZCuHZ7HHHqg7TVBT+QhxxI5BOd9hiH70bEO26PmqBnWnzHvEsUaCA4eKHhn8p2t3OKxf2RQL6qgCZHiOc41vgw9F6DTgwzrK0CVlqj1+rWtMDN/TaRUSr4QiQ2SiU6XO0apVS7VTFKxVQ+8sQBpIZFiXwiIqw3R4QVk1/DarCJubCI2Y7DaoCIaeAaxoV+nobVyDKMfTV/jmmgj8Wv/PloRLpiju1YGy15itm/htVQGdOIF7NPvCkiXS+HMbTZigfLAmV2c2j4YXJowEttQhwarPzPPtSG+aPFy8Tr+9XEzg07gcHUZeAqEJG3Xudfg8V5hqtf62lVN89OgXYstvNVvTRdwUpso1vhfq7qjfinHVq5Hnm63YrDkzw9NqSwrI6WpwK0WR4GVRsnmCoQWr9kRur+1S2YIPevXmSG4eqXzFB182QGBoVkmaFgTVaElTioaLDMMPzTDq1qzLDM2CtP8vTYkMKyOvYaEFXhQVgcIDJFIEps917Hr8KDsFguJgqC2jddyrt8SOlS03vkK+KaypLKfPdiJW9OxSDFyIMyWLMVYQ0yGDLymoMhK1qVTsByca88ydNjQwqL5WKKgLZ5YrmYIqCt0mv2On4VHoRlclEFzjUY/Qqcqy4R9gLn4t4X7gvxhYvLxeZOjMC5NUFPN9vA+hGNM9Q2YOW/A2wDNwuYs4Ium8dnCTbOvaq9xykPeW8wEl+ou9MXzAaDfQFxGm11Ko/PyEN79yFOX6i6J1wX9Cje8eETpJUPn2DAwWnKOyPqaO1xFvJStMe5Ah62B+I8AzzC8vicpzF694TTHlUPIs0LeqbFd73KT4Rl885strvePGbOQ16KNrpQwMM2QpznoD5YHp/zNEbv3uq00TniHb/zxoyVU7zj/n0hMe8uZrt5d8Hh3UXIs2fknb17MSLv5gU93vhE2W5yJeQypUQXhAf7QnHQ00RrKTfoqdIBjHcXBa2NbHdfYP32osBzUeDZT7C2Clgs199T9Ptcp/jbRzq/R/lpPq9q/mP5Oeg57jTwo8oc91ccGaD6Hr7z5KeVU7xrEO/OJebdecG7cw7vcF6yZ+SdvfuUiLzz5CGuH1B3/7QjGifq7nyAGuth5f/nq9owP12MDaWrnyFYlveZwJMXHi3/nnXLg6jP/53E+rxa29VKfg0Pv+P543hEWPMRYZ2OCEvp24nleLDPquGfIlpT6RdniR7mD/PunKC1kWk5bs+Yh3g8fRLzWCeIAUuNqzP0nbLvKD8M3g/Fvnq7yJsG+i2hLH9/gB0Gv91otfOx/I+ALP8akt84x1i9LU/JO29tb3k4XgzGsMzrRlvVef3fOHJbjRd8x31vTtAzLb5jOZRoPR68zjH8U1lSubjEbYl8nRN8Tbzm3rkoVa07VDvnY2Um291mSB+u3y29vnX/V8khljUoh1jmKruSkkO2lmH5UlY/k2mzDn3KDo7lRjK93le6j4JvMJT8Yrsl0sC6pZJt1o/mCdet4v/FHpPx2doAZZQ691Gn8tx+rLP/V0dGqXMoaiyp/mXlus1X/43mq+NAJ89XPJ9h+R+D9cZjxQZAiJ0a25TbW/E3sf1op71tDGJ7I06jrU7l8Rn5ZO9+zmnvqj6kc4KemqBPtSPPU6ntHoqfZwU9zK/foP55HvgzUlJ3fFb2lvMO3nOEN/956NHO8mrPAPEyPVbP8ZLyvAa38r8FNDxCNMwLPiBdfMm3orlekeZ6AM2/79B81qGZ5QS2Bfbhs055ngMYPtuzsQ6qLx2nOlr5P4Y6LlIdjwuacQybvpBYt15hnmeZtomU2fixvOK5WlMwLIUbdYbHiReJdMEVlh1lvLhA9F8Q5VF2nCVenHNgne/Ci9cRLy4l5sXFLry4RPRfEuVxj+I88eKCA6sbLzZanby4nJgXl7rw4jLRf1mUv+Tw4qKApfxLsE2YVyh78RuWw1Z+rtDBcvl9drIT7hx9o+w97N9yAeCdEbBZ/mWZtnewbxPOg/Yt6qXK94R1SM8ejWtiDgikbDNKl2DbzJWizij/DfZIq/290ZWXW3+0s964bhstvkm8ltnp72pdgWuyMl0Sy6u1WDcfCeZPw+FP3eFPon2EFa8Pl42/Mn56a31v/g1dz1ftb1in0eKbQfY35E/V/lZmw1Xzbl3AQh57/DQaD/r4LfMByRPbm9guZL+WHqfyKNNHRBmeb6z8BsjYNz7aSR/7X2Me+rdyP5kWdVb2Cpxrqvg54lzDfo57DRSN5xj65a97u9VJA/Kb7beJ/NUXWR7i+l35pNez3eMAxyjP4W+B/sV2GOUjP+Pwri7oUbzjM1CJfI6CA30z70Jjm70QkXcTgh6GhfRjX+YzXCiHrK8nPm8WvA/D5/5G0tDjnvtD/pT5C+C3bFfO08sp9pb1e+uHHw3rnk+f7Pwe5Sf7mx1E+fnxA5CfI8S7/So/WxF5NyLoUecpcc/nb0xqnLgORnlZo3pY+ZlXtWH+LTE2lM7Ea3CMX5lR+TyZLsLxKz8TeHi30A8nqUzkfrE6rGeX9+o3hrimst1tlWJeUnVD+j39gOOSKlgTFWEljmGwwv1c1RvxTzu0cj3yZOOjV57k6bEhhWV1TH1+m22TKc69Y7unPPeeJ5P5JofV+jfxWfWdudR0DpxLEec01AfL43OexujdP3fm0qpxU9Q8NZntllG34vBmbVLQFAn23bT65dKa8mm3pOKicgwG9KVg2Yd7ijzX4V6k59OKfZ3TCP2PfMr70bsebsPlcpaYv3m6Vfwu9paWWb+NCHsz7Tnr4egXHMMA+wXq75xUv0AbcJV+cZD5y3ZIdR41FX+VTxnbWudEHQ+yT9mPOnNgDJ8y3nfLovFm5Xo3/8SfCliroq7EPjtW/t++sg3zZ2l9quKeKbs99yXU6XgvQMUfSisbwmNcGG3KB8GLcfFrTj+rGm9KrWcZVtmdFuYrM0bl/wfQt0X7daliWN1u3f8NafdBn3/jdg89//aHids95jpoP55Z2yss79xJIr/C4PNvhr9f5048v0XFOxWzoiHycP2EeYjnvMDTEHlsE4kBi9f9WG/lHzFCedi3+fybikHSbb6em2rjQnyh59+s/D+G+fpMAVPts/O8q/xKlF7I59qVj+t+P/+2UPAtxvk35c90eP5tJ7nn39S+40E9/8Z7I5iHcohlFK6D+A4dFcvD0z+8829Kdigdmffn1b6Y2mNW8O39QV4bfIAja2LqiGXzzgdNaZxl68QZqoeV/+CpNsy/SvPOQWy31yZut5qgT7UHzxupz3Mqfnq+31b+TdTPzgB/vL1ze1bnSM84eE8TXnUeTfmDIl6mx+pZdh6NzwdY+WeBBj7bNSn4gHTxeTRF80hFmkcCaH7OoXneoRllBLedOtulyrP8Z/inM82TMj8MlllW/kWo42JJ36hnegzzebRENtAV5nmWad8G5omKv6RsuEpGMyzPDzpPfB4tka64wrKjjBd8PtaL8YL1U7G6zlbkxUbrYPFCxe9QdjDkgRpDmfgGdQ0s/5dBl/i4qU64/A221SzlWdlPAHgfK2Cz3MmTWnN7Z7DsW9SplN3T9HClJ6Fc5jsklL8X7gvdbmUddbfyLZBxf/5l7u+F/KqV/GZZFuTvNZKmbq6/F9L/cvL3UuPi0N+rvI4Hxd/Lyvc6fhUehGXrYZZbebpV/C72llbS+ov1z7+B2yTUfwTnAk4j9D/yqar/CPp83yp+F3tL1w+Kb4rXdp5PGPZZToe+P500Y16o709q36qYvj8jlKfsz9aeiWJ37tiijL9lNiGOa4ztgesgjsXznY5tr2pcY2W3SLw2XEy8h7Sjq3WLeWP4e/UHQFxT2e5+1699ca+d1b6jByskXivCSryn6sY9Ql4bfm8PM6RNVb0RlulkLC9j4FGxz0Pk2aDvCGF5FnpHyE8llmfd9ph+bkrjDPVFtPLvBd+GXyTbidpnV3Mb32tyEOev/96n9lbyPO3ctrYYOl9wHPHU84UnN5GvVeKI5+mNrXa5XuaSPL09Iqx3RoR1JyKsd0SE9WJEWE9EhBWT92+OCCtmHe9GhPVURFjPRYT1toiwnokIK2Y7PhsRVkzex6QrplyNSdewysIXIsKK2Vdj0vXWiLCGda6NOR6HVX7FbMeY81DM+TGmzInJ+6cjwopZx2GV0TF5fy8irJhydVj1iZh69JsiwhpWnSlmv9+MCCvmGIqpM8VcKwyrvhpTTjwZEdawzmkxdblhtXW8JSKsmHr0sPIr1rydP09lcWDlKZacyJ+PRqQrpsw5nLcHN2+/oYB1kO9l/MKi46e6l5FhlZ2Zmif6rPzXFfSl3S9dW7E9FNzzrGWduC8mwl0jfMZvfIf41b30RveUyBvtgda1e1tr61s3t++uLK9vLq5t1gi+0crv0D8//1P3uqi9LON1mntmVrfV3QKXgK95GoW8i5Q3BnlG45Fstx9OmjuDVrdD+I/4G6I8n/8KbcuGwMPn9HqBdXyPsE5knWMA5URIrKnU9+0p2X1W8LCq7P43juxOcX+hkt152mh10mflv7Uvsntx8QTAzQSuMn6oM1Ze7ApuzzJYrydY8w5dFxxYJrsRlooHoHxRee5KGdsA8Vk98J2anxLFX1oK4Wue2HdCzaUxZVRq2cnyTt0/26/z3Ereqbscq8q7H3LkXdU7BtSdWep+plrJr+Hhd4xHtYMay9xGicbrIvc1bCM1f9az3X0N++QYvfsZp42qxliaE/QknkuW0+pv/p2PWCfUSctke6jsNVz9kr3efZZ5CpFjMWVi2vVb+J2m3vrtfEk98mR+r73yJE+m+3PsNYOvfg0Pv2M8CIvP8/F9muo3FA/yLfRu9T862v4GvyuLhfahrXY+lv+To22Y/+7Y/WflE+ytPy5Snjor36+1idmQytYmRludyuMz8sneTRS8UfOAii+A77i91R2WNcpTcTbzZH1g19qkoC9vx2OH7biTuB1P9akd2S++bM5Q9hvkdZ5GW52wbhXvF3tLyzkP/gLFsu3gXaszD+8mHi/y1J3MIXcaXxa8MFiXBCzvnEK/1gFGS9k6AGN5MB+wvmP07gGnT6pYRp7ucU7Qw/MZ9k81ByGMMhpwPcr3chrs8Uzr4hxPyco/AnzgeEp4F7XBvCRgejTXBM1Mw78FObpUPMeMr8txB5k3KOdUXfO00eqkS91Rm9N//Vgn3HMCLn57CfKx/GcCTz6A5ha1DlZ31pfJR6TlnKgjt8+fgz7C8aiUnFE2QivfFOVxzJ6j+mAdmlknfdZmG32k7xLRd1bQN8D5ZTXnwefQ/NIhB1vh9VX8WRDlm1DG2q9B5ZFXij+XB8ifeYc/av+yav/BPsJ7Kk3I4/nBi32s7MFqzLB+qfS5tPtl7bm8WcDDuRxx8v5zE/LsOU9j9O55Zy6vuv98RtDjwUL5yXNys3g/LsrznIPlN505uSloUP1RjTFs7zyNQl5sHfd9NMYWgEYbY5Z3BfJMx21QnmqPK4IXVwQvFCweh6inNSkP9bQFogF9DkwHQVsLzv9Y/j0wv/+fzvxu+Ibl7C/vM4ae/f14Z4xW3WdcEPTUxP8hY9ToK7vP/lxJfT4Z6vPGRzVMrE9T1EeNUWzvPI22Outzq3i/2FuSY9Rbh6IuzGMU1wSsVyufjUuCFwrWPOXhGOWzyWothWNLxUacg3Jm21N6NO/X2ZyldPo8bbTa+Vj+cxw9tQnfq35bVQ9jfQHn2YWskz7j5ec79C1UpE/JZhy3rEc3IQ+/5fbkujSpLlb2i0C+fiPJV9W2ik+8fmoCLqUrb7Q6abHy/7iPfGXbTRPyrgTA8nBfFeURJvc5pMu+VTIPbUp5GoW81Lo/8mCsFV5fxZ9rovxVKGNt06DyyCvFnysD5I+aE/badxU/sY+wvEfeNSkPZTLbzpS/Lo7TED1d2SR4XH+D0NPVOgLl1zeW2IeQ1nlBq7I7IdzrFee5bntPLBe9GG1IE8doU3Ho1FqU9zr2qy/090Rci6r7VVL7wfVrn1v5VmGdeJ97r/G8EFe/7gxSdfPaWfnMeLAuVISV2B/I9V1AXrOvYSq/AVt/e/74e8WDPOR4Xp48SzSeduSZ6dMozy4KWutUHp/zNEbvfj6xPOvmc/HLxzTO0BhtVv4xiNH2azTv4dzm7dVfoLyDOH/9Tp/au/93zK0th84Xw3DHnHfXpZLxLJ/yxDHa9jqX5OntEWG9MyKsOxFhvSMirBcjwnoiIqyYvH9zRFgx63g3IqynIsJ6LiKst0WE9UxEWDHb8dmIsGLyPiZdMeVqTLqGVRa+EBFWzL4ak663RoQ1rHNtzPE4rPIrZjvGnIdizo8xZU5M3j8dEVbMOg6rjI7J+3sRYcWUq8OqT8TUo98UEdaw6kwx+/1mRFgxx1BMnSnmWmFY9dWYcuLJiLCGdU6LqcsNq63jLRFhxdSjh5VfMeftl4MNJuYYGlZZeKhPDE6f4NhxuC/C+00XIC/FflOqWA9fWjg8xYj14MXIUftluO93huiz8t9c0Jc4ftua8rOtZZ24LyfCXSN8xm98h/inBT1G95TI6yV23I07q1urS4ub23e2766uba7VCL7Ryu/Y96wpyqs9NuP1AnwfkddLyr+vmbX5mqdRyLtMeWOQZzSq2HHNRPSH8B/xN0R5jh0X2pYNgYd9dHuBdXyPsCx2HPpUVDnXn/r+PiW71bnkqrL72x3ZneJcf2jsOCv/3X2R3Tp23MWSOiA/1JkB5ZPC/LjYBRbHjjvj0HXJgWWyG2Gp+JDqHCXPXYliIQXHjuP5KVHcgqUQvuaJfTrUXBpTRqWWnSzv1NnVfp1hU/LujOBhVXn3U468qxo7Tp3hTx07js9nqDiCicerG9dDzZ/1bHdf8+J6/KrTRlVjXqk4PYnnkuW0+lvbV/eywwvE78n2UNlruPole0NjPnhyLKZMTHy+fiVEL0D80w6tSl83f9xeeZInjh2XIqZbnvjczOWIeJBvxt9ufsxjM+1v8LvQ2HFW/shMG+Z/KJ6rxhXjM4IqZsyw3C1utNWpPD4jn+xdo+CNmgeq3uegznLVKE/Fp8qT9YFdaxNox7nDdtxJ3I4X+9SO7K9fNmcMOq4Gx47r4F2rM28B8saLPBXvbYF4gd+NiHfGC3XGeIHy1PmJfq0DjJbQWBYLoh55GqN3r3H6ZNVYFhcEPTyfYf9UcxDCKKMB16N8/hXPkSpdHOcqLL8OfOA4NSruWVPA9GiuCZqZhu8COfoBxbM6u1wr+TV8/I7bCeXDJaL9vFPXPG20Ouk6I2Dl9N8iHeGCgOvFQ7Pynw88+VCaW9Q6WMWTLJOPSMsFUUdun8egj4TEPlA2Qit/RZTHMXuB6oN1uJJ10mdt9kQf6WsSfecFfQOcX+T5/w452Aqvr+LPVVH+CpTZ0d2oPPJqgDFzJH/OOPxR+5dV+48Xlwp5x/ODsh+HxIfDMcP6pdLn0u6XtedyqyvO5YiT95+RN8jXMXr3Ec5cXnX/+Zygx4OF8pPnZKOvLJ7r+ZL6/CVnTlb9S/XHAcZokXGpUG7YGLM8jLliOq6Kr8LtoWK1XBO8ULCalId62hXKQz3tKtHA8VjzhLYWnP+x/CfC/P53nPnd8A3LmWTeZww9k/wpzhitus94VdBTE/+HjFGjryx23IWS+vwtqA/HjlNy4oqojxqj2N55Gm111udW8X6xtyTHqLcObUIej1HLy59Zr24KXjQFLxQsL9Y2n5lWaykcWyqmzjyUG6MxiHKa9+sWiv+VTp+njVY7H8v/fUdPVXJd+ZhZ+W56GOsLOM9ezTrpM17+I4e+qxXp6xZHq0n0Ie34Lbcn14XXBFb2y0C+fkdA2yo+8foJcSldeaPVSYuV/8o+8nWB6qP46sHycD8gyiNM7nNIl32rZB7alPI0CnmpdX/kwVgrvL6KP68Q5R+AMtY2DSqPvFL8uTZA/qg5Ya99V/FTzeWNbDfvWCdDmcy2M+Wvi+M0RE9fEPB5XH+b0NPVOgLl13eU2IeQ1jOCVmV3Qri3Ks5z3faeqsSOG4c8jh03AXmmX6W2HSfeL9nZq1V7F1gntHdg/S1f/WaZ3n83XFMEK3Ldlry6If3eupl18r3evY6wEq9/dtr0jFNvxJ/ybpM82RoytR3cys9mu+tq43pY9h9HoD4s9739x19w1p7Yp0P6+bigp5vfwK/MaJyh8c+s/BzEP/t1kt3YbqyHIc18N4uS6/3a21N3lXk+fqF3lf2u095VffzGBT2ej19aObW2stf54ngSevz5QvGV40bitw3KyxPHP6tqz8W8t0eE9c6IsO5EhPWOiLBejAjriYiwYvL+zRFhxazj3YiwnooI67mIsN4WEdYzEWHFbMdnI8KKyfuYdMWUqzHpGlZZ+EJEWDH7aky63hoR1rDOtTHH47DKr5jtGHMeijk/xpQ5MXn/dERYMes4rDI6Ju/vRYQVU64Oqz4RU49+U0RYw6ozxez3mxFhxRxDMXWmmGuFYdVXY8qJJyPCGtY5LaYuN6y2jrdEhBVTjx5WfsWct18Oa9HnI8KKKaOHVa4e6iaD0004lhrusQzbXuVez0q+b/b+b4yzkmrfj2Eh/biPNEH0WflvLehLG7Nubd07W542vsXaeo3wGb/xHeKfFvQY3VMir6dYaqtb6+ubW9tr24tbSzdv7ro7zGjld+yLpc7/q/26xLHIlpW/G8dLG4W8S5Q3BnnN4p2KpZYo7t5yCP8Rf0OU51hqvdy3jf5WvcIa2SMsi6WG/tp8rg/pZNmd+oyDkt3nBA+ryu7vdGT3RLabdxOCd0p2c5tOCPpHANZGq5M+K/+9fZHdOpaa4fJ84SZFfSPSdT1Urhv+fvnaqb6B/GHfiQuCVj6LnqfHWu1ynDci3tUPYUWHZW2GbVwr+TU8/I7xKJ/abj5oPzPb/ga/K4tds9Fq52P5//lgG+bPFzCVDxr7ASu/ucTjfUfeq/guav6pU3l8Rl7Yu19z5P04fDci3nGbjgh6psV3vfYd1Q7ePd/7/dzh7zttVPXc4YigJ7Gv5PIg731WZw1i+LIbrn7Nr6puan5lmwPzoAxWiP1C9ZlENopgX3bDP+3QquwwNq/0ypM8cSy5VP70fI7mfEQ83I6Ip2w+Pt5ofxMyH3MsOSt/qtGGOV4s4EN8wnH+O095ai00LHcUsF0tNO7rhYJPMexqE4KeGuWVrc2sD/DabKxou7wdFwpaD9txdzu+qk/tqGLJla3JXsLXapdHXudptNUJ61bxfrG3JGPJdfCu1ZnXhLzxIk/FkmsSL/C7EfHOeGGw1B0Cqi9zbNXU6wCjpWwdMAL1YT7Yc57G6N0HOH0S+0yI7sExiTFPxT5UcxDHv1U09BJLDucqLP8hwIeQWHKXBUyP5pqgmWkYATn6YQU9/Y4ld8Gpa542Wp3lMU62Ks860oTAndf3CdIpmoIO/PYy5GP5bwCd4o00F6l1s4ohGRJ7zsrnaaPVSYuVfxb61GJJn6qXwGS7+hXIY34YHCx/VZS/IuroxdjwcGN/5DF4rSKt3WIzXCFakT77lu3ZLzi8j00fxzC7IOjzcKu40Vb+FRVpfVCUx1gN14hWpM++HaBecF3FcUAejLXC66v480pR/kEow3PTKyEP7QjMn1cMkD8TDn+UXun1H2U3VnEs2W6MfWnY+s85hz9efRV/lCxEHnAce5S5C1mbLuZPn+LbVe4/ij9e/7nYhT/XiD+o712lvNDYHLyuVHEQvRizqe9nMt5Y+6MOr/aZ69nuOdme88SxuT7D0eGr7gOp2C8erCa847nL6BsX5REe1+dzHV18QdCg+uOwxZBEuWFjTMWXtLVtg/JUeygd76rghYLFPh24PlugPFyfXSEa0NfK1h5oY21CPpb/YtDTv97R0w3ffvev+HJnjFb1r7gi6KmJ/0PGKMZhGhFlmiX1+SqoD8eQ7BbDyhuj2N55Gm111udW8X6xtyTHqGd/wjUtj1F1d1pNfKfWx9y2CIv9I9SelmdDwbGlYmuNQLnjNAabUG6c6mRtqdbmedpotfOx/Dc7a7IF4IeCyethJfua8I71khixB3kMfHvFNWbToa/qGlOtgTPCMy7qcpXqYmW/G+RxRnsxTfie7SbKplATuNgGkaeNVictVv77HL5amXoJTO4niq9NeMft0C0OouG3+mMbvSLrjhv7LcviByvS2m0t+wDRivS9MgBW08H9KlEeYS4QbqTrVQG4F+Ad8+mhirS+WpR/CMq8kmhF+uxb797kQazZkAdjrfD6Kv48LMq/GsrwuuxhyPNsRg8NkD/NrJw/VecONS6V/G1k5X192PrPVYc/3eRWCH+82LHIn2sOf64OkD/NrJw/C6K+TYc/ShdYgDKvJP6oOUXZRJqEpynw4NwYsj6/IuCzHve/xfpc2Q+aAN90Co/WCUGr2jdCuE9U1G+7+ZqE+C8m3vMNvlOafb3H09Dj+norv1AV79dby8zCM+YhHs+3EWHVI8Kapvqk8IPO04e37v8qX9a54nm/+7KeL8ZcDF/WOUFPN5+1y8c1zlAfciv/q+BDfoXkiLJXj1HeA8CHn6A551DW7F3WzAlaVX+ZhGfMQzxzAo+CNRMRVoPq0y9ZgzTwHeyDjqE7B/VhOeTF0L3pyJqqbTQv6Okmaz7wuMYZKmus/E+ArLm1B1nzocCHnx68rNnzGbb9KmtYr+lFPsSUW/WIsGLKwOmIsIZBnhosG1fzlHer+H+xx8Q6jboLXMnT0LNi74woT0cEPd3k6Z1I8vS7QJ5uOmtAlqeW9xHAh58r5Km1bSIZtTqZ6X4VCf5KiAxUbTUC5auMJyXfR9LUrfIZZR7fzIMyWBMVYSWeZ3fadNypN+KfdmhVMu92Kw5P8vTYkMKyOqY8x5qnMjtXDDzcvxDPXsevwoOwTG6nlVtLd5RvX0Z1RNsE2/VUHAL2A1B8w/39WcrDvXvU1ziN0P/Ip3xuedfDbbhcztLLgb+sdyN/Ue/kdMjfTpoxD/nL9k3kbwOeOcXg7yzRgHWcFTSw/6fSs9VdcAZjWGwaRltVm8ZXOTr4PHw3It6xvG4IelLblwcZC0D5tE4LPlWZBxHXVLa736XQY1XdvHZWMf08WKGxANhvOnUsgHNOvRF/yrNyeTLdJvU5fKtbiDwb9FlolmehZ6H/fWJ51s2m8N3HNc6ye+2mqR5W/u+CTeF7yaaAcxuft0Oa+YzCQZy//kvi9mZYSD+2wxzRZ+V/o6Av8R14657sSB2XNHRe4zkS6eE5D/NSxAYNPb/C8grLe7FBE8VhlbFBLwJf8zQKeXy2cAzyjEYVGzTNmaV2bFCP/4i/IcqzL+5eY9LhuI0Ba3qPsCw2qKcLJdIBV4dV10Jbf63k12BxHt/zmcjG7d7z6e1V4BzA80wv90L3ac214s2vyGu+F1rRqvTh2604PMnTY0MKy+rY63pR4UFYbAdOFe+D93H2On4VHoRlurbptCi3hm0Ncx7qw3Oqt4Y5XgQLVjpt1fW1Wg90W8PMnejE6fm04bzH+7ufAGuYMwVMtYZhO5vSw5V9jmMq4J5ag/Jwz2KO8kZEXRSd7DM56H13o63qvvs1p3+hbXVEvAvxs+jWv155QuMs618NqoeVX4L+9Wqnfx3af9uJ18+rTl84tP8e2n/zdGj/3V2+Spuqeh/af++n2PbfJxPLs25z21MnNM6q9t8xmNuedea2l7v9952J25thVbX/flxBX2L778oA7b8rofPaIOy/a/e21ta3bm7fXVle31xc26wRfKOV34XYf0+L8mntv6vb+9v+u7odwn/E/3K3/6p1Ccvu1OtQJbs9/+9Q2f1Jjuyu6v/dEPQwLCW787TR6qTPyn9qX2S3vhvqXEkdkB8NUQfPbsHtWQbr9QRrzqHrvAPLZDfCUjH0pgUNPHclWgsEn1Pk+amRhp6lEL7miX0Y1VwaU0allp0s75BOlneJ9nNceafsXFXl3RdGtLs1BD3T4rtaya/h4XeMR7WDGsvcRvv1rtkvd9qo6n5PQ9CTeC5ZThxzdMUb61gn1EnLZHuo7DVc/ZK9qm5K9npyLKZM7JeN09MLEP+0Q6vS180+0itP8sRx/1PZ5Hjf9EJEPMg3Pk+K36Fd6VvIroR7IiPi2w9ttfOx/LedaMP8GyfvPyvbkbf+uEB5ai3QL7uSiivi2ZVC44r8h4h2JRULoUZ5SD/KGusDu9YmRdvl7fj9ZB88bMf2ux/qUzvyGrxszlD2G+R1nkZbnbBuFe8Xe0vybqQO3rU681RsWusrqF9cJl6ExqZV9yxdpjxlz+7XOsBoKVsHNKA+zAes7xi9+yWnT2KfCdE9lP+L5xum5iCEUUaDd5eIwR4X5XmuwvK/CXzgeOxq3+SSgOnRXBM0Mw2fAnL0dwp6UvpkMW9Qzqm65mmj1UnXnICV0/+HpCOcF3Dx20uQj+XfADz5Y5pb1DpY+WKVyUek5byoI7dPvaBFxexVckbZCK18U5THMevtlzWzTvqszSb6SN8lou+MoG+A88uqinfZIQdb4fVV/FkQ5ZtQhu1eC5CH8dyYP5cHyJ85hz8qfl3V/oN95BLxpwl5PD8o+7FnD1ZjhvVLpc/ZXM733t0q/l/sMTFvcC5HnBx/sAl59pwnjm++AOO/1/iD84IeDxbKT56Tm8X78Uzbx86U1OdBqA/PyU1Bg+qPaoxhe+dpFPJi67h8/8IC0GhjzPKuQJ7puA3KU+1xRfDiiuCFgsXjUMW2VXraAtHA8YryhLYWnP+x/BrM70+QDWBO4Nvvcab+jDNGq+4zLgh6auL/kDFq9JXdkXK+pD4fDPXhO1KUnGiK+qgxiu2dp9FWZ31uFe8Xe0tyjHrrUNSFeYzimoD16kuCF5cELxQs9hFXsWq9tRSOLbbt1bL2egVte0qP5v06vJ9U9deNVjsfyz/t6KlN+F7126p6GOsLOM8uZJ30GS/f6tC3UJE+JZtx3LIe3YQ8/Jbbk+vSpLpY2edBvn4yyVfVtopPvH5qAi6lK2+0Ommx8vf6yFe23TQh70oALA/3VVEeYXKfQ7rsWyXz0KaUp1HIS637Iw/GWuH1Vfzpdg8R38uGdwEsOPy5MkD+qDlhr31X8RP7CMt75F2T8lAms+1M+W3gOA3R05VNgsf1XxV6ulpHoPwyWeTROidoVXYnhPuHZDerQTk1z3Xbe/LOYPFZHhUzV61FRyjvIMbC/6yIa1EVCz+1b8cgfRfUPXfTgk+1kl+DxXnsu5BoH831XfDa2dsH6MV3gfdqBnE+S91rmPKMTZ74LE8qvwG+m9iTZ6nvHzZ9uuz+YZZnuM7C9dgYvfsnieVZN5+Lf3ZS46x6Dvq/vaIN85/TvKd0iZC9+oM4f3194vZmWGVneeaJPiv/nwr60s6Da2ue7Egcn2ctdF7jOVLdNz4l8nqK5XRndWt1aXFz+8723dW1zbUawTda+R2vBZRd6Kwon3ZvYm1JrbcuAV/zNAp5fM5nDPKMRnWWJ1EsqqUQ/iP+hijPZ3lC27Ih8LDNpBdY03uEZWd5lC50oP2sHNmdws8q9CyPlf/xvshufZbnfEkdkB/Khqt0BOZHtzU8n+WZd+i64MAy2Y2w8HvWr0cBFs9dify2gs/yGP4pojUyPTvyUe0xIX/qxDt1xib1WZ75iLBY3iGdVu9++fApeeGd5ZkXPMkTy5PfceRd1bM8o4Ke1Gd5eCzPi7xhOcvDc1LoWZ4/iTgnjQp6Eu+LD/Qsj/JX9GR7qOzltUFq2avqpmRvapnIfSa1PWzeqbearxWt/T7L068YiKlscsbfbnals6fa3+B3oWd5rPyFU22YP1E8z2bl8urlale6VvAmtV1JneVBWVN2lufHoR1fddiOO4nbcalP7chr8LI54/AsT7WzPNiXh+0szyjUh/ngneX5EKdPjgreebrHeUGP5xscsoenaPDO8rBPIvcPnKuw/OPAh0dKfBLLzvKMBtBcEzQzDT8KcvTJ4rnXPdw8cTuhfGCfw3NOXfO00eqkq+wszzOkI+z1LM9XAk/eQnNL6FmeMvkYepbHyr8D+ki/z/KoszIcn+NOH+ljH0TlA354lkf7XWNceebPsJ7lCb0jwOMn9hHvLA/PD6FneVi/VP4Tqr+yf9Cgz/Jw7Jcm5Nlzntin7hOdubxq7Jczgh4PVi9nec6V1OdTnDm5KWgIPcuD7Z2nUciLreOmOMvD7RHzLI86M5ryLM9nw/z+Fc78bviGJd7rXmMGfr4zRgd5lsfoCz3LY+W/COrDZ3mUnGiK+hye5al2lgfHaFncIqwHji3l4zwK5c7SGExxluerHT21Cd+rfltVD6tylsd4+S8c+hYq0tftzEnqszz/GuTrDwe0reITr5+agEvpyhutTlqs/Df3ka+HZ3lK0+FZnj3w5/AsT/lZnh8UerpaR6D8+uES+xDSupezPM9UnOe67T15Z3n6Hdc1lS/Izzs6aYy4rpPiu1txeLPOPgwRYW/zWiMe7OUlL/7jsMaMTrTv5saMVjaKQcaMjulTwec4Utj48/Thrfu/Su9jGZbIryP5nYP/25Fhql+dd3inYvZ184moz3XiZHsIf7vR6qyHlf9eOGszVrxU9hC2WbKOfqv4f7GntHp9cHJq+cbLTU5xG/bim/TOVjxYL0aE9UREWG+LCOsdkWDlz8eyOLDyFLMdnx9SWM9GghWb9y+Hfh+zjrHaMU8x+9dTEWHF5FfMdowpJ2LJwjzF7Pcx6/jmiLBi1TF/nsriwMpTTLl6NCJdL7Ti0XUyIl0x++q9SLAO+0R1WJsFLF5bfUzxYOsW1BUirlvueev5xGumezXCZ/zDd4h/WtBjdE+JvF7Ovy8vLS+uLW7dvbO1tbKyvn6nRvCNVn7H9nPVN9T6K+35o+Xrao/iAvA1T6OQd57yxiDPaFTn39PYZJavh/Af8at4MbyHEKMtG6J86rNk+7st/ThCqi3tnD/aHI4RrccA1q0odC6vGOxGdNirS8qPkeVuIr+hYJs6y9ZEe0Y7tqrQGOxs58NvVQxZtoNX9S9EWMciwmpQfbAP10p+DQ+/YzwIi23qaDPm88eDjjvdgPrwGPDiTn9G0VFi3PMyKujpZlP/7DmNM9SmbuW/BWzqn0c2daTrWNb5veV9PvDhpx8t/55jO2K/5tiO2F9GKG9O0LTfY5j/I6cvVfV7PCboSe0XmnhP1r3DUPlQeHNd6FxkuPo1F4WeIVBynfdGepkjeO8s0X7RSsgcjPhT7wObbPX29PaKB3nondFgeTbo2Bwsz1A/x7UJx+b414nlWbe58Zsq7DfjPMU2kc+EufFbnLmR43Uizd4djQdl/vquxO3NsNQZfNaBsPxPk20rzTy4tj44f4C19dB5zbNt8ZwXy7Z1Y3VrfX1za3tte3Fr6ebNXbEEjFZ+F2IPOS7KJ46juby/7SFryyH8R/zKtsWxHav6ESk/qxiwRvcIy2w+ni6UKrbdsOpauGatlfwaLM5jW04jTd1cW4635lbn1TxYZyrCSrzmWvHmV+R1mR8lfqv04dutODzJ02NDCsvq2Ot6UeHx/PNTxatg29Fex6/Cg7BM11bnxYdtDcPnxUPXMKOFYhzjvLhaD3RbwxyZ78Sp7tjFtuQ1jJX/aFjDHC1eqjUM29mUHq7sc2wHH4e8Y5Q3AXkNyhsRdZkUMFPYrRLN6zsy2uqdZe22Gxf8nSZeWL76zTI97xquKcHXFPOuqhvSz2MB+wDyoAzWREVYkyIvRZuOO/VG/NOifK+yGGGx3WoiIh7mYZ5ms911HbazXiNQHyyPz3liWfkqR+Zjnw7p52oPo5vMf2Re4yyT+bwnY+U/CGT+Isl8bDfek8HxyHsy3lhL4yvUbm/jJba32j+qZ7t5j3oL733dcNq7qixSvGNYSL+a78ao/FMFfZOZ7lO3iv8Xe0ptu5XnGzCfCHfovGb4pwU9HPOd413f2iOtZXar0PjSVl6tUTy7VRo7gLZb4fowT6OQN095Y5BnNCq7VSL76nII/xF/Q5Rnu1XVWOEqlnoMWCN7hGV2K5z/TE54+/CJ9SRXdk8IHlaV3W91ZHfV2Jzjgh6GpWR3njZanfRZ+ef7Irv1nSRsB1DriUlR34h0XQ+V64a/X+sV1TeUHsc2FPxW2UTYLlXVB+gQVu+wer3DQOFRNpJuevx7K+jxedpotfOx/ALo8R/n6PF834eiObUtxeqkdF0lX+vZ7rkA9WvWhT85orxXvOtX31HrKW6j/bqe+tsR11PKlpJYZ1nulz2w4fAC8cewBxqufs2vqm6hdhJeN+91TlB9JpH+5dp4lY1s2qHV22uJMU/ynSwpbIV54v2uFPtQVebjL604H/OdLFb+ffNtmF9QLHrVfMy2M5z/eG2GcpfXZoO2oxptVe2o73fmATwnMCLeeWszPgsxLuhHWWN9YIzK/99F2+X/f62jV73c2/Eb+9SOrO+UzRnKfoW8ztNoqxPWreL9Ym9J3snSwbtWZx76GI0XeSr2ekhcQuWvpPbe+V4E7Mt8R1nqdYC6J4hxWn2YD949Qd8bcY9G2d/U3hfvY+McxGe9FA1o/+UzoQZ7XJTnuQrL/xfgA8d/x30hg3lOwPRorgmamYbPBzn6wwU9Kc+WMW9Qzqm65mmj1Vke75tU5VlHGhe483c/STqFusMFv+U4/lb+dcDDn6G5SK2bVZy6MnkaeoeLlf9F6FOLJX2qXgIz5K5v3LfmPRIVA/yiqKPVH/14LmXdcWN/5DF4uSKtTVEeY8FeJFqRPvuWfdT/h8P72PR5d801s+641f2LVn6hIq1XRPkFKBMSq3qAesF1FQ8ZeTDWCq+v4s9VUf4KlOG56SrkoR2B+bMwQP6MO/xReqXXf5T/K8rDi8Qf1deHrf8cc/jj1VfxR8lCdS9QI9stcy84/EE/z37zZ7wif7z+M9+FPxyPHfU9vh/GO+/s+dZgf+V15SDPiynfWu+8WKhv7cVC5+nXeTGE5cVnMfrK7mKaK6nPVagP6+LqzJLqjwMcY/Kel454wq3OvNB7Xrg9ernnhe9ywfUZn1PC9RnfNWO8D72LycovgZ7+4WT7Gxf4+rWXo85EKltUPdvdJh132tG7684YVb6vqk+rOYV9ftkm0G2MGn02RrlM2V1aHwj14buYlJxQ8dTUGMX2ztNoq7M+t4r3i70lOUY9+xOuaXmMpoodME55ak/Ls6Hg2FJ3VIxAuS+ltbJ3BtDaUq3N87TRaudj+TdAn1kskev1Epi8HlayzzvrqtZdKA8Nv3fPM4+BZ536XK5IX1OU99aYag2cEZ5xUZeyu2/fDvL480geq76g+MR2E8TFNog8bbQ6abHyLzp8tTL1EpjcT5qQF9IOC6J8E8rwHVrqji8PN/ZblsVXKtLabS3bJFqRvqsBsDzc10R5hMnjCem6FoAb5wvm0wMVaX2FKP8AlLlKtCJ99u0A79CSazbkwVgrvL6KPw+K8q+AMrwuexDyPJvRAwPkj3eHVtW5Q41LJX8bWXlfH7b+c8nhT9Opbyh/mlDmgsOfyw5/Lg2QP17/UWvQqroHru2vEn/UnKJsIiF7nTg3hqzPLwr4rMd9jlifK/sB6iGmU3i0jgta1b4Rwv1J2ierQTml33bzNeGzsui/eKv4Xewt3eM943iwl7bYpy8e7NX1dLFaV5fTxWq9sTy481jhfvuGv1/x8Tw7bZ5wjZ7nnRG0qpgJvFbsJfbH+JDCmogI61hEWOwTmeqMNMejPYi+1//asdfF8L3uGnPvtMYZeuZhJ24Bxtxz5j2042LetwEffq6Y6xP7PK0m7jvBcSQM/2Ecid2wDkocCUWr8sG+3YrDkzw9NqSwrI6p5w/W7VPH2Oh1/Co8CMvkdsK7DO6kPXexdEftc2TEP1xvjlMermd5jHHcSMxDOwqfHcN1MM4FnEbof+RTPm+96+E2XC5nScViYp+DOVFHy1O+r8o/mePZJYpR6PoNq/2qqn7Dv+3oR1V1WHXXLMNSPhN5Yl9aK/8HBX2p46ap8+LsN658PFLHkPfaX63lqrb/nzjtXzVug/KfUnuyvcpshMVz3fmIeBCWzc/Kz5b7QqL7hnb6gsla7AvKP62e7ZbNHfZiejdddCjVF6rerTYn6JkW39WId5fS8G4tpA8g/qlsdzun0O8vBfJVzaW8n4P2adYnle36ssCzn2BtFbDUXshexz7zOQasZkRYCxFhXRGwbBxehfcxbQKh49DwTxGtqcah2ru+4vDumqC1IfLYjqr2268JPA2Rx2MnBizlU3iFvkOZw3uATYD5OMHEvsrzNLY/2svWzrRxoY4Tai+z8r/2QBvmjeKl0uPZDwR1aj5jgXNBk/Jw/jUYNpYS9d1F7ruoDyBOo62e7R7b2O/H6N0HO/qA8p/Hd54/nJVTPrV9kkPB+gDLoUS6nSuHvHtKr6WhZ9XoUT46qp3zuH0z2e42Q/oMFu7Fvr51/1fJIY5Xp86SsRxSMmoB8Nmeh9XvXJf6mUxTsuMcfXdB0G7totbsSqdW8A2GklG89kikry7yuB8tqTfHFcfx0uE7T++ec2RNVd9b7+6Gsnnn+TMaZ1mM2QbVw8rfOdOG+SU07xzEdvuIxO1WE/Sp9uB5I9E60uXnJUEP8+ujqZ81gT8jJXXH58sCb9PBe5nw5u30EPniqrkc8TI9Vs/xkvIXiQYr/zFAA58HOif44PkDK5rPVKT5TADNn+DQfMmhGWUEtx324UtOeZb/DP9ypnlSFt+AZZaVb0EdF0v6Rj3TY9jm70lBU4p9QWUvmXN40u28AJ9JP+fA8s7i5+lx4sVCYl40M58XC0T/gijfhDJVfOK78eJ1xItEa6AVr27IiytEv/J1XXB40XRgdePFRutg8eKigKVszbyuY3mSiW84HoiV/wLQq/7BmU64/A32W44hb2W/GOB9kYDNMjhPyv7Ae+A1QRfql2oPw9YkvO+A/U7pk4iLzxXhXML+v/bd+6De7z+jy3xl8T51zC61/8Z+njWqB9bxWEkdv3oI6Ef+Vr3nm8+2DzpmmtFWp/Lcpzlm2r901glVYzequABefKXEsS6DbUkcczSRX5wbc1TFxFB3R9i3Sl6xHXqv8f2HGdZWAStmrM6Ye+Hszx0DVoy7vb19+MS2juC9JcOv7vNNMQ5DzxkpPyu2ZWIe7y1VtcljHo+dGLDUmfbz9B3KHI7ZpOID8n5Cnm4Xed1sfD9Oup2KB4ffbrTa+Vj++2Bv6aeced2LWcP6GvZBvjf9IPqa/PKhr8lQ+Jqos0KJbTk7e0tNQY9qZ9xbwjZD+gyWt7ek9Golh1jmqri0Sg7x3lKjS/14b0nJDqWDs944IurXLf4b68Ix/Wb77RtpbRDqG4k2Pmw/thGMnr3/m9o3smy+OnK2E6eK6YryhO27Vv7o2TbMjyueVZtye2Obcnsr/u53X+iTTntX9YVW967VBH0he1mp9wYVPy8IephfF6l/qv2QMwKOPe91D+0itBPvZanz6IiX6VFn57F82dn5BaCB94XOCD54MYEVzccq0nwsgOZXODRfcGhmOYFtgX34glOe5wCGz/HoVNxodf6C++TDUMfFknhm9UyPYd7LSqRbrzDPs2z3HKJ4otZkiudqTcGwFG7UGXgvaxD7esiLqvt6IXHAPNzIC97LWkjMi2bm82KB6F8Q5ZtQptd9PeTFRquTF4PYy0JepNjXU7btJsBlXuFeFn7DctjKb4A+9tjZTrjz9I2y97Bt/XUA77UCNsu/PFXdy8K9jCOkQ2I51iFD9zlwfcx88HQJ5sWbhPz3Ysjm5dad+JGjxTeJddsVniezTPf3Mr+oLPPnSeWHa/1T8Wfe4c8xhz+J1norXh/2dCXFT2UvUmt9njO7xUPF8ZOnw/7m+9OomPZKB6naPxHGaPHNIPkZ4teI5VVcmRB7k7ovCm1QHDcM48uOiDJsT7Dyfxlk7BspbhjHnMA8L+7tiKizsldUnU+GIV68d/YZaatnu9sf+xOfcflrjr0iRbx4pB/7ldms2O70aQV9qe2AyveC91AG6VOh2t/zqQht/89w2v/Qp2I4fCpUXC+1v8n7r3uNHzbMsLYKWCl8KvaTH8ReYXl7mYlsVcE+FYa/X3uZni1M8U75paozZ+xTsde7OfLEYycGLLWX6a1hPP2RfSqwr94u8rrtUX0t2Rj26lPx/4JPxb9ydD7Pp4LnfLWOOcg+Fd/i6AOHPhWHPhVITz98KlAOsYzCdTDHoUU5dOhToWXUfvWp+JEB+1T8RCSfip8GO/sTReUOfSp278f+8qFPRVbFp+K3B+RT8dtD4FPx+/vQp+KPXgY+FfVz7Toe+lSUwzr0qdgtt8p4cehT0U4brU5eHPpUVPepOFfIqFx+XzrXCXcvPhULAO+igM3yL0+9+FT8RAWfCrRReXcms08F6rIhPhVW/kEh/9WerNGl9mRx3TZafNMvnwG1rsA1WYjPgFqLeecDFH8aDn9GHf4k2p90fSqwj80Tf7rdDc5rfW/+DV3PV+1vng/AIPpbSGxsLO+dxcXved4dFbCUD4Dip9F40Mev8UjtUbG9aZTqhjI2T1XvYeY4BVb+w0HG7tWngvvJiKizsldUnU+UXYvvW9uvcQqehXbodU99VNDDsNR9R3linwor//aCvtS+K8qngs+sYt/g9k/kF+C2v7JFV23/O077K381tfev2p99ThLcR7iU9r6l4b9bZBaeOY3Q/8inqneLeD5oPB4xT+3L7nf77sc646WqfTfEj7fs/hCTl0o+ZAL37VZnfaz8J5F8HZb7Rri/pN7/SXXfyKc6/aXq/s8xQU+Iz1qiOTN4j5rvCE3ts6b46vmsnRe0qr1Z9m9RNncV52Q/wdoqYKWI3ZPaN2yvsC5GhKXu5OiHL0Q3WhH/VLZbz0gxDj37uuJdU9DaEHnss9YUeJoCT0Pk8diJAUvZgfjuGpQ57Eei7EEq7pDN6d18AL6KbLh79Vn7PPBZez+tqdXc5MVmVL4DvN+ifIn7pT8qnzVPfwz1Wfv6iPqjsgl5/sHD6rOWSLdzfdaUHWOQPmuqnWP5rHkxx1QcLpZDOE6VHArxWVOxzQ591vaWjM+p1iw/EHHNsheftR8s2XOs6rP232Af83ZRuUOftd3t/dMR56SXg8/ar1L/7JfP2q9COw3KZ+2/Aw37xWftdxyaD4rP2h8e+qwd+qxlhz5rTShz6LNWzoumgJXaZ+1EkZHL7/nznXD34rN2FuDNCdgs//Kk7B2hPms/SDYPLDfoOECXizofxgHqbLfDOEBZkM/aYRygwzhAsfl50OIAfTDI2NRxgNhecRgHqP3uCWiHYYwD9HRB32EcoN38ixEH6G1O+8eIA3ToV9Z+5jRC//McH+JXxvzN063id7G3tJrWH3M42m6S8rDtsM9yUm2HZzT20nYHkb/sl4D8nYZnTjHGxizRoOZ7z0d9WtSjXz7KSt4jTqOtqrz/6468R16OiHcs7+uCnhrllfmob7Q66bPyn07zPcJNPd8brklRv5eT3JuBZ05qXBqfhmFcDjq2CY/L0NgmX9incTkt6PfGpZX/xzQuU+3PqnHJ8bewb3D7p5IXXvsjTj47Etr+73Pav+rZkbqgZ5ryLB95l8iXONiXyfBPZSnlb9uXSfG1LvjK8hq/VTYV9oNU9plzAs9+grVVwPJ85kPaHfHsxxiae4Wl/KQT+xQG+zazT2GiPWzXp/Ciw7vLgtaGyGPfZrXfe1ngaYg8HjsxYCm7CccXRZnjnTVg32bsq7eLvG6+Yt9He32GL9S32cq/F3yb/xPZXtXcpPQ6nvND/Z5Zh9+vdtkfiWiXnRb0qH0OlkOJdOlgfcDwT2W72zmFHFL7LkrP7kfc5DK5qNoZfZvL9h7RB98S+zYrvVrJId53wbUqxxFAOVS211RWP/ZtVrJD6eCsN6o9XrWmUvANhlp7sJ8C0uDtK7GM2q97B78bce9gWtDTbb76A5qvpoFOnq+w7Xht+0fg7/Lniw6r2pTbG9uU21vxd7/PSaMFb2LMSeqcQU3Qp9qR56nUvuKKn+cEPcyvmQudZZR/7JyAY8979amegXZ6qMSvOMs0b5keq2eZb/MZosHKnwAaHinxoUU+IF3s26xorlekuR5A82mH5nMOzSwnsC2wD59zyvMcwPDPZ5onKOuUHsx98iLUkX2bpwXNOIbZtzlRfIMV5nmW6T0Q5onygVc8V+dPGJbCjToD+zYPws8beVHVz5vXV1X9vJEX7Ns8CD9v5EVKP+9uvNhodfKimZgXl7vwokn0N0X5yw4vLglYdYGHz+ojLJS96pwtnzFZKx5y+X3zQidc9ifDfsu+zVb2zwK8GwI2y788KXuH59ts36JeGuLbXHUPrCb44OkSzIsPEfJf+Ubinl6VeH6DiDeJfapqvEmru3fmrmo8zrrDn0RrvRWvD3u6kuKnssOpM6g8Zyrc6s6gw/6WBcU3rQtYSgep2j8RxmjxzSD5if2tKj95XYnl2d7EdiGUsXli32bjYWg8Tiu/CTJ2r77N3E9GRJ2VvWI/+jp5vsFIWz3b3f7Yn9h3+N2OvaKfPhWmH7Pd6WML+lLbAZVPBcdXSOQ3sTpscqXX/WrE1a8YbN55pTxxX1XzjQdrriKsQeoy6ozBdNZ9nsU63m7F4UmeHhtSWFZHJd/7fXahW7xllu+h8XY/J6J8V3tDinensk7eDdqWv1c/4C+IyLtTgh4P1ikB61hBY57e/Z6P/Kj3ZpRG6X9T7iyx8maIH6DvbGAgvBo9q8W//f+A+C5EiTpF8G8V/y/2mLyOohqmakf5ksRKlLe52y+nTsU71ZZVefdPHd6pxV3d4Z23OT8O37EjEC4q2GlxBL6zjdWQ9hi0kzW3R6iT7b9M3B6eky3/Gh5+VzZm8sSTunJITR182vhldllsI8R5DuqD5fE5T2z8/Vanjao6rB4T9HhOpomDZQU7Phn+qWx3O6dYYFwI5Ks6ZMLBD3DjiRVatSmlHD33E6ytAla/nIT3CutSRFiXI8JqCliJgyQFO0Ib/imiNdU4XCB6mD/MuyuC1obIwwNdmId4rgg8DZHHYycGLHYWxHrzmEPZZHnYt1n/wb5q82c3x7JfKtkYDHWEtvJvBkfoXyVDrZL3ah1xkfLUpqvlKX1/WBb5RlvVRf7vOPoALiS9xaVyMrRy0+I7lkPDdulDorWke+mD5widaD2w4wit9D7VzugIXRY8FdcWltgRWjnZKTl0ivLQWYIdoVEOme1CyYJ+r30bwA+19jXalNMHbszyJtiRglFq3HJ/53eeHm/lFO/qRIvlfXJBSy6Hp4vnSfF9/ner+H+xp7RyXR0ijwd/ecnbyEjbd5aC9SfD36+NEm/DIMt2608zgtaGyDsCz5iHeGYEnobIe2crHqwnIsK6GxHWUxFhPRcR1p2IsJ6NCCtmO745IqyYffX5iLBi8St/nsriwMpTrD6RPx+NSFdMftUi0YVzY+K5+GZI8AOU8RHnyq0a4TM+ZVRfw9+v4AdHiB7mD8+V04JWXlfl6V6rXY7zQvaIEM9YFg/WVCRYeXpbKx6sd0SE9UwkWLF5fzIirFh05emFVjxYL0aE9XxEWMPaV98SCVbsPvFkazjpei4SXXl6NiKsYewTeYo5Ht8aCVbMPhFbrp6ICKsWCVaeNludsGoCllrjW9lQPWfPDkhM2MkSAi7S97dbu+Ey4zL6/2SXfLVhmBu9Higsk8q5g08koSLseZBbuWExVHLktVBD5d90DJVVI68dEfR4hjr+NTz8rswgmifrR2qDiNsIB3mKNjKDOLYR4mxAfbA8PudpjN59rtNGDeIdv/PayMpNi+9qxLtEmy7Bm0CGfyrb3c4pFoinAvlqvFObffvJYzomrK0Clre5WHXsM59jwIp5I/mZiLA856xEjm3BmxqGv1/OWV5UA8W7C4JWtbHJRj3lBHZB4GmIPB47MWAp73LvNCpvuGLfZqcQ7Ks2f04D/ZbQKeQbLrZxoe5R1SnkBjiFfFMB0ztpoOZ1vqUP51i+MRz7p8HY706i/97RB6o6iTYEPSFy6NBJVOsDg4yOp9oZnUKwzapGx1POVUoOsYxCR5QTlIdyiNeTjS714+h4KDsa9N0JQbu1C7cllkcYCr7BOMhrj5/o09qjbN75mYsaZ1mUO3aCsfI/D04wTbIHHMR2+9XE7VYT9Kn24HkjtSOm4qcXGcbK/y71M3UDdUPAsWflABpy2+bvQjtxtDq1BkW8TA/eMKrKnyIarPwfAA0c+a0h+IB0cbQ6RfN0RZqnA2j+3w7Ncw7NKCO47bAPzznlWf4zfI7igXVQfYll1k4fvtSu42JJ36hnegxztLpBRCA44vCkW2QTT/9nWAo39kOOVjeIGyyRF3u9EXRW1P9cRV5stA4WL9T6uJ6V9yfEhWMoE9+groHlTxfjMpdZ5y91wuVvsK1mKM/KXgJ45wRsljt5UmtuL0KbfYs6lbKnmx6u9CSEx9F/LO9a8Y1yAI4536uoLnWoY4o9nxHKU05BVu+ZRPXmvoD6hnLorbof9BqYc3o98H5E0JM6qlLi/YoduabWiFgnPmCDfKqV/BoszjNcU9nufpfC1uGtf/PE7azWKx6sExVhJV6LrXjyVTkJePtlIW2q6o2wbP07ne3mV694lC0kRJ6lDuChoqB5ATxCo6A9lliedbNfvP6Sxhlqv9gpD3bzN9DcptZXlodzwgnKw7Fq5fa73eMtTntXtXvMCHq8+Vf5Y/D8+tGkH6UZV2vr3n5p2jXh2nrovMZR6dQtDVMib7QHWm+sbq2vb25tr20vbi3dvLnrAK/Ryu/YBqDWNcdF+bTrrLVl63MY/ZQj945C3jzljUGe0ZiPndNEf5pDrmvLIfxH/Gp/k21QoW2p9ij4sGUvsKb3COtEtnuO8+whwzZXs+wOnas/LqLsVjZrtfaoRePP8qaycceDv7Ll+a2kHadLS6EynW8tS2R3dG8tU2OK97SVTEHbEx/k2ettobVs9+GbXm4efTYiXUcj0rXZigfriUiw1FjvBdZcJFgx65inWH01T3cjwnoqIqznIsK6ExFWrPGYp80Clsmqo5DHcj6N/Sxczhv+qWy3LEkh59X8f1TwVfnjsm8c6iA8dnqJEM2HW3qBNRUJVp74EFwvsN4REdYzkWDF5v3JiLBi0ZUnDm4wLH3i2YiwnosIaxj7V542W/d/ZwVsk2km51EO9GsfaUrUu+o+0vc4a7mxbDfvxhzeHRX0dLO7fv8ljTPU7mrlf/BaG+YPkN0V243X4Knbbce2k4W1G9oi0MbNduYfjthuRwQ9qc/LJd5f3NkrUoE/lB1+WvCpVvJrsDjPcE1lu/tdCl1L1c1rZ7Xv7MEKDZDCe8aJ9tTdGzeQ14a/1z1dVW+Exft/MxHxIA+tbiHyLNV+vfHe9n7KbkFieYZ7Rbg/OkbvfiuxPOs2D/1epHnon8I89AfOPMR7ujgnzFAejlUrt9/9V2pFpMkY+71Tgh5v/sV2KLtt/XxBX9pxtbbi+Q4Y7pOJcIfOa4Z/WtDDPi+Y18v+39q9rbX1rZvbd1eW1zcX1zZrBN9o5Xe8/6f8nE+L8mn93le31f4f+h7laRTyTlLeGOQZjWr/L82e0up2CP8Rf0OU5/2/0LZsCDy8/9cLrLE9wrL9P+UPESK7Bz1Xs+wOnasXEstuT29L7PcSfK5xWH39PBmtxiSfid7rOBpmWFsFLO8cctq51venUm1V1Z9q3RmTVX071VlQxTu2gQ3an4F5F+rP8EEReXdU0NNt7fEhlztx4vkDtfYYo3pY+e+72oZ5m/TXVHauQa751Zophh3HcPXLjuPZM/JUZoNgHuxl/vX0k0Rz2k6bTjn1VvoAlq/SpqreCIvtOCnsRVi3EDvOoNf1e91PeKcjS/thx7lzWeOsasf5EpClmwVMdUbJ+lGIjcezsw96H8Joq7oP8Red9lZBDfEdt7caDwwL6cd2YDuOlf+bNA+mkWlra54NOLENKXjNwnsd6lyBitvWkx/3ndWt1aXFze0723dX1zbXWP4YrfyO7ThKDzsryie2mS0pOw7qeXkahbwG5Y1BntGo7Dhp1rdrSyH8R/zq3BPbcar6/CIetuP0Aqu+R1hmx1F27RDZnejCGFd2qxinVWX3ZyaW3erSglo0/qyuh9iJ0uhR4ZcLsVxNbSfy9rvzxHYiNQeoscVtuNdxmie+sKUXWHciwnpHRFjPRIT1RERYdyPCeioirOciworZJ56NCCtmO96LCOuwTwyuT2wWsJSewfbVQdsEWM9oQB7WiW0C3xpRzzgq6OlmE/iOyxpnqE1gZy15tQ3zuxybAMctQd2I45bwhU6Yp/wEJwUfUvQF0y+xLyBOo61O5fEZeWjv/qPTF5Q9EN95OqeVS2krxHaeznbXtVc8yEO2d6WySVr/U3EIuM/heB/EfvUM1AfL43OW7d6v/mmnz1X1e1R+hqljMfQrVo7aY8U6caycvfo7Iq6pLOnctuTVzWtntSfrwQr1NTFYifeb3fhHyGv27UoRwyZPvMdyMiIe5CH7TnrybND71SzPQver/1diedZNn/oT0qeOAp0h+pSVfxr0qXrz/rPSp9gHAWk+SXnqDMqw6M9GW1X9eap5/1e1N56tHBHvvPbmc+VHBf3YDkeIPit/rXn/N/E+x/oAfWWDY+UMwle2LFZODF9ZL1ZOGl9ZHStn//jKtmPlDIuvLNtue4FV3yMsz1c28Zp2dZBxCT1/MLRz1Ep+DRbn7cwN2e42TqE/q7p5dhqcA3ie2au9DGH16/zgUafeiH/aoVXZ/W634vAkT48NKSyroxcnI6S/KzwIi+MpNyLiwfZke+Nex6/Cg7BM11Y+t6zT7ld/5dc27//G8LkdE/R0W8O8rtmJs5vPLa9hrPwNWMM8WcBUaxj2J1B6uLIJN6iuyias7Idll98jXWrNNGx+iHtdMz3XvP8bY83k7cmksokO0j6EdeL1zF5lOOLqVywiVTevnQ9yfGxPD00xX+aJbX6p4mOz/PTk2aDnS5ZnofPle5v3f1PJs27z5cc3Nc7QMyo75WG+/MQCppoTrR+pOZHtgQdx/vrU5v3fVO3NsMrOx5fZbv9h8/7voc3v0Oa3F/qJ14c2vyyuzW+vdjoFK8X5+H7Z/I6ngR+saxl+kw11KF8r+TVYnMc2v3qaurk2P6T/5WTzQ14f2vyyrnU8KDY/9vfa6/hVeBAW2/xQbvX7rluT5WV3vhyH+vBcgfPAGL371ub9X6XTos7h6SFKp2UZizzv8ANtduLc6zn7X73ShvldBcz9ZvNT+/r98i01Ppb5lhptdSqPz1m2u13+c/P+r+pfONZC5rIjgp5J8d2t4nfpxsry8vWVm9cXb97YXFxa3by3fGN5efPu6uK9xTv3lrduri7d3F5dXl25t3nv7o3VG3eWthe379y7uX3jJdYsdeu7P9zsrE83H2buu1b+S6Dv/mgBM6YPc7/PNav1q3euGfsZzie8vv3Z5v3fVGfjurX3LzY7ce71HPsboL1/pYDJ/Thy2+zo3oniZuzoaTbHZpnW07yYAbWS3yzTure9m8p28z6F7q3q5ukSSDOv/RSskYqwJkVeijatO/VG/NMOrVyPPN1uxeFJnh6LCOu1EWFZHVPrqqx7j0TEg2WsXK/jV+FRctf6+Dh8n0IuJvLV2RlDE8QLrhPPQb3ESjJc/YqVpOrmxZCZAHqQB2WwJirCmhR5Kdp03Kk34p92aOV65Inl4l55kqfHIsJ6bURYLBeRl73KEYTFcnEiIh5sT9Zr9jp+FR6ExXIR5VYvexeUlhOvFe4qW1RGPMR1NNt8OGYD5uHalOerWeIX5im/slq2O43Q/8in/LtffLQNl8tZUvyN2H6rie0G99RZy4z4qWwdqo24/bCNuP2wjSYpD+1zyFdOqv2MT1Xbb1j4O055yF+eh5C/LLeGjb+TkBeRv3fUmeSM6otty/xF2cT8VfEFVbuw/MF2qSp/jE+h/J0lGnCMKtvTCOWpNcEs/Y98m6X/kW+z9H8/51PTQ5TdjNfZifrijt3M+iLazRAn281wDGI/HqN371y4/xvDbqZs1Ip3rIvvV5vjVkTeqfUew0L6sS9PEH1W/v8o6Mthf/JCJz7s5x/euv/r6cGJ18LBMREN/1S2Wy6kWL+qdlTrGOOdGpMNyssTr70mBZ5JgWc/wdoqYCm7E9rOP2GhE6faK8G+MAr5WP5Tob9/kuj7ag7ifRfL++vFN4lt74u4T5sRrqOijp8GMmfxUc23eqZtka9vddYpkX7qxotGPpb5NmJ5JaetHScdWAo3juXHiRepY2cf68KLaaJ/WpRHvZLjGB91YHXjxeuIF4OIDY+84DV6tzsBmRfHHFjdeLHROli8OCJgefGq6gImn5tjWZOJbyap/KQor8b2GJX/4oX7v7kcf82V+8881xoM9ZunEL0fYd1udeJJFcfebKbq7iHTMfrlF2/ry9B743A9Ogt1GqN3X1W0X4y7hyYEPdPiu722Ea+1Y8CK4efGNpYYsPrvn78YHIOXY00l8p9zY02dcHh3StDaEHmskyjf/VMCT0PksV4eA5byO+M44jjOJygP+/bjBBP7KstTdXY6l+/fudDGhfIH1wFqrma/siXwofnuAqaKL8X+ftjPZikPxwSfdVJ3GqU9f9GW23b3E8ptxGm01ak8PiMP7d0POHK7at/zYtLhdyyH5tPwLtjWYPinst3tnEIOzQu+Kjlk/Dmdhp5Vo+eMoEe1cz7WZ7LdbYb0GaxR+N7Wo0oOcWxzlEN8Jkedf1ZyyOxcLF/K6mcybdahb0TQx2tJpU/NCtwKvsHoJjt/cUHXTclOK2P5WP5XFtowr17RMOslMNkvOdG5D1dnVfu0rJP+FvHKxlhZWzHfjgu8Jxy8xwlvnv8Q2W5Uf1BrtxrVc7yk/CzRYOV/D2h4hGiYEXxAuvi8W5U+XEbzdADN/8uhueHQjP2c2w77cMMpz+OQ4R/PNE9w3CmfA+6TtSvtOi6W9I26gJkntusN4gzduMMTdVYEec661owDS+HGfsh2vUHE40BenCT6u8XsZd3yuAOrGy/YrjeIeMTIi1NEv9IjPT37hAOrGy82WgeLF0ofqmflYwtxoTzJxDeoO2D5s7CuunilEy5/g/32KOVZ2SbAuyBgswzOk2fLZx0Jv0UdSdn8TDdUZ7hOAAzTiZR91eCp/Ykp4oF99yqo94NXOmlQvghoB60RrNHiL393TNDFuF8DuB/uEXee1J5Tme85fot7gGoO4Pn5BNTH05U4rvwa1Pf1V8rxpbAL8DwWutaz8qdFeVxr8d4Y2gBOB8CacXCrdeBpBzfShd8ybqbTvlOxJdCukqdRyItpG8jr8jngI4U05mms1ckb1Y5YPoSXqh0bVB55V3W9PEd5Ietl7L84XmLL5O+kcY8+8uwfhjBwL4Dl6wi8zwgu+z894+jduCfGMPPEeneiewWDY5vy3Yxqz1nFW1f7gQxL4cY5gvXuQeybeuvlbvumfL7b20Oe7sIL1rtTx7/oZjvg+dPTldX8583F3Xix0erkxSDWpir2QI3+x/INhxdq7V8XeJTejXuomfiGdUQr/xdBb/li0rvZ1oRj3vZ5uu3pl8GacWDNlsCq0bsy/wC29Vj5L4a6/mVH1+a5Qe2dqzYbITp5bHLbmVzj/jIOsLAM18vKfwLMM28sse+UzV1ldsxPEnOX0p3sXV5unXQbrOto8U2/4l6qsYdtxff4KFsLjmeOtYHf431jzJ9Zhz9jDn9S+4wpXyXUj0J8xnBO51hH+D3P9wp3WTyfl8q02t8bjYqfCGO0+GaQPnie31yoD56nj9ey3f2I2yZPHj/xfAzzE2GMFt8Mkp/Y36ryk8cvlmf7jPKXV35C3EYo/3E/4otpfaPaqwbveH1TE/XAuCBqDvN8OHk8dot9VDZ3f4WzvlH+wlhHXt8MQo9FnlTVY9ku4emxng6dJ17fDGJuVDGhQ+dGtls1HFjHu/BiGPYVkBdVbenHiRfevkI3Xmy0OnmRyN9nxasb8mKO6J8T5U85vDgpYKlzUXwfIMJCnR+/Kdsj+BbQ+X+J1jccjxnbqk604/hm2Ypj4RjlIUyes04CzUrucp2s/HcG6uZGl5rbkcejxTeD7Geqb4T2M56jsTyeP2P+nHT4c8ThT2qZ5MmFUJmk5LPyI60y7+XJ0yWNxqprwdT76N3WgiH76MhPjsmoYvrXst39iG1AefL46a0dvbXOsMQ59vivfKk8/161d8r7EqjXeutR3HP9pYA9xxq883Rz3HO0GI2sM/+6ozMrHzjEzbrRIPxPUA5V9T/hM0Ke/4l3V3GeWGcehJ5YVSaruwCUfsF+y3yvlpLtacf+0orSGyypswt8lwjO6Q3Kwz1KPg9xWvDB8nD/EvnHaYT+Rz7lbfiuh9twuRw+cx+sKh9wb9LiD/O5/4mrbbpYPqC+GrKm3m9jgvfJZhxY3rotTywfEvn77/Birgsv5ol+b28f66f8PeYr8oLnjUS+/Ste3ZAXIT4j8w4vPP+TbrzYaB0sXhwVsOpZ+dhCXChPMvENrz+t/OVCRuVybO1qOT3ss4Tjmec/hTfx2F1knqPPveJ5PdvdZtheY/TuQZDlfM6p6h0sM4Ke0D6Pc+pLZVrt75HXeRqFvIi8Xs558D5aw3TwrtWZh75M461OXuC8z/OC8oE6I3ihYFXxZUK91uqB44HHGNITqi8cBbh25xqvJz7A0ReqricGoS/gnmNVfYHXE56tVeH21hODsIEhL6rawHhemBGwuGwm+DZaklcXcHntkcYva2lVnee0pNYXvPZAWc5rD+VrqtYXfK/bWcGjWrY7qbWH8WlQaw+775jn9Wf30dpD2aCqyhKU71XWHp79K0/DsPZAXlRde3i+5vMVeTEMaw/kRVV9m3nhrT268WKjdbB44a091NhCXGrt4Z0TsvJ/CdYen+qsPTz7Gs+VCu+wrD0awCduM2/t8THO2kP1U3znrT1C9osO1x69rz3UuU2134Rrj09NtPb4k8v3n9mf9tOFvtCv8wrd/BdDzitMUZk8KV8q3tNXfmiJ6+3el6b8BpW+7t2X9nmOvJhyeGe48qT22qYc3vFdnonOdQTfz828Q1nXELyzd18YkXdHBT0eLBXTrKpsPpa1x8673/ORH/XejNI4/c/BToww3hwyAWNlj5QQ2CiBX3Y5R43eo1C0dyOiTFaCX8GPtRH8HSQ8jdFf5iy2qh4OS+0w2O3gS4jDIA4mPhw248DyFnp5GgYjVi+bXr0GIvAORO13XqgFvRLOHKSfx1AmvuEFhpX/elhgfM/Vcnp4YvMOeXsLjEROHIvMc5z0FM/r2e42w/Yao3ffMsAFhrrka4ALjCW1wOjgXaszDw02vMBAAwMHTESFgBcFqHTh4ervoUVBrMMHd2heM17/R2dRMAiHJeRZVYclq3uIEUEF6RqWMc5G/NAx/iPOGD/h8M5w5amRZaX6ghcwln8ND79jPAjLDpYqQya3UepgmsrQ4wXTDDX0/LzTRlWDaaq5W/GOF72JDJk7vDsjeHfa4R0aVs4I3tm7X4/IOyV/vUCkVfu3Mk71CutcRFjnI8K6IGBZX7sI7yP2teAA0oZ/imiNrVPUCJ/Rw/xh3l0StDZEHh8ivSTwXBJ4GiKPA0jHgKUOK1yg73CcT1Me9m0OII199XaRp4Kqf1iRl+s7R661ceH8iod38NuNVjsfy3/mtTbMo8WzcoJi+YtzxRnKQ1l4jvKwfxqMxGNpkfsBym3EabTVs939E/vEGL07VfBNyW0cG954Ufq2lQuRQ5fS8C44gLTh75ccUmNaBaMy/lxOQ89OAOmmoEe1MwaQxjZD+gyWF0DaC8yPcohl1DnI4yBbKIfYpnqqS/04gLSSHUrP5LXIiKifcihQ8A3GQdavH3FkTQz9utu8s3RN41TzTg1w8lpuFead99K8cxDb7QMSt1tN0Kfaw56Nnygr+sXPM4Ie5tcG9bPzwB8lI9hOd07gPe/gPUd4VeBy5ZCCeMs24MdLyp8mGqz8Y0ADBwE/JfiAdNn+g0fzyYo0nwyg+QmH5jMOzSgjuO2wD59xyrP8Z/jnMs0TlFmnBHzuk09DHRdL+kY902OY98jOEc23iv8Xe0srzPMs03shzJNzorwKyKlkNMPygqjmiR0SE+mKKyw7ynhxgehXOjvKDl7vnHNgdeMF7xcmWgOteHVDXlwk+r31vuLFeQdWN15stA4WL04LWMomyIGCWZ5k4hvUu7D8XwC96l3XOuHyN9hvef/Ryr4H4H2UgM0yOE/K/sD7OGreRP1SOZ6dh3KsM6ogP2ovxJwZ9/teyCc6+mTVvZD5QN6xg1Si/fwd3s0J3p1yeId6ekcga3r3qRF5VzVQ1byAxfXF8ked8qcDy3d1qOIIqbz4x41fTDZ5WVn06ONBiRVslFSkzPHqCMHFbzP6n52oRrLdqdu3obAxL9ZpmA8pLEHKkMKKlvGzbPGNRmEs/zkgyL+iz0bf81SHUEOelb8syqMhjZ12cBK/HADrpIO7KcpfdnAjXfgt42Y67TvlRIJG8zyNQl5Mw6+6HQAVoLFWJ29UO2L5EF6qdmxQeeRdVWMob0CFGEOx/+J4qWW7+0tVxeckwLUNHXYA+2fOovPl5pg55cDq5pi13yP0HDpmlvMipWMmR6q38t8Cc+h/vlZODztfqohhsw7e/e6Y+V2Osl3VMVM5HIb2ec8xE3mdp1HI24+Omej8w/OoOkmMfZjHxUu8gveWQh0zf6+Y1NXYYOdjbN8UfVyduJkSdFc9cfNjTh9XfFT9UrUP8gr/L4vQOk30WfmfBllVf0CX+dke9Aw2Yg5Cz/AObQxSzxiEk3HV6DzerZxjApaar9iwlqgPLHI9RrvUoy74gDxgh6jfjjhfeafVkXdsWNuvc/3/isi7qtHwPcOaF0lclQ81xPVsWMPJGRMb1vCopZoYThEcrsh+NKzhZOVNpggvVCn5/kIp4eunJgp8ahLEK61CFtuDCNmEi6qqIZu8q9AYlsKNR395EkzkZRIc1vAM0d/tasoQw2coL1g52m87/8yLeQdWN15stA4WL6YFLDVpIg+UPMnEN7wja+UvFzLqpfB+D5TTwwqHF+5S4e2Xh5jy1FI8r2e72wzbi3e1HwRZ3qvHnRd+q1ufH4IToTLkTAfvWp156DHDhgc0jPO8oDxtzgteKFjzlKc8BJRXgNUDxwOPMaQnVF+YBrivJyPGtKC7RnSHLtKt/J+Fcf20M65ZBiGf5ihPeT4oryWe05RnjFLWrXw3z5ga4fa8hBQsL6yIt/GkcCNd+C3jZjrxNMZLuFrtPPSqzdMo5KXelMPxNdbqrLfnyZanEF6qdlQnuHhzTc1/ynh5nvKUN4razMNx/3Sicf8NRaXUOMS69zLun4Nx/9HOuLd2UOP+IuWdEnQqXZY3xJW+5I37bvoSjz1Pd1SwvHGv5ppzDm6ki0+H8slTpNO+G7Zxj2seHvfe+iZPIbxU7ajm7XOUh/KCxz3KZZ7vcTzxfI/91PovjpfY4/6XikpY30F+sQMLjms17tmb3Mp/PIz7z36gHB+He1NrDiUTzlOeOlno9Rdv7Kk5OnTch8z3dQd31fke6eo234eOe4w4kKdRyNtP417x0hv33nyPYf9Yz0e5zONencpRsgTH/WfTuK+LetTgnTfu6wD3+wpiZkWdeMx0m++PQT6W/3sw7r/6gXJ8rK9XHduq//M4Ue3vzffdnO947GG7hzjfHXNwN0X5yw7uKs53SKfnfDfI+V6t1712xPJVne943Dchj53vUGYeo7xQPYHDzWI/xRNpX03jXoVRrcE7b9wfA7hfVRCnxmGI06037q3818G4/x5n3LPdznO6Vfr0IJxueexVdbod1Lg/dLrd+7jH+YjHfajTracLoNPt9yQa919b3JuhxiHrQXsd9z8A4/6X9zjuWRfwTiPiuGfZdTjuD8d9ynGv1nlKJrDNT52gxfESe9z/eEGM0pGbWSdOo61s3J+BfCz/mzDuJ15Rjo/tc0pnVmO7SXnYpxeoDlezdgrRD6+J8lepDOK+AnnXAmCdcXA/IMpfc3AjXfgt42Y67Ts17o03gxj3V4BmHveqHbF8CC9VOzaoPPJOrf3PUB7K5SuU14Q8jka0AHnWf3G81LLd/aXquMf1wxqN+wkoN5514jR50c3p1d4rHxT0keK26eaDwna/hqiThxtl5eNE67mKtHaztbN+omS9B8vTQbpFY2A+edEYYuPmeit7EZdlexC3B+ZxlBXGwf2UcTEe/B/LTwj4NkbHHVj2XZ6qjkv7Nof/TcXpO+PjCJQbLcEZ6oye2g9POaMiz0L88BqCL6pPMSyFG9tkGPzwkBdV/fBCbCFq/rb+k3j+vp7aPt9tf9XaWunRxxz+oLN+v/kz4vBHyRNvXlLrAZRlvJ+gxpLloZwZITwjAk+onLNvX4paUjB+jPJuFfqO8jsegbor3Ox3PIgx7ukm3ca41S/E17abjsXy7nxiXpzrwosQ3WevelQ3XvA8OIgoW8iLqlG2PH+1CxV5sdE6WLwYEbDqWfnYQlwoTzLxDdo5sfxbCxn1UiSoV5TTM0604nhm3UbhTTx2F5nnZREi54FP3GbYXmP07kWQ5ex3rPqpmv+Vn1zItblqrhygXVP6HXfwrtWZhzZM9jtWe4I18Z1nD1WweF8S9VXen0DdAu2UH0X2ilj6wiOkLxg9f9nRF7DfhqyPBiELPb+KmPOCwo3jhvWFQUQcRF5UjTjIfiDK/s5l1TmKWSrLZ1nmRdm0VxIv3VPywhLLC5Rp6uaJM5SngjZZXjPbzTPLWxA8wrFlaYT+Rz7lY/ZdD7fhcjl8LpPzobLEvn0pwBDJEuPXZzmyxMqErj32myzh8xLzDqxutkOWJYluZFjxZAPygvf3uvlNsiy54MDqxgueYxLdvrDi1Q15EbIXfcnhhbev3Y0XG62DxQt1fqCelY8txIXyJMvK53aWUe+Dtcc3vaKcnir+UQpv4rG7yDzHtYfieT3b3WbYXmP07v3O2qPq2bx5QU9on/fWHn2yPcq1RwfvWp15TcjjtUcT6s/zQlPwoil4oWDt1UfC6oHjgccY0oNztqcvoI/1NxX/qP1H3oNSNj68vaaqXdto2uu5IW9PL8W5oTFBZ5ntEulRe4DKVl12xhTrENrG9u1LfvTUxp7tddjOhHr+KynOhI4JOst0RKRnTsDyxnvscVyf66TfcP6oo/efgXqE6P2D0HWRr1V1Xe8GB4blnXXKE+u6zcS8uNyFF02ivynKoz7BZ0cvObC68WKjdbB4ofwC61l5f0JcOIYy8Q3PHVb+N0DXrT9YTg/r5coONuvgTbweWWSeo66reF7PdreZPSOf7N3vObpuVXvwOUFPaJ/3dN0++RHKwKJNoHGs1Zm3AHms6y5A/S8Rn9Qcrc7zNA121u7DPC5e4hW8txTqy/fPioh1rHtNFPj2YhvneW0Q9mB1rt/ri8h3b/+YYSncnm18EHYL5EVVu4UnAy9X5MVG62DxYl7AUvucyAM1hjLxDfvDW/lzxbjMx+5rHiynh+003pyn8A6LDYf35UNtOFdAfvV6m7C6CTa0z3vzGvI6T6OQl3pei2HD8c6ksY86znlod3kNzWux9mmeKoLeqHgPIb4VTE9oPBorv+7Mn1VjYA4ivh/ypGp8P46B6dmdusXMGIZbDr2YHzFvOTzfhRe8Rt5v9oJe98a8GJiD0CW8GFAx9sbqAg/7IyCsMnsZ7wdZ+SdBl/i4BzvhzhEN2FZ1oh3HN8tWHAvst8ZjGeuE9kIld7lOVv5ZIXfV3Gt05eXWnTOjo8U3g+xnVc8DYz/j2FFY3uJXK/5cdPgz7fAntUzy5EKoTFLyWZ3PqzLv5Ql1k5fKtNrf2zvFT4QxWnzTr7Vzt5hlIWtnLz6J8i2qZbv7kdqP8PhpNCp+os1/tPhmkL7sKk6jx3/sdzx+sfztVmdeqM8ln9lA2Yv+mB9HunmsuHCvLHRzttn+VUdn7raXwrrRfrM5VbkBWuFWcmiQeiLyoqqe6MXe4n1Ftg8g32xdnXbsL20qvcGS8qOcpzyc089RXhPy2DdzQfCBz78z/ziN0P/Ip6o+lrFs0nMkH4xff+/QJn1ok87i2qSHYd8ZedEk+pui/GWHF96+c1X7fHOf82JewEptn38/rKm/ow/2+UHvO/P824Q8e0Y+2bt/dWift7Scat+Z54UFwYsFwYuQPexQW3/T6Mza44HHGNJTg3ehtv7vPn7/uYo9v9s6okb1RBpRZ6rqF1nlbLLCreZxr697tHbTOTxf7xD9ZdzB3W0NwHzybMWxcXO95wVuLqtizHDsGp4zlO+86qeMi/Hg/91swMoeUBajMU+9+EzeqTAuu/X1FP7HHiyv/3Tb82HcSlYyLar/lO2VlbUx+7r3o40/kNpYxVXx+NxL3KgQPnuwvDaO4XfNtIwJOstkPtKjZIpq45C91dA2xvX4ZWpjtBdOlOAc5nPTaCft937usNnpkBcp9nOHLa5UzHiw3ewUXnxHtPMxfy4OkD8jDn+UPPH0y25+IiHxa5Wc473iEYEnVM7Zt/k4+JniUD7HbDn9yvu/MeJKDcLuiGO8qt3R6rfXfQlsm2GwOyIv+m13RF4Mg90RedEk+puifEy7I/Jio3WweDEiYCm7I/JAyZNMfMPrBSv/aCGj8nrcfmU5Pd4+Y8jdF/vd7ngdZHmvdkfvDGOoLcbzTTq0O+62O3prIdQfmkZn1h4PPMaQnhq8C9UXfqW4eNj62Fn73tEXzkKdQ/SFQawJlL3Lm1Oxva1+ez0TehbeDcMcqfaQQueFXs+EIi82WgeLF2cFLHUmFHmgxlAmvmGbrJV/J8yRH/3Kcnpe7mdCt5w5MvWZ0LMC1uGZ0HZe02Bn7T7M4+IlXsF7S968dhbg/nIRNMP6RRFWPvtYZ16zMqHz2n47x2H1U3buELvfaXg3DHa/QZ7jQF5stA4WL04LWMo3EXmgxlAmvuH9Qyv/t2Fe+4evLKeHdTO11zTr4E1sw1pknuO8pnhez3a3GbbXGL37XGdeqxrXq+p+4mkBa9jOhHbwrtWZh/ogz2tqXW55Sq9SuoHhxj7M4+IlXsF7S968dhrg/tzU/WdlF8Fxkv8VW16l549GIB/LfxmMxW907DDWvrP0ff7Mvg9zgk6lt/Ier+qHx+Fdv/dbvb2CFPutmaATY9G+hKvVzjPeDNu9xJ6vQ55CeKnaUZ3R4fE7mXXyAPOUP6Pl4Xji8ybYT1Hv/MZEdpo5GvczUI7PK2KdeG/b6lQmE2YgH8t/u6M32zehevNZquOt4v/F3pJ7Fhx5cpZ4otYcZwRPPH3Ewz0D74bhXpKq8TyVz5Znc/BwIy+G4byTipMeKs+r+BZ248VGq5MX+81m6u278BpCxdbOBK9wTsBvUIZh+R8FveXoqzrh8h0eqt9yXVQsz7kS3IYvx/2TpDN5Z8txbHlny3EOU2OFecl+taibjogy7N9l5X8B5P4bSe7jN2ou4fPtVv6XxVzi2cfU+Vis62jxzSD35LGtqu7JmxxQaxHr64o/Fxz+zDj8SR2LRa11UF8JOZOOcyz7IOH3PP8q3KHn243GqufbU/Ozm34Swk/kk/FI8ZPn8BkBS9kBq55vRxijxTeD5Cf2t6r85PGL5S0+RdXz7dxGKP/xfmSbd7z2qsE7b70xA3B/qkA4xnUs8IWuAyYBN68D0F6Qop1VbGzUKRA//o/lG4I/Nj/POrAUbm8dkObunDYv5rrwouzsBpZHGw7fx3rcgdWNF7wOOJ2YF/NdeMF2NDWnhN5Ne7oiLzZaB4sXMwLWbLZ7bGE8OYaJ/FGyJhPfzFL5WVFeje0xKv8Q6PXfUDxPUxmDoX7zNCLesS0eYd1udeJpRMSDsB5r3f9V6xSDlbgf7uyXmK6A+yWIk9dvqP+gbsZnkNZhvur1DsYRQY+663mvbaR0zV5hnY0I61xEWOcFrMT76qshtCL+KaI1Mj1LNcJn9DB/mHeerRvzWCep6veCeSYrYsLy7hdSdna23WPffpxgYl9leYrzyYcVebl8fxPp0spWruZqtpV/E8wZzxTPynbMe2TeGS0cE7wHrvaVhyX2MftvhcY+fqcjt6v2PWWXVWepWA4lsiOthcohwz+V7W7nFHJI2amUHErsv7lq9CwIelQ753JuJtvdZk14Nlh4F5WtR5Uc4vW3ilWk/APK/LnzZLYAli9l9TOZNuvQp+xBrMd5NjWEoeAbjG6y8z0VZGcta9tBWHZ+DMjO95fArJfAtOfE+4yuzqrsQqyTfhLVy8ZYWVthHbFPld1XznjPEd5cpj5Ethtv35LpwXqOl5RnPy8r/ylAwyMl/pfIB3W/kkfzfEWa5wNo/psOzWcdmrGfc9thHz7rlOdxyPDLzsvjuDst4HOf/EzHrqfOw6Ps6nesd2W/9WIIdLPfsq7l2YI9W3yehiHWu7qbvkb/Y3mUHd7ZlwsVeTEM+/vIi6r7+8wLb3+/Gy82WgeLF0ofUnvrofehqf0pllFfBrrBP6H9/TKfgPz5OOVZ2a8CeF8hYLMMzpNny2cdCb9FHUnZ/HifCG2T5wHG+2k9ibgMntqfaBAP7Luvg3r/C6IP46XebrXLfQPxnvWNOUET4/0GwPv1FfHWst1toPabuF0mBc053L9RZIT4d+HZZU9P4vhY3wr1/aE+2wR4Dgtd51n5piiP6yzeF/POCCpYpx3cC6J808GNdOG3jJvptO8GeJZZ+tQqf3avHbF8CC9VO6qzXk3KC10r8xmxkLUy9l8cL7Hl8ZtoHKLM5T1M9PvifXUlX638T8C4/10Hn7WV2kM8Tnlqra/8MXn9M2yxy1LfGc20ZIJOz5feeHPoS9/OU/unlof7DexLr9bZys8e1+i/S+Ne7Z3X4F3oXefvP3L/mfXBP3TWwMr2hGOH18CD8OsuO3PXrc9g/fbq1+2dDR3EWqfsXH2IbOnVrxt5wWvgQfh1Iy9S+HWH8mKjdbB4oc7JqrkQ17sMM/QMrYonUaP/64JWhMd2zVMP3f/NZeKXFs8x/QbUPu3tVieeGD4Faq+FfVuQfzYX7Pc90mbRZjH2SNW9Ht4eadU2Umdwe4XVjAhrISKsKwKW9bWr8H4Qvi2Gf4pojUzPzp7yVaKH+cO8uyZobYg81kmuCTzXBJ6GyGPflhiwlC59hb7Dcc66dBNgsm8L9lWWpzif4P7sn3mojQvlj9onytNGq52P5d8Hc8YHFc/K7sOxkrCfXaY8HBNNysM2Nxg2lh6AvBRy+xUFPJTbiNNoq1N5fEYe2rvXOnK7at+7IuiZFt+xHHpFGt4F+7YY/qlsdzunkEOvEHxVcsj482AaenZ8W14p6FHtjL4t2GZIn8HyfFtQDrFNDuXQNcprQh7L4wXAx74tl7rUj31bFH3KRslrSaVPKbuogm8wusnOd1SQnfkz7zdZ+RdAdn5BCcx6CUx7Tux75eqsTUEP66QfQfWyMVbWVmyjXBB4rzh4Fwiv8m1R/UGt3WpUz/GS8peJBiv/F4AG9hO5JPiAdLFvS5U+XEbzxQCa3+3Q3HRoxn7ObYd9uOmU53HI8BcyzRMcd5cEfO6THwt1XCzpG/VM76GwXW+BaL5V/L/YW1phnmeZ9lFiniyI8k0ow7rWJQdWU8DCfsh2vURrmRWWHWW8uEr0e2sNrN+sqP/Virxgu14i/WXFqxvy4hrRr/RIT8++4sBqZj4vNloHixdKH6pn5WMLcaE8ycQ3qDtg+c8C3eDzHuqEy99gv+VY6lb28wHe5wrYLIPz5NnyWUfCb1FHUjY/9m1B2+QVgPEFtJ704v6hDZTjddh3/wjq/Q+IPvRLut1ql/tS4j3rG8rngvF+KeD9fyrirWW720DtN3G7qDOnOdxPK/a6QnwzrkB9PD1pjMr/U6jvv+uzTWCB6hC6zrPyD4ryuM7ifTFc/z8YAMvzx1BrwAcd3EgXfsu4mU77Tu1xo00lT6OQl3qP+wGgeazVyRvVjlg+hJeqHRtUHnlXda38AOU1Ia9srYz9F8dLbHnM9j6zL6KeWwe4vP7odrce8z9mvACFG/f+ObZRtztYmdZuZ9jniFbcG+F1ONYx3nhZWlfnii2ptp+gPPQRmqQ8dd6A9+OwjfjMLvOE0wj9j3zK5cC7Hm7D5XKWho2/M5SH/J2lPOTvNOUNC39ZLhhclgssb5T/T96H1o90wsV4DoOQN4bf8+2bpbI4VpQfHveBGGf+GwLW7VYnDer8jo0PPh99q/h/scdkfLa+jPY4xIm+Ctz3cQ3Avge/5eyBKPl82uHduKBH2XT32kb7MZbCXmFdELAS+3EF710b/imiNTI9O3tGnp+Y4p1a6zREHsoizEM8at3QEHm8dx0DlvLL9GKij1Me9m3eu8a+anLO+DcBebj/Mv3qNi6UP7hOxW83Wu18LP9Jr27DbBTPyqea111Vz1mota/BGJZ7dTgmaxPy7Bl5aO/OFnxTcrtq3yu7a5e/YznUhPeD2Ls2/FPZ7nZOIYea2W6+KjmUeI9iZ+9a2eVVO+PedRNoQvoMlrd37cUCRTnEa3V1nkTJId67PtOlfrx3regbEfTxWW6lT3WLTcn6XjfZ+ZoKsrOWtXVhlp1LIDs3S2DWS2Dac+Lz4a7OquIss056k+plY6ysrTi2/nmB94KD9zzhVXvX3c66830ZVs/xkvJss7byHwg0PFJy/h/5oO449Gg+XZHm0wE0f4hD8zmHZuzn3HbYh8855XkcMnz2T8Q6qL7E487KPwZ1DLmHE2XXMJxJmXN40u1MinfmPORMiooPNsgzKciLfp9J8e7h3O+8OCtg1bPy/oS4up2dKIsJ83aYD194dSdc/kbZ9Xh+vQvwnhewWe7kSa192F6n5grUC5T9yfQhnOtnBTyO7295n1B8Y/0LZWe8/rW8znufhgNxzyfCXSN8WabXCmVxQpHuKZE32gOtN25sbm9vba4trd1bWb67dLOW7W7jEfEuZJ9E3b2V1ha5vKL2LflehFHIm6e8McjDmPS8l5Mmxu3ySgj/Eb8akyF7Xl7sWhWjuSqsE9lu2c160YSAFbqfYN/mcueHi3/U3M/xLNQ9JErusQ/Hp4Cc/YI+24NYf2lm7eSt8a38gijfhDJ8l4znV6lgnXFwq/X/goO7CXn4LeNmOu077+6TQfgtdJzJA7xl7YjlQ3jZhDLGS3XeY4HyQu0klykvxE6C/RfHS2y9hG29ZlsO3UfsFiOA+d/tzge+r+kI5IXc+TAO71iGH69I6ylRHmlgHwvcFztFeVhHts8kupdjkesx2qUedSrPPBijd1/p2KZV26j4I+oulobDu3ni3anEvJsTvDvl8A7n6jnBO3v3NRF55+kaCtaEgMX1xfJKNzlW1ClP737PR37UezNKE/Q/G32NsONUzgatlT2Sdf4/XkLwCyX4Juh7/Daj/4/TO3b88L59gd7lyTppg2DeKv5f7CktXVeb7paqOiaxswVOUuxwg5PUEcpDZQ3bihPzFvlU1almnODypOUpwfZt/jtFSjAGsmKnOQy0NyLgll1w8l2gBP/Eq8vx8QSCwQU9hzl2tjkJeWUBejOoAwZJZOHQLbBrnXBXvTRtxsHdzXjJuEMunMwEnfadUoKNN4NQgjsuXWl18qZbMNQQXqp2VEopB5rCyZAD2uFkyAqymrSUYm39F8dLLdvdX6qOewxIebSYydQ4xDr0Mu5/Hsb9Hznj3uqrxr2nVLJMUEEuD8d95/+H437v4x7nFR73KBN43CsndS/IJY6X2OP+TwolxPQ0XIREbNctdZmDJb7cLH9mnQrHOetwuJBj5+cTkDdKedh+VfU041NVPS2WsfLpgihlJOAFkPGrTF4fgXws33i4je/Bh8vxcUBcDHrMAaKnBZ2Wh23Fhg5liMDAyyGLOByTLDOxL8wFwDri4O7mKM64kS528OaNJqTTvlPy2ngzCHl9Emhmea3aEcuH8FK1o5Kfc5SHOsYRykPZc5LycDxNUx72U+u/OF5q2e7+UnXcHwG431xkWN8ZhXJYB6S1bNyPQj6Wfw2M+9sPl+Pjgws4tlkmHBd0qnHPskv1F5Sz/R73ow7uYRj39u5w3LfzcD4apTy17lAy4TjlYT/FcX+bxv2oqEfouB8FuD9Xu/9sfWdK0G04jxX/l437KcjH8q+HcX/v4XJ8HBz8mOCFkgkh6zpv7B2Dd72OPWUv8mBNObi7He5k3OrgPNOSCTrtOzXujTeDGPdoYOdx3+1gbQgvVTsqOwlfbo9zzhTlqTlHret4vsd+av0Xx0st291fqo77KYD7HcVzyna9fuP+Zs9LtBbwTXZwGoV8LP8XivqjnLDfXhyLtq/fWdpeubN9Z+3O5ubqvTsnCH4GvDuaAP+d6ys37i2v3rt+d23lzsp6V/z5+Ngm2cn7NZiH622WE7jGGqE8nNN4M3WKvru1x7pzMvqPFvBwQxBxTgJfsDw+52mM3v2Vgm9qQxDXet76T22mIq/KYKF+zpvmRt+4KI/wuD5/DepjzuKqbbn9kF8p2s/mCmw/xGm01bPd8zvOwaw/fJrTfmr9o9bQqv2QV5iHjva4/8UOGngBIfcdhDdG5ddec/83//8zaEzzQQzMQ3p5TE+Keu33cft3Io5bNa64D6lDP3nidj8KeFWf4/I7c2ymxwX3Eyv/hVB/O0wzKeoQs00N/rE08FeYh1mmx47hV4fCaiW/BovzDNdUtnuMRazbklc35RjSyHb3Be6bCtbRirASy/8Vb0wirw3/tChfpU1VvRGWHRqcznbzq1c8yEMOVDMuaHjpkh6SXTjeeZ5BWcKHEc7CvPE1zrzB9jOUff1oA8WbvY5fhUfN4dPZbjncKx6EZe2p7BY8T2Mf4Xma5SrmoU3DYNjYnaHvbhX/L/aYjH5bc+IchTgxCA6Wx+c88d78v3fmcLS3ejZYNfamiT+zifiT2JF0R3YqZ0JlJ5wWfKo6HxquqWx3v0sxH6q6ee2Mtinee6jqwKlgpfUdbLfprFNvxD8tyvcquxAWz4eNiHjUHlaIPEvtmG32lDLHbJZnaH+x5zyN0bufTCzPuukSP1uCs0yXYJu8lf+FR9owf8GxyfOeGtLM++wHcf76jT61t5Lnaee2tZXQ+cLw92u+8OQm8lX58Ni3LJ/y9MZWu1wvc0me3h4R1jsjwroTEdY7IsJ6MSKsJyLCisn7N0eEFbOOdyPCeioirOciwnpbRFjPRIQVsx2fjQgrJu9j0hVTrsaka1hl4QsRYcXsqzHpemtEWMM618Ycj8Mqv2K2Y8x5KOb8GFPmxOT90xFhxazjsMromLy/FxFWTLk6rPpETD36TRFhDavOFLPfb0aEFXMMxdSZYq4VhlVfjSknnowIa1jntJi63LDaOt4SEVZMPXpY+RVz3n45rEWfjwgrpoweVrl6qJsMTjd5QwFLnRnhvasG5KXYu7J9yVFRD6StTuXxOU9j9O6Liz0+tXel9lhmHd4dFfQwrDL/z2NEn5X/hoK+tHvCa+t8ZttwIO6TiXDXCJ/xG98hfnWG3OieEnk9BVdd3Vpf39zaXtte3Fq6eXOnP54kWvldHfDnf6FnKdNehLa2rM4v8ZnGUcg7SXljkIeXkHFw1TSB0daWQ/iP+BuiPPseh7ZlQ+BBX7VeYU3tEZYFalVn+JVPHcvuRHvVrt/BtOBhVb+Db3Fk9zHBO3WGUclu9qsu8zP59kc0zlA/Eyv//4GfyXcWz+r8EvusKl9S5evK5+1RpvJlTnWBz/JGBL78ezurwfX6fmgfvswA25x5lScbo4l9F3f80FRMl5D5HMujL43VT/n9MCyFG/sqX2aQSNdyffKUT1ON/sfyWEeOR3BMwErsA7Wt/ActVY1zw37bKHfZ11qdZ7U8nCORJ5xG6H/kU9UYOEouqqC1LPvwW5R97DP3S86YR/8yhZsvMEG+pujnKiAv9nPEj/9jeeUvqeKqMSyFG9uPx3yiQLMrnq6BvOAYAV5MCaV/nHBgdeMFzwVpdOM2L0514UVIrJJTDi+8uCfdeLHROli8mBaw1BqefT9ZnmTiG46FuAMDzgjNv6acHvbrxfHcoDyFd1iCRB8HPnGbeUGijxS8Ufq16qfqspCG4B3HF+vW59GX9aUyrfb3yOs8jUJeRF4v5zx4H8Xe6OBdqzMPY4mMtzp5gfFJeF7o5aKPvcbQsXrgeOAxhvSE6gvTAPdnK5zFw3XwUcpDPcnK9Wsda30tdB2LfR51/DF6t+CMs6rrWGVT9GCpM7dqnCGv8zQKeRF5varGWQfvWp15qM/zOMO8261OXlS17WLeY0MKy+poeeqsuLJ3YD/lPlF1zKNd4P3OmLd6hMTkSHWO3+prfRvHtYoVUc92jzGMNTRG7/6sM65jxOTwzg1PZrv5GpF3wZcnG/5+xRVQfC2TcdyWbCfDtuVxqmJMqThl+wnWVgEr5jlx5nMMWDFiFRisYxFheefTEtm1VkPHoeHv1/k0ZdP0zqcpe6HSYzEGKuYhnkHO45aHcpfj2KHM4Qu/sG8/TjCxr9pc322PYpP0eS+uRp42Wu38jrn40TbMj6A1s5qb1B7FFOWps7Bqrc0xWlLFMTAe2doI9QHVP+tUHp+Rh/bu3Y4+oMaLupdA6XZ8dw5+x3Io0d5BsD5g+KeypHLRjaugYmAlPnO/avQoG7Jq5+PFe24zFfMa49yaDV3JIZY1KIdY5qpz2EoOfXirXQ7xldXPZJonO5QOznrjiKhft9hKrAurtYf1VSW/eM2i4rcNSxxBo61O5bn9eM/2MxwZVVW3VLK/23z12TRfqfsTvDhQVv7zwMZ7pJi7VJtye2Obcnsr/iaOBbfT3ju+OdluOxDSVqfy+Ix8sndf6LQ36iIj4p1ne0JeMX2qHe25X7EwFD9nBD3Mry+j/tkA/qhxyPFnlS9Mw8E7S3gxziHXJcs0b7kt8A4aVX6aaLDy/wRoeIRoOCr4oPbwPJonKtI8EUDzVzs0zzg0KzmBPqaqz5TFJayVwGc/EBWnRsUq5D75tVBH3nOfFDTjGOY990H42Uw5POnmZ+PdgxHiZ4M6A++5DyKemYr1X6P/sTzKDvazmXVgddOLN1qdvEjj+9vmxYkuvOB7FpS/goorr/Zn2Y84hm1K2dNut9pluK28/eyyS6ftex7/3we6zne/phNumV95/sx30FjZ7wV4P/Ka8vqZ7h9aTu3hGS/V+GX9i2UTwvB80PLEccWNr+OZXuMzr638D4r5RPlV8n4L+ijwempE4EWeenuf3HY/BW334yW6dJZV39eZBLo+m+iKGWO/Jurn6VW85/ILYi5U+5l4h9w67Tdi3x0tvhlkzOeqe7pKZ/DW7t5+r+LPhMOfYYmf7PFT2c6U3YNtzeo+IWXbqNrfsE6jxTf94udUF/6E8BP7J9/xhN+PEawxAQt57PHTaFT8RBijxTeJ4/zv8HPCqRPjL+M/9mfjkadfVPXr5zZC2Yv33ZndJG9DJc+5b3Sz1ZTF8J+GvYVrZKtJvbfA8jTUXsx6BJZX6/kQnVzBmnBwd/NHZtxIF5/zO07/K13IG4eDuPuq42xQq5M33fTBEF6qdmxQeeRdVZv7LOWF2Nyx/+J48eTPXnx3bN8w9p1OKze27ywvrt3Zvrd088by8lq/75RaX11funHjzo176/e2b67eu9tv/Ktrd67fu3N9aenm6tLW6lLf639vbf3uvT8lYnFrKf93ue93em2vbl1fvnlnZXN7+97yzZvd8NsYsfGdJ5Q/eTK/P7OpcnmDN0blPwDmnT9La4VRgS8v94ai3I7+AbTE9De2uk0gHUQP4p8V5e05Ma0rHq0TglbF41rJL8LCdxOtzneTrd3lkU8ThHsKy1PeUcgbJTzHiv+xryEso2OMyj8Bek2ejsA39n1D4Mc2Y1wKP85rDGtEvLPyed/+sILGHX9IwB1zbx7HUQoZs3zjxvrN5buLq9c3721vrq70W8ZdX1y+s7y5ubl6d2Vz5Xp3GRddxi5trdy8t720tPynYvbu9dV+47+7eW99dWttZf3O6tL6nc2+z3FLy5v37txdWl29t7q5fHflXr/xr927sbS8dOfe9XvrN7c3t673f46/s7J2Y/v64s0bW3c37/a9/lt3727euXtvff3mvbv3lu9t9xv/5o3V1cU/7Xf3VpdvbK1trXfDHzrXov2Sy/N8xHMtlx9tdcLqmL8Ilsl3nHMmBV02zx8j3LeK94u9pRVvTkE+Gf4xov+9oG99POlbnn53TOBT+l1DlLd2yHF+Fulu04AnBZ8U3TjvG37Fg6r6kOGaIlix5+6YbeLBOlYR1iDbFOuN+PM0I8or/W7n7DjkHaW8BuThGM/T8eJ/lBEIy+gYo/L/F+ml0/CNfd8Q+LmeiEvhZ720Ico3RPl83P5NkBuf9WgnnHEBR/EX15Id37Q64ZmMRj6OC7rGqPzfBRr/XoBsy8t9uVOu6vgfbXW+67YesvJV10MoV/K01/XQl+yD9dAX0XootUwdJ/j4jmn7crLN56lDfwFYZfX2dBtsj6MBsI46sCYdWFOBsDzcSOsowbf+Nl4Cf5LKm1zD/jwh6OH+/DUw/r/t0c4yBvNroczXV9B/1BzizbVY3uqa4/x3pP/MAp4Uc6WiG/uC4Y8h/wxXv8ZqjDbxYM0EwjJ+Yvvmz9/Xn7Ze5jqYnyHWE/Hv+COkoWfF00eQb4Y/Rt8zXP3qe6puXt9TOmVVvU3BMn6q/jZseriS6zj/2bcss3+M9E3FL5zDWJ9HnXaK8o5DHuvzJ1q76UVYs0TvCaLX5l7V5xsC/wzhD9XPawLWiHiHust/DdDh1Rovia1qeenG4vry2tLq5tbSdv9txct37l6/s3z3zs3NmytLN9b6jv/m9e17dzZvbm5fX9m+s33nTjf8+d72NsV1iOn/p3w7OB5EIh+enbMhtg9fFqsZfeqxPD7naYze/Y+i36uzNsqvTfmdqHgQfO5AwcJzeewLa/SNi/IIj+vz+1CfR8hvx4vnMeizcRzPI/Rs3B877RcjnkeN8kYy7cPxulZnefSFVT587Hdl5b966f7vS+2+eP9ZjVse00gvj2kVN2W/j9ujBW9ijFs1rrgP4Vkd9Ofhdldnro445Xd8tDI9Lsr8805A/R8CPY/rELNNB+lvreImebF2+NdgcZ7h6lcsHFU35U+o/M/KzrIhrKMVYQ2bj7jyv67SpqreCOvDWp14jkbEo8Ztt7PVr1hsf8PjXfnr8tlqK/+5MG+8ypk3+Gweyr5+tIHizV7Hr8LjxeSKETupIWBZexpP2Z8c87CP8DzNchXzlO90v85l27q17Fw2xnzF8vicJz7v9oHOHK7OIqtYRZ6fburYNIM8k6p81r2YV6HzIceCSR2TStXNa2d1v5AHq1ER1iDj+SOv0b+fy/cquxAWz4eNiHjU2doQeZZoPO3IM4zRMyJwsjxD+wueSRijd29JLM+66RJvX9Q4Q+8+sfLPgy7xPOkS6qyEmtv4rPdBnL+2+9TeXgzDNHPb2krofGH4+zVfeHIT+cryDL9l+ZSnN7ba5XqZS/IU827dmPeVxrwrdljv8nwiIqyYvI95N3jMOt6NCOupiLBi3gsa807WZyLCitmOMe8+HdY7WYf1zvJhlYUx7/yN2Vdj0vXWiLCGda6NOR6HVX7FbMeY81DM+TGmzInJ+6cjwopZx2GV0TF5fy8irJhydVj1iZh69OE99tVgbUaEFXMMxdSZYq4VhlVfjSknnowIa1jntJi63LDaOt4SEVZMPXpY+RVz3n45rEWfjwgrpoweVrl6qJsMTjd5QwFLxYfjvasG5KXYu7J9ybLY9LNQHyyPz3nimLmniz0+tXel9lhmHd4dFfQwrDL/z7JYyEsFfWn3hNfWbZ+IY+8h7pOJcNcIn/Eb3yH+aUGP0T0l8no5g3BjdWt9fXNre217cWvp5s2d/qhifOO7OuDP/9Rd1Wq/znid5u7stWUVJ/EU8DVPo5B3kvLGIG/nLuY//TtN9Ke5V3ptOYT/iL8hyrPvcWhbNgQejtHZC6ypPcI6kXWOAZQTyqeOZXeivWrX72Ba8LCq38F1R3ZXvZv4qKCnm5/Jn1nSOEP9TKz8bfAz+aDiWZ1fYp9V5UuqfF357lCUqV4sXo7PPSLw5d/bWQ2u12uhffjuD2xz5lWebIwm9l107/4Imc+xvIrdq/x+GJbCjX2V7/5IpGu5PnnKp6lG/2N5rCPf/XFMwErsA7Wt/ActKR+ZScpDvYv9tlHusq81ynf2Z8I5EnnCaYT+Rz7l+H6R4jVkApYnF0Nj8Nq3KPvYZ+5FZ8yjf5nCzff9IF9T9HMV0xr7OeLH/7G88pe0fj7jwFK4sf14zKfRp9q8ONmFF6eIfqXPYl9n/eOEA6sbL3guSKMbt3lxqgsv5oj+OVH+lMOLkw6sbrzYaB0sXkwLWGoNz76fLE8y8Y2NP5ZRHw/61mctldPDfr04nhuUp/AmHruLzHPUrxXP69nuNsP2GqN3LUe/Vv0U37F+PSPoCe3z6Mv6UplW+3vkdZ5GIS8ir5dzHrwP5tldvGt15s1D3nirkxfzUH+eF+YFL+YFLxSsk5SnzsawnQ/rgeOBxxjSE6ovTANc88kPOYun7upUuiPfc5p6HWt9LXQdi30edXy+B/LvR1zHVr2PSZ259e5cSjzOVtU46+BdqzMP9XkeZ5h3u9XJi6q2Xcx7LCKs10aEZXW0PHVWXNk7sJ9yn6g65tEu8ApnzFs9QmJypDrHb/XdiSkP9VWxIurZ7jGGdx7xfW9f54zrGDE5vHPDk9luvkbk3VqN8Fk98B3i71dcAcXXMhnHbcl2MmxbHvNV7xvfD7C2Clgxz4kzn2PAihGrwGAdiwjLO5+WyK61GjoODX+/zqcpm6Z3Pk3ZC5Uey/ceDss8brAsD+Uu35eFMofv4MK+/TjBxL5qc323PYofI33ei6uRp41WOx/Lf8pyG+ZP0po59T14HKMlVRwD45GtjVAfUP2zTuXxGXlo737J0QfUeMF33PfUPaFKX2Y5lGjvIFgfMPxTWVK56MZVUDGwEp+5XzV6lA1ZtfPx4j23GdKH5/ctmQ1dySHvvj/vrlmWX+qeXk//UvfQerJD6eCsN46I+nWLrcS6sFp7WF9V8ovXLCp+27DEETTa6lSe24/3bEcKOa9kVFXdUsn+bvPVxHInzm73tnIcKCs/BfNVq3hWbcrtjW3K7a34mzgW3E577/jmZLvtQEhbncrjM/LJ3p1w2rtqXDVlt6sJ+lQ72nO/YmEofs4IephfF6h/NoA/ahxy/FnlC9Nw8M4SXoxzyHXJMs1bbgu8o1WVnyYarHwTaHiEaFDxHtUenkfzREWaJwJofsChecahWckJ9DFVfaYsLmGtBD77gag4NSpWIffJV0Mdec99UtCMY5j33AfhZzPl8KSbnw3vHVT1s0GdgffcBxHPDHkRsk+GsoP9bGYdWN304o1WJy/S+P62eXGiCy9OEv3KXwH30rz9WfYjjmGbUva02612GW4rbz8b9dHjok48/j8MdJ0PXu6EW+ZXnj+PUp6V3QB4Ty2X1890/9Byag/PeKnGL+tfLJsQhueDlieOK258Hc/0Gp95beWfFPOJ8qvk/Rb0UeD11IjAizz19j657d4KbfdsiS6dZdX3dSaBrgmiK2aM/Zqon6dX8Z7L82IuVPuZRldebp32G7HvjhbfDDLmc9U9XaUzeGt3b79X8WfC4c+wxE/2+KlsZ8ruwbbmUQFL2Taq9jes02jxTb/4OdWFPyH8xP5pPFL8HCNYYwIW8tjjp9Go+IkwRotvEsf53+HnhFMnxl/Gf+zPxiNPv6jq189thLLXZDLaTewev25jrZutpiyG/6fBnPUPaG5JvbfA8jTUXsx6BJZX6/kQnVzBmnBwd/NHZtxIF5/zO07/K13IG4eJ/YLW8rb/HBrnHWeDWp286aYPhvBStWODyiPvqtrcZykvxOaO/RfHiyd/9uK7Y/uG/z/iGzZhwOgHAA==", - "debug_symbols": "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", + "bytecode": "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", + "debug_symbols": "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", "file_map": { "3": { "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str {}\n}\n\nimpl From> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap index 2e82cdf81cb..bb463247dc1 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_-9223372036854775808.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VazW7bRhAeSqQkklIttIcCLRCgtxbogfqLfBRQ91ig6AMUkOX4BXppb3zzxpvsiMOPn2jG2k2cAYQlObPzv7M/2kQ+Qvb0S/xz6tvEtCNpg+IOvq2ug1VAXlUsHZOAOlrfqr+dj8f+PRPzEQ2S5zoZ2h/9Qw78Et/vEMg5OcgNyf+22t7n0obA+m9yaSd6YP7r3PCMwL+aej6/1w1/tEXzIJFocdpFtnO9kG5BSsC2NFKOJCBPwE4B+YVEzalVAvJUH/SPPi+Upm70SQCX1l07FJfVbTsczJ5+bwwd5tbI0P1inn+Vtg4jYkNCbIiZX0/5u4+cQ1sWA4xPWrdlW5yNQWr8+Qb8EyPnrH8ije/td3K5dmk+TGs5wxj8aX2kPptZesDlBpfWbTmFf0+NHMtL9ciA/mf/fuPbiemj/ZdE/gTkt/Qm36yPkNeYfFP6ydPvJ/9cSrM2+K1u+IWcm5T/neEv4fivnA1uDPyjNks7bwLKqrTG2ZqL808mUfy4Gzr/nPNRotay8/yTgT7oH1vfHG5CdF0SnLXN4qycCZHzNfJaSDdnkwutSDfuTI6l0XhEnt/WfT5ha6Qb6Y6ZCeg6iaPrXn0+lS4obmZkWx0RxvBu9XY8/jN8kQ5lWj/NwBeRassqsq+3yn8ah/+G7Qt0PnM2/WHkWr9m0l0zWz9kQP+XNDz/9M830o2b5kNp8DOC1352f870mQJ9IQ2MgQfmSeL1QHpWO/T7nNCXhqYA263sOeAKg1O6nPAMueZAO9Jn7BgBPfogg29/+9bF9H9p+47Fxn7DOp0TfcZEH1zvIW+kt3GeGztYv/SCne+MnaOkbeeC2JkTO5X+G0K/ILbfEFu0L9s/2RrpIDW4kOsvJydLGj3Q3qxu29s3Rpl/mD9tjDBvrO/mwGtGeFl5uO6y9Uh1XJB+ytfW1Jh+3982h6Ua80y6862VnwH9v/7d+lLb9Ao9H/fH1ePm+HjcHR8etqfjt8BfjO8u7VFwTB9eqAtC33oy8hpw8D4Fz8kinSn0npONSazUdxnRdQk4B3d1Q4e4Mfk2+gy8MLdC8cLccXDwbXUdrITopLoLyMW9pEg3v2OtNYfmt8ovQNdY+T0FfdA/mN8zouuS4BJ4ZnPLjMhhvDLQgf1nFTl+u5fGL9beqy9+bHx+Svwc3NUN3bXxw5ry2nhh7jg4+La6DtZCdMLxMY2vx15l5QP0YGccOM7suuhL1EmVX0jUcX8eZ2xdbv2D44ztF5cEhzWT7blLIofxwjU45pxIE788jr8G10mVXxA/xIhfTvzK6oT6jp0/LKWbC3d1Q3cpT/r28TF4sToZQi/MHQcH31bXwUaIXKxPeA4UQY+dyioH6MH28zjO8GzlEMhfQ8eZyi8k6rg/jzN2BsjOL9R37DyCnVXY3LY4K2dB5DBeJeiAOScS/axxcJ1U+YVEnXdXffMPqxPquznRdUlwQ86K50TO18gLz2kcHHxbXQdbldVXn0aAQxstLe6NE+hr7Xltd6SSOPr0nv1YHfvGAp79sHESMue+4B23h5fG7zXdccO4YPxwHtDnSzVz6Jp9EoiXA3sX51q9hvwXOJTXNBCv0DbG2Hu9NhuLQHpp/xC8rI199z9LCf//y3G/uT2tt6f9/W5z3Lx99v+X0PJPu7f3p+3uWL1budf1c/LZfUD7P6YDvVNo7xxaeuWXAX3uGbgaVPpnvDNq5Tm6H3rokgvtBx7kW1q3v7G7iPaOptKr7KLu6qi40uAykDP379ZflpfqkQH9956BxsTeq9T+SyJ/BvJbepNv+P9eSehLQu/is/SdNG+t7aHn2A8ygb/9hrpp7ri8fg854NtlRTQAAA==", - "debug_symbols": "pZbdbtpAEEbfxde+8M7M/uVVoigixImQECAHKlUR794dz3xOWqlStb3hHANzTMIu9ufwOr/c3p8Pp7fzx/Dw+Dm8LIfj8fD+fDzvd9fD+dSe/RwmfZA4PIRxkGTIhmKoK+JkCAYysEEMVolWiVaJVolWSVZJVkmtQg1sEEOrcEMyZEMx1BV5MgRDe4uMQ2lPxgayo9ZMDWKIhmTIhmKoK+pkCAYyWKVapVqltkpuyIZiqCvCNDlbpyjJyU5ZP2WYojM5s7M4qzFMzuAkI4Hs9C55l7xL3iXvknfZu+xd9h57j73H3uPWq8rsLM5qlMkZnORkpzij03vrWptUCqS6rCtulQAhCEMEEiEJgnJEOaK8rsKgEiBaJhWGCCRCEiRDCqS66Mo0CRCUs5ZZRSARkiAZUiDVRZe3SYAQBOWCckFZV3wQlQzRsn6juu5X0ZVvEiAEYYhAIiRBMgRl3QuhbRTSzWASIARhiEAiJEEypEBQDigHlHVjhKzCEC0XlQhJkAwpkOpCEyRACMIQLVeVCEmQDCmQ6qJbziRACMIQlBllRplRZpQZZUFZUBaUBWVBWVAWlAVlQVlQjihHlNc9WO/3ccBl5Pm6zLNeRb5dV9rV5rJb5tN1eDjdjsdx+LE73tY3fVx2p5XX3dJebdtxPr02tuDb4Tir3cev6envo+23xIfbr8k2Hv99PifMl9g1T9t8z/nb0vf5tvZ75gM+f1uHPfNUMM/UM8/bvPD/nV+kY54T+zyn0jO/ff+cc8e8cPV56fr8Iji/xNAzH7fzp6ljPhI2X+xaP5Ey5rvWT5Tt/NLz96dt/6Sp9szrld/mQ8/+TbSd/4//31M72u0Py2932nctLYfdy3H2w7fbaf/t1evPC17BnfplOe/n19sya+nrdr09PFIKIxV6Gof2C//I0yjTk943toPQrsKB1sOg74xxpJif7vrBfgE=", + "bytecode": "H4sIAAAAAAAA/9VaS4/bNhAe2qKth4U12kOBFgjQWwv0ID8U79FAt8cCRe89eL3dP9BLc9M/T5YJxxp9GmuVFZlsCBiUyNHMNw8OH6ahT8U+/Yx/TnxtRD2jbuG+o6+raWUTkFcVC6MJiFHalu3tbDz375ZEIypEz30kaH/yDxnwM/67YyDjZCA3JP/ban+fUbcExr/LqBvogflvM8EzAv9q6fn80bT8UReOA0PR/FRH1nNbUj8hGdAtiRQjBuQR6EkgP6eoMbUxII/xoH34uWSapsVjoC9p+npwn226eriSPv3eCDqMrZmg+1U8/0ZdDDNFB6PoEDO+nuL3EDmG9poP0D9J05Ut+6QPEmHPN2CfGDEn7RNpfO+/p+u5i+Nh2dClzMGe0kZss1TSQ18m+pKmKyf374mQI3kxDgv0v/j3G18vxDf8/VqRvwD5HdxKm7QR8porbUy/ePr97J8LatcGvzctv5BzE/O/E/wpHP+N08GNgf9YZ+rGTUBZFec4mXNx/rEUxY712PnnEo8UNZdd5h8LeNA+Mr+5voWCda30Sd1kn5SzUOR8i7xK6sesuVIT9f2uyZE07I/I89t2yCbaGumG+mNmAVgXcbAe2OZL6hfuS4VsiRHLHN4lbsfjneCLdChT2ikFW0TKLZvItt4z/2Uc/jttX8DzmdPpTyFX2tVSf80s7WCB/m9qef7ln2+o7zeOh0KRObsicwkY5Z53TsPx6H65Qq/lB24vFPpc0GSgn5RdQJ/c/2PMSp4h1xWoR/KMHjOgRxtYaPvH106f99S1neYb2Ya5OFXwzBU8uKZD3kgv/VwIPbTvkit6Pgg9Z6ar54r6eqaKnkxfKvQrRfcbRZcS+lLQk0jfw8p4cyVput8dfXs1rdROjjUtDvS5bbq20GynxchY22FMlaKvAF6pwkvKw3WXXCswxlL5jvnKnBrT7ofb9rCUfW6pP99K+Rbo//fvMidwnUzA+Xg4bR53p8dTfXp42J9P3wF/Era7tkfB8X58IRYsQ+vJyGvA0fsUPCeLdKYweE42V3zFtrMK1jX0uXLXtHTYN1faZl+AF8ZWKF4YO64cfV1NKxtSMDF2Arm4lyTqx3estebY+Gb5OWCNFd9LwIP2wfhOFazaesXAsza3aGsCjZcFDNp/VpH9V7/Uf7H2XkP+08bn5/jPlbumpZvqP8wpr40Xxo4rR19X08qWFEw4PpbxcRxYVjYCh3bGgeMs0v5sdJ5k+TlFHfeXcabtk6V9cJwVCta10oc5U9tfF4ocjReuwTHmiFr/ZXHsNTpPsvxcsUMM/w2di0i7su20s4A19WPhrmnprsVJrsiJyUvLkyFwYey4cvR1Na3sSJGL+YnlRsRRs6xiBA5tP4/jTO7Fv0aeZPk5RR33l3E29vyCbVcqWLWzChnbsk/KKRU5Q+ceONa5n6j1XxHHXqPzJMvPKeq8uxmaf7Q8wbZbKVjXSh/mIy1OVoqcb5EXntO4cvR1Na3sWdZQfppBH+ooaXFvbOBbqc9ruyNl4uAZPPuRGIfGAp79aOMkZMx9xTtuDy/132u644Z+Qf/hPMDP13Lm2DX7IhAvV+RdnKm4bCBc7nkZiFdoHWPsvV6bjnkgXPx9CF5Sx6H7nwWF///ldNjdnrf78+G+3p12b5/9/yW0/HP99v68r0/Vvxv3un1OvnYfUP6P6QrfKZR3DiU987NAn3kGLgcV/hnvjEp5ju7HATpzpf7IQ2lLmm6bdhdR3tFkepadN32M3FeIPgtyVv5d2kvyYhwW6H/wDNgn8l4lf79W5Kcgv4NbacP/9wqFvlDonX/W/iOOW6l76Dn2o0zgL9sQG8eOi+sPeopuwUU0AAA=", + "debug_symbols": "pZbdattAEEbfRde60O7M7E9eJYTgOEowGNsodqEEv3t3NPMpaaFQtjc+xz9zpMS7lj6H1/nl9v58OL2dP4aHx8/hZTkcj4f35+N5v7sezqf26ucw6QPL8BDGgZMhG4qhrpDJEAzRQAY2WEWsIlYRq4hVklWSVVKrxAYysKFVqCEZsqEY6oo8GYKhfYTHobQXpaE1UwMZ2CCGZMiGYqgr6mQIBqtUq1Sr1FbJDcmQDcVQV4SpZYoyOKOTnLyeZZjEmZzZWZzVGCZncEZjBMnp3ejd6N3o3ejd6F3yLnmXvEfeI++R96j1qjI7i7MaeXIGZ3SSk53i9N661iaVAqku64pbJUAihCAMEUiCoCwoC8rrKgwqAaLlqEIQhggkQTKkQKqLrkyTAEE5a5lUGCKQBMmQAqkuurxNAiRCUC4oF5R1xQdWyRAt6zeq634VXfkmARIhBGGIQBIkQ1DWvRDafom6GUwCJEIIwhCBJEiGFAjKAeWAsm6MkFUIouWiIpAEyZACqS5xggRIhBBEy1VFIAmSIQVSXXTLmQRIhBAEZUKZUCaUCWVCmVFmlBllRplRZpQZZUaZUWaUBWVBed2D9X4fB1xGnq/LPOtV5Nt1pV1tLrtlPl2Hh9PteByHH7vjbf3Qx2V3WnndLe3dth3n02tjC74djrPaffyanv4+2n5LfLj9mmzj8u/zOWG+SNd83OZ7jt+Wvs+3td8zH3D+bR32zMeCeYo987TNM/3f8Zk75imRz1MqPfPb9085d8wzVZ/nrvNnxvFZQs+8bMdPU8e8RGw+6Vo/EjPmu9aP8HZ87vn707Z/0lR75vXKb/OhZ/+muB3/j//fU3u22x+W3+6071paDruX4+xP326n/bd3rz8veAd36pflvJ9fb8uspa/b9fbwGFMYY4lP49B+4R9pGnl60vvG9iS0q3CI69OgnxQZo+Snu57YLw==", "file_map": { "50": { "source": "struct bar {\n enable: [bool; 4],\n data: [Field; 2],\n pad: u32,\n}\n\nfn main(enable: [Field; 2]) -> pub [Field; 4] {\n let mut result = [0; 4];\n let a: [_; 4] = foo(enable[1]);\n for i in 0..4 {\n result[i] = a[i].data[i % 2];\n }\n result\n}\n\nfn foo(x: Field) -> [bar; 4] {\n [\n bar { enable: [true, true, false, false], data: [x, x + 1], pad: 0 },\n bar { enable: [true, false, false, false], data: [x + 2, x + 7], pad: 0 },\n bar { enable: [true, true, false, true], data: [x + 3, x + 5], pad: 0 },\n bar { enable: [false, false, false, false], data: [x + 4, x - 1], pad: 0 },\n ]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_0.snap b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_0.snap index dadb7167f41..e2e79ef0a29 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_0.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_0.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VazW7jRgymHEmxpMhW2vsCvbU9yX9xjj70RbRO8xx6vQJFH6C3PkEvLVCghzaTHSrUJ1rxRsN1lkAw8pAiP/4MFY0mok+UPP1F/jr2YyTGGfWJeQc/1tNoFVBXbYUxCohRxpbj7WJ85X8nJCbRIXrtJiF76y8y0Bf5+w6BgpOB3ZD67+ttk1GfAuPfZNQv9MD615nQaaC/vvZ6fmpf9KMvXAcRmeVpa+znuqRhQ4rAt9ioRiKwR+Angf2cTGtqFYE9xoPx4euSZdoXPBHw4nboB/OStu+Ho/nT3wchh7U1E3I/iOsfqY9hpvgQKT5Y1tdT/d4Z19BWywHmJ277tiVP5iAW8fwA8bGoORkfo/W9/ZZO9y6uh+uWOrqCeMoYcczmUh54meDFbd9O7n/Hwo7UxTgSkP/e/176MRX38P2VYj8F+z3cypyMEeq6UuZYPn36+85fF/7P1dCffA/14+7o4Md6InGPkD0L+3ci5gPW1u7c/t3lk0x7Qde/E8CD8ZH9wfFSBWul8KRvkiftpIqdr1FXScOajU6MRMO8a3akDOfD+PmwHouJ9j/GkoZrJgWs6P8hDNZVRsN8BNTf9YprEQvsFXObPJzdK9h+DlitesUc8GB8sFdkCtZK4UVwnSl2MsWOta7UQBfWjqODH+tptCIFE65Ptss5ykFWYizE/CXeZdh+Dlit6rsAPBgfrO8bBWul8GT8JU/auVHsaLoywIC5JjLP3+6t+cts8IzmT1ufn5s/7ClT8pe+c11YO44Ofqyn0ZoUTLg+Cnsce7ZVnoGjVHDgOluI+Uv0Sbafk+m679bZAvBgfHCdLRWslcLDNbdU7CwVO5quEjBgzTnKQPZSfZLt50ocLPJXKnHV+gTHbqFgrRQe9kmtThaKHWtdqQEurB1HBz/W02hDCibsT6U9jh3bWp6BoyS9p0qMlZi/RJ9k+zmZrvtunVWAB+OD6+xWwVopPKzHW8XOrWJH07UEDFhzjjIa9tdL9Em2n5Ppc3c19vzR+gTHrlKwVgoP+5FWJ5Vi52vUhfs0jg5+rKfRlm2N9acUeOjj2Lux9k3beO/n7F6Gez9G+9ajez8yPmNrAfd+tHViWXOBY9LtDcqYfKFe+fDWXmlUr6O9Usbnrb1S7mlOrY88oK6QvTILqKt4pz7eBNRVvlMfFwF1JQY+Gn/j7L7JGH2H6M73GO0jbvB8j4ydG3+BnDAvoeHZFxmHBOR/Ezp/9ddLoVf65qgQ/LFvmdzfZifwYJ8Z2+/WalDbX9R6PMuP7TNI+0vFdgk82ddYLlN0hnzOox/xK37MaNifZAwSmPvdjy6Gf1M/dlputD22SoldAfdJPHhuA3WjvPz+250DOnFffMLPP4Sf/1DfT20vRvvmwvJj72RaTUlf5Lvu8/3tC0/2SEex4IV813Ux+FfgQH+Ttu/vud+kxuIpczS2t4XPVe0cgLSH5z9kP8rBx9d6qmXc9/cvh5455wn1z2sQ2E9A/i//W64zHuMJOB/3zepx0zw2u+bhYXtsvgH9JGJXGNhv9pv743p73H/cbZrN3Re3f9zdfTxud03988r9XL9mXzvXJtexIz4bJ8/OSXnWl4D8fyzrdHllePZR2nNy1YhcdGJ81qHMxW1/TjtTJ88asnz3/aAdYmReIXiyxzi68b9lvKQuxpGAfOkVcE7k+UC+v1Lsz8F+D7cyh8+sQpEvFHmXn9TfxHUrfQ/9HvxsE/TLOcTGtePq+n/9PMecDTMAAA==", - "debug_symbols": "pZbdbqMwEEbfhWsu7LHHP32VKqrSlFaREIlostKqyruvh5mPdldKVbE3PYfQOZAEBz66l+H5+vZ0nF5P793D40f3PB/H8fj2NJ4O+8vxNLVXPzonf2LoHnzfxahgRVJkRVHUBewUXkEKrbBWWCusFdYKa4W1klqFGryCFK0SG6KCFUmRFUVRF2Sn8ApSaCVrJWslayVrJbcKN9QFxSm8ghRBERWsSIqs0EppldR31Sm8ghRBERWsSIqsKAqteOeM3thCWRiMLVWEbEzGbCzGqvTO6I1kDEbr+darwmTMxmKsSnJGbyRjMEaj9ch6ZD2Sy8CJVJMgF5QX8RCCBEiEMCRBMqRAqklEOUqZRAgSIBHCkATJkAKpJssiWARlRplRXhZDEGGIlKNIhhRINZGFoeIhBAmQCGGIlFkkQwqkmshiUfEQggRIhDAE5YxyRjmjXFAuKBeUC8oF5YJyQbmgXFAuKFeUK8oV5YpyRblamWTt+CQiu7JIwityrCJSINVEVoqKhxAkQCKEIQmCskfZoyxrxlcRDyFIgERIK5MTSZAMKfZ2lrUjsqydRTyEIAGCD2FZO4vIOefbre9wP3i6zMMgt4MvN4h22zjv52G6dA/TdRz77td+vC7/9H7eTwsv+7ntbac2TC+NLfh6HAexW/857e6PtlVnw23ZreP88/mcMF940zyt83ePH+7Pk8fx2/e2YT6kYPMhlS3z6/sPOW+Yj6HafIxxy3zE8SP7LfO8Hj+5DfNMuPh40+fPlDEfaMt8XI8ft7z/5KLNJ1e3zMvtTef9lus30Xp82rJ+aD1/cpvmf7J+vpungvn7399382Gdj+H/jv/P+tm1rf3hOP/1yH2T0nzcP4+Dbb5ep8OXvZffZ+zBI/t5Ph2Gl+s8SOnzub39eST2PWXa9V37rX8Mro9uJ49+sqst7HZKsulls/3OUsy7m5zYHw==", + "bytecode": "H4sIAAAAAAAA/9VazW7jRgymHEmxJMtW2vsCvbU9yX9xjjr0RbRO8xx6vQJF7731DXppgQX2sJvJDhXqE614I3GdJWCMNKTIjz9D26MJ6AtFj5/AX4d+DMQ4oy4xr/JjOY7WE+oqrTAGE2KUseV4uxhf+fuIxCQ6RC89JGRv/EUC+gL/XDVRcBKwO6X+u3JXJ9SlifFvE+oW+sT6N4nQaaC/vPZ6fmue9aMvXAcBmeVpZ+znJqd+QwrAt9CoRgKwR+Angf2UTGtqHYA9xoPx4eucZZpnPAHwwqbvB/OipuuHo/nj552Qw9qaCblfxPWv1MUwU3wIFB8s6+uxfm+Na2in5QDzEzZd25IncxCKeL6D+FjUnIyP0fre/UinexfXw3VDLV1BPGWMOGZzKQ+8RPDCpmsn9fehsCN1MY4I5H/29ys/xuIZfr5Q7Mdgv4NbmZMxQl1XyhzLx4+fn/x15j+uhv7lZ6gbd0eVH8uRxD1C9izs35GYn7C29uf27zafZNoL2v4dAR6Mj+wPjhcrWAuFJ32TPGknVux8j7py6tdscGIk6uddsyNlOB/G3w+boZhovzFW1F8zMWBF/6tpsK4T6udjQv1tr7gWscBeMbfJw9m9gu2ngNWqV8wBD8YHe0WiYC0UXgDXiWInUexY64oNdGHtOKr8WI6jNSmYcH2yXc5RCrISYybmL/Ffhu2ngNWqvjPAg/HB+l4oWAuFJ+MvedLOQrGj6UoAA+aayDx/+9fmL7HBM5g/bX1+bf6wp4zJX/zGdWHtOKr8WI6jDSmYcH1k9jgObCs/A0eu4MB1thTzl+iTbD8l03XfrrMl4MH44DpbKVgLhYdrbqXYWSl2NF05YMCac5SA7KX6JNtPlThY5C9X4qr1CY7dUsFaKDzsk1qdLBU71rpiA1xYO44qP5bjaEsKJuxPuT2OPdtanYEjJ72nSoyFmL9En2T7KZmu+3adFYAH44Pr7EbBWig8rMcbxc6NYkfTtQIMWHOOEur310v0Sbafkun37nro+0frExy7QsFaKDzsR1qdFIqd71EX7tM4qvxYjqMd2xrqTzHw0Meh/8baO23jvZ+zexnu/RjtWw/u/cj4DK0F3PvR1ollzU0ck3ZvUMbkG/XK+9f2SqN6HeyVMj6v7ZVyT3NsfaQT6pqyVyYT6sreqI+LCXXlb9TH5YS6IgMfjd9xtu9kjN5DtOd7jPYRt3i+R8bOjX9ATpgXUf/si4xDBPJ/CZ1/+uuV0Ct9c5QpNmcnbGIvkfvX+H5TqzNtD1Xr4yyv7TnKHpSCf9L2AniyP5/aj5w45yX6Eb7gx4z6/UzGIIK5v/3oYvg/dWOn5UZ736C9e07hOYkHz2agbpSX73gXwg/tufCEn/8IPz9Q109tv0l7x87y2v5Mrvi+UnxZAu/U+/on3c0zT9abo7DpPlf5+XIc7V18PgocmPOo6cZCi51WI+fGbmhvC7+jtXMA0h6e/5C/Q1Pw8aWeahn3w93zoWfOeUTd8xoE9iOQ/8/fy7XAYzgC58OhXj9s64d6X9/f7471D6CfROwyA/v1YXt33OyOh/f7bb29/eb2j/vb98fdvi5/X7vbzUv2tXNtch074rNx8uyclGd9Ech/YlmnyyvDs4/SnpMrBuSCE+OTDmUubLpz2pk6edaQ5dv3B00fI/MywZM9xtHC38t4SV2MIwL53CvgnMjzgfx8odifg/0ObmUOv88yRT5T5F1+Yv8Q1630fer/wU82Qb+cQ2xcO66uPwP86RPfDTMAAA==", + "debug_symbols": "pZbdTuNADEbfJde5mPGM54dXQRUqJaBKUVqFdqUV6rvvOPYX2JWKUPaGc0rwSQox6Uf3Mjxf356O0+vpvXt4/Oie5+M4Ht+extNhfzmepvbdj87Jlxi6B993MSpYkRRZURR1ATuFV5BCK6wV1gprhbXCWmGtpFahBq8gRavEhqhgRVJkRVHUBdkpvIIUWslayVrJWslaya3CDXVBcQqvIEVQRAUrkiIrtFJaJfVddQqvIEVQRAUrkiIrikIr3jmjN7ZQFgZjSxUhG5MxG4uxKr0zeiMZg9F6vvWqMBmzsRirkpzRG8kYjNFoPbIeWY/kNnAi1STIDeVFPIQgARIhDEmQDCmQahJRjlImEYIESIQwJEEypECqybIEi6DMKDPKyzIEEYZIOYpkSIFUE1kMFQ8hSIBECEOkzCIZUiDVRJZFxUMIEiARwhCUM8oZ5YxyQbmgXFAuKBeUC8oF5YJyQbmgXFGuKFeUK8oV5Wplkt3xSUQOZRE5VxHJkAKpJrIpKh5CkACJEIag7FH2KMvK+HbPk+yMiocQJEBamZwIQxIkQ4q9nWV3RJbdWcRDCBIg+CUsu7OIXHO+3foOz4OnyzwM8jj48oBoj43zfh6mS/cwXcex737tx+vyQ+/n/bTwsp/b0XZpw/TS2IKvx3EQu/Wf0+7+aNs6G25rt47zz+dzwnzhTfO0zt89f7g/Tx7nb3+3DfMhBZsPqWyZX99/yHnDfAzV5mOMW+Yjzh/Zb5nn9fzJbZhnws3Hm37/TBnzgbbMx/X8ccv7Ty7afHJ1y7w83nTeb7l/E63npy37Q+v1k9s0/5P9+W6eCubv//2+mw/rfAz/d/5/9mfXXu0Px/mvj9w3Kc3H/fM42MvX63T4cvTy+4wj+Mh+nk+H4eU6D1L6/NzevjwS+54y7fqu/a9/DK6Pbicf/eRQW+x2SfLSy8v2f5Zi3t3kwv4A", "file_map": { "50": { "source": "struct bar {\n enable: [bool; 4],\n data: [Field; 2],\n pad: u32,\n}\n\nfn main(enable: [Field; 2]) -> pub [Field; 4] {\n let mut result = [0; 4];\n let a: [_; 4] = foo(enable[1]);\n for i in 0..4 {\n result[i] = a[i].data[i % 2];\n }\n result\n}\n\nfn foo(x: Field) -> [bar; 4] {\n [\n bar { enable: [true, true, false, false], data: [x, x + 1], pad: 0 },\n bar { enable: [true, false, false, false], data: [x + 2, x + 7], pad: 0 },\n bar { enable: [true, true, false, true], data: [x + 3, x + 5], pad: 0 },\n bar { enable: [false, false, false, false], data: [x + 4, x - 1], pad: 0 },\n ]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_9223372036854775807.snap b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_9223372036854775807.snap index dadb7167f41..e2e79ef0a29 100644 --- a/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_9223372036854775807.snap +++ b/tooling/nargo_cli/tests/snapshots/execution_success/wildcard_type/execute__tests__force_brillig_true_inliner_9223372036854775807.snap @@ -44,8 +44,8 @@ expression: artifact } } }, - "bytecode": "H4sIAAAAAAAA/9VazW7jRgymHEmxpMhW2vsCvbU9yX9xjj70RbRO8xx6vQJFH6C3PkEvLVCghzaTHSrUJ1rxRsN1lkAw8pAiP/4MFY0mok+UPP1F/jr2YyTGGfWJeQc/1tNoFVBXbYUxCohRxpbj7WJ85X8nJCbRIXrtJiF76y8y0Bf5+w6BgpOB3ZD67+ttk1GfAuPfZNQv9MD615nQaaC/vvZ6fmpf9KMvXAcRmeVpa+znuqRhQ4rAt9ioRiKwR+Angf2cTGtqFYE9xoPx4euSZdoXPBHw4nboB/OStu+Ho/nT3wchh7U1E3I/iOsfqY9hpvgQKT5Y1tdT/d4Z19BWywHmJ277tiVP5iAW8fwA8bGoORkfo/W9/ZZO9y6uh+uWOrqCeMoYcczmUh54meDFbd9O7n/Hwo7UxTgSkP/e/176MRX38P2VYj8F+z3cypyMEeq6UuZYPn36+85fF/7P1dCffA/14+7o4Md6InGPkD0L+3ci5gPW1u7c/t3lk0x7Qde/E8CD8ZH9wfFSBWul8KRvkiftpIqdr1FXScOajU6MRMO8a3akDOfD+PmwHouJ9j/GkoZrJgWs6P8hDNZVRsN8BNTf9YprEQvsFXObPJzdK9h+DlitesUc8GB8sFdkCtZK4UVwnSl2MsWOta7UQBfWjqODH+tptCIFE65Ptss5ykFWYizE/CXeZdh+Dlit6rsAPBgfrO8bBWul8GT8JU/auVHsaLoywIC5JjLP3+6t+cts8IzmT1ufn5s/7ClT8pe+c11YO44Ofqyn0ZoUTLg+Cnsce7ZVnoGjVHDgOluI+Uv0Sbafk+m679bZAvBgfHCdLRWslcLDNbdU7CwVO5quEjBgzTnKQPZSfZLt50ocLPJXKnHV+gTHbqFgrRQe9kmtThaKHWtdqQEurB1HBz/W02hDCibsT6U9jh3bWp6BoyS9p0qMlZi/RJ9k+zmZrvtunVWAB+OD6+xWwVopPKzHW8XOrWJH07UEDFhzjjIa9tdL9Em2n5Ppc3c19vzR+gTHrlKwVgoP+5FWJ5Vi52vUhfs0jg5+rKfRlm2N9acUeOjj2Lux9k3beO/n7F6Gez9G+9ajez8yPmNrAfd+tHViWXOBY9LtDcqYfKFe+fDWXmlUr6O9Usbnrb1S7mlOrY88oK6QvTILqKt4pz7eBNRVvlMfFwF1JQY+Gn/j7L7JGH2H6M73GO0jbvB8j4ydG3+BnDAvoeHZFxmHBOR/Ezp/9ddLoVf65qgQ/LFvmdzfZifwYJ8Z2+/WalDbX9R6PMuP7TNI+0vFdgk82ddYLlN0hnzOox/xK37MaNifZAwSmPvdjy6Gf1M/dlputD22SoldAfdJPHhuA3WjvPz+250DOnFffMLPP4Sf/1DfT20vRvvmwvJj72RaTUlf5Lvu8/3tC0/2SEex4IV813Ux+FfgQH+Ttu/vud+kxuIpczS2t4XPVe0cgLSH5z9kP8rBx9d6qmXc9/cvh5455wn1z2sQ2E9A/i//W64zHuMJOB/3zepx0zw2u+bhYXtsvgH9JGJXGNhv9pv743p73H/cbZrN3Re3f9zdfTxud03988r9XL9mXzvXJtexIz4bJ8/OSXnWl4D8fyzrdHllePZR2nNy1YhcdGJ81qHMxW1/TjtTJ88asnz3/aAdYmReIXiyxzi68b9lvKQuxpGAfOkVcE7k+UC+v1Lsz8F+D7cyh8+sQpEvFHmXn9TfxHUrfQ/9HvxsE/TLOcTGtePq+n/9PMecDTMAAA==", - "debug_symbols": "pZbdbqMwEEbfhWsu7LHHP32VKqrSlFaREIlostKqyruvh5mPdldKVbE3PYfQOZAEBz66l+H5+vZ0nF5P793D40f3PB/H8fj2NJ4O+8vxNLVXPzonf2LoHnzfxahgRVJkRVHUBewUXkEKrbBWWCusFdYKa4W1klqFGryCFK0SG6KCFUmRFUVRF2Sn8ApSaCVrJWslayVrJbcKN9QFxSm8ghRBERWsSIqs0EppldR31Sm8ghRBERWsSIqsKAqteOeM3thCWRiMLVWEbEzGbCzGqvTO6I1kDEbr+darwmTMxmKsSnJGbyRjMEaj9ch6ZD2Sy8CJVJMgF5QX8RCCBEiEMCRBMqRAqklEOUqZRAgSIBHCkATJkAKpJssiWARlRplRXhZDEGGIlKNIhhRINZGFoeIhBAmQCGGIlFkkQwqkmshiUfEQggRIhDAE5YxyRjmjXFAuKBeUC8oF5YJyQbmgXFAuKFeUK8oV5YpyRblamWTt+CQiu7JIwityrCJSINVEVoqKhxAkQCKEIQmCskfZoyxrxlcRDyFIgERIK5MTSZAMKfZ2lrUjsqydRTyEIAGCD2FZO4vIOefbre9wP3i6zMMgt4MvN4h22zjv52G6dA/TdRz77td+vC7/9H7eTwsv+7ntbac2TC+NLfh6HAexW/857e6PtlVnw23ZreP88/mcMF940zyt83ePH+7Pk8fx2/e2YT6kYPMhlS3z6/sPOW+Yj6HafIxxy3zE8SP7LfO8Hj+5DfNMuPh40+fPlDEfaMt8XI8ft7z/5KLNJ1e3zMvtTef9lus30Xp82rJ+aD1/cpvmf7J+vpungvn7399382Gdj+H/jv/P+tm1rf3hOP/1yH2T0nzcP4+Dbb5ep8OXvZffZ+zBI/t5Ph2Gl+s8SOnzub39eST2PWXa9V37rX8Mro9uJ49+sqst7HZKsulls/3OUsy7m5zYHw==", + "bytecode": "H4sIAAAAAAAA/9VazW7jRgymHEmxJMtW2vsCvbU9yX9xjjr0RbRO8xx6vQJF7731DXppgQX2sJvJDhXqE614I3GdJWCMNKTIjz9D26MJ6AtFj5/AX4d+DMQ4oy4xr/JjOY7WE+oqrTAGE2KUseV4uxhf+fuIxCQ6RC89JGRv/EUC+gL/XDVRcBKwO6X+u3JXJ9SlifFvE+oW+sT6N4nQaaC/vPZ6fmue9aMvXAcBmeVpZ+znJqd+QwrAt9CoRgKwR+Angf2UTGtqHYA9xoPx4eucZZpnPAHwwqbvB/OipuuHo/nj552Qw9qaCblfxPWv1MUwU3wIFB8s6+uxfm+Na2in5QDzEzZd25IncxCKeL6D+FjUnIyP0fre/UinexfXw3VDLV1BPGWMOGZzKQ+8RPDCpmsn9fehsCN1MY4I5H/29ys/xuIZfr5Q7Mdgv4NbmZMxQl1XyhzLx4+fn/x15j+uhv7lZ6gbd0eVH8uRxD1C9izs35GYn7C29uf27zafZNoL2v4dAR6Mj+wPjhcrWAuFJ32TPGknVux8j7py6tdscGIk6uddsyNlOB/G3w+boZhovzFW1F8zMWBF/6tpsK4T6udjQv1tr7gWscBeMbfJw9m9gu2ngNWqV8wBD8YHe0WiYC0UXgDXiWInUexY64oNdGHtOKr8WI6jNSmYcH2yXc5RCrISYybmL/Ffhu2ngNWqvjPAg/HB+l4oWAuFJ+MvedLOQrGj6UoAA+aayDx/+9fmL7HBM5g/bX1+bf6wp4zJX/zGdWHtOKr8WI6jDSmYcH1k9jgObCs/A0eu4MB1thTzl+iTbD8l03XfrrMl4MH44DpbKVgLhYdrbqXYWSl2NF05YMCac5SA7KX6JNtPlThY5C9X4qr1CY7dUsFaKDzsk1qdLBU71rpiA1xYO44qP5bjaEsKJuxPuT2OPdtanYEjJ72nSoyFmL9En2T7KZmu+3adFYAH44Pr7EbBWig8rMcbxc6NYkfTtQIMWHOOEur310v0Sbafkun37nro+0frExy7QsFaKDzsR1qdFIqd71EX7tM4qvxYjqMd2xrqTzHw0Meh/8baO23jvZ+zexnu/RjtWw/u/cj4DK0F3PvR1ollzU0ck3ZvUMbkG/XK+9f2SqN6HeyVMj6v7ZVyT3NsfaQT6pqyVyYT6sreqI+LCXXlb9TH5YS6IgMfjd9xtu9kjN5DtOd7jPYRt3i+R8bOjX9ATpgXUf/si4xDBPJ/CZ1/+uuV0Ct9c5QpNmcnbGIvkfvX+H5TqzNtD1Xr4yyv7TnKHpSCf9L2AniyP5/aj5w45yX6Eb7gx4z6/UzGIIK5v/3oYvg/dWOn5UZ736C9e07hOYkHz2agbpSX73gXwg/tufCEn/8IPz9Q109tv0l7x87y2v5Mrvi+UnxZAu/U+/on3c0zT9abo7DpPlf5+XIc7V18PgocmPOo6cZCi51WI+fGbmhvC7+jtXMA0h6e/5C/Q1Pw8aWeahn3w93zoWfOeUTd8xoE9iOQ/8/fy7XAYzgC58OhXj9s64d6X9/f7471D6CfROwyA/v1YXt33OyOh/f7bb29/eb2j/vb98fdvi5/X7vbzUv2tXNtch074rNx8uyclGd9Ech/YlmnyyvDs4/SnpMrBuSCE+OTDmUubLpz2pk6edaQ5dv3B00fI/MywZM9xtHC38t4SV2MIwL53CvgnMjzgfx8odifg/0ObmUOv88yRT5T5F1+Yv8Q1630fer/wU82Qb+cQ2xcO66uPwP86RPfDTMAAA==", + "debug_symbols": "pZbdTuNADEbfJde5mPGM54dXQRUqJaBKUVqFdqUV6rvvOPYX2JWKUPaGc0rwSQox6Uf3Mjxf356O0+vpvXt4/Oie5+M4Ht+extNhfzmepvbdj87Jlxi6B993MSpYkRRZURR1ATuFV5BCK6wV1gprhbXCWmGtpFahBq8gRavEhqhgRVJkRVHUBdkpvIIUWslayVrJWslaya3CDXVBcQqvIEVQRAUrkiIrtFJaJfVddQqvIEVQRAUrkiIrikIr3jmjN7ZQFgZjSxUhG5MxG4uxKr0zeiMZg9F6vvWqMBmzsRirkpzRG8kYjNFoPbIeWY/kNnAi1STIDeVFPIQgARIhDEmQDCmQahJRjlImEYIESIQwJEEypECqybIEi6DMKDPKyzIEEYZIOYpkSIFUE1kMFQ8hSIBECEOkzCIZUiDVRJZFxUMIEiARwhCUM8oZ5YxyQbmgXFAuKBeUC8oF5YJyQbmgXFGuKFeUK8oV5Wplkt3xSUQOZRE5VxHJkAKpJrIpKh5CkACJEIag7FH2KMvK+HbPk+yMiocQJEBamZwIQxIkQ4q9nWV3RJbdWcRDCBIg+CUsu7OIXHO+3foOz4OnyzwM8jj48oBoj43zfh6mS/cwXcex737tx+vyQ+/n/bTwsp/b0XZpw/TS2IKvx3EQu/Wf0+7+aNs6G25rt47zz+dzwnzhTfO0zt89f7g/Tx7nb3+3DfMhBZsPqWyZX99/yHnDfAzV5mOMW+Yjzh/Zb5nn9fzJbZhnws3Hm37/TBnzgbbMx/X8ccv7Ty7afHJ1y7w83nTeb7l/E63npy37Q+v1k9s0/5P9+W6eCubv//2+mw/rfAz/d/5/9mfXXu0Px/mvj9w3Kc3H/fM42MvX63T4cvTy+4wj+Mh+nk+H4eU6D1L6/NzevjwS+54y7fqu/a9/DK6Pbicf/eRQW+x2SfLSy8v2f5Zi3t3kwv4A", "file_map": { "50": { "source": "struct bar {\n enable: [bool; 4],\n data: [Field; 2],\n pad: u32,\n}\n\nfn main(enable: [Field; 2]) -> pub [Field; 4] {\n let mut result = [0; 4];\n let a: [_; 4] = foo(enable[1]);\n for i in 0..4 {\n result[i] = a[i].data[i % 2];\n }\n result\n}\n\nfn foo(x: Field) -> [bar; 4] {\n [\n bar { enable: [true, true, false, false], data: [x, x + 1], pad: 0 },\n bar { enable: [true, false, false, false], data: [x + 2, x + 7], pad: 0 },\n bar { enable: [true, true, false, true], data: [x + 3, x + 5], pad: 0 },\n bar { enable: [false, false, false, false], data: [x + 4, x - 1], pad: 0 },\n ]\n}\n", diff --git a/tooling/nargo_cli/tests/snapshots/expand/execution_success/assign_evaluation_order/execute__tests__expanded.snap b/tooling/nargo_cli/tests/snapshots/expand/execution_success/assign_evaluation_order/execute__tests__expanded.snap new file mode 100644 index 00000000000..5f011fe38f8 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/expand/execution_success/assign_evaluation_order/execute__tests__expanded.snap @@ -0,0 +1,30 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: expanded_code +--- +fn main() { + let result1: i32 = bug_8262((1, true, false)); + assert(result1 == 2); + let result2: [Field; 3] = bug_8337(); + assert(result2 == [10, 40, 10]); +} + +fn bug_8262(mut a: (i32, bool, bool)) -> i32 { + a.1 = if a.1 { + a = (2, a.2, a.1); + true + } else { !a.2 }; + a.0 +} + +fn bug_8337() -> [Field; 3] { + let mut a: [Field; 3] = [10, 20, 30]; + a[1] = { + a = { + a[2] = a[0]; + [a[0], 40, a[2]] + }; + a[1] + }; + a +}