From b71631a1d519ee5eff9b9d1810af0716ce52c0d9 Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Fri, 25 Oct 2024 16:04:21 +0800 Subject: [PATCH 1/8] fix: raise an error when attempting to modify immutable arrays such as `algopy.arc4.Address` BREAKING CHANGE: modifying an `algopy.arc4.Address` will now raise an error --- examples/sizes.txt | 4 +- src/puya/awst/validation/immutable.py | 49 +++++++++++++++++++ src/puya/awst/validation/main.py | 2 + src/puyapy/awst_build/eb/_base.py | 9 +--- src/puyapy/awst_build/eb/arc4/string.py | 15 +++--- test_cases/arc4_types/address.py | 5 +- .../out/Arc4AddressContract.approval.mir | 38 +++++--------- .../out/Arc4AddressContract.approval.teal | 15 +----- .../out/Arc4AddressContract.clear.mir | 2 +- .../out/Arc4AddressContract.clear.teal | 2 +- .../out/Arc4AddressContract.destructured.ir | 5 +- .../arc4_types/out/Arc4AddressContract.ssa.ir | 8 ++- .../out/Arc4AddressContract.ssa.opt_pass_1.ir | 5 +- .../out/Arc4AddressContract.ssa.opt_pass_2.ir | 5 +- .../out/Arc4AddressContract.ssa.opt_pass_3.ir | 5 +- test_cases/arc4_types/out/module.awst | 12 ++--- .../out_O2/Arc4AddressContract.approval.teal | 7 --- .../Arc4AddressContract.destructured.ir | 5 +- .../Arc4AddressContract.approval.teal | 15 ++---- .../Arc4AddressContract.clear.teal | 2 +- .../Arc4AddressContract.destructured.ir | 6 +-- test_cases/arc4_types/puya.log | 15 ++---- tests/test_expected_output/arc4.test | 12 +++++ 23 files changed, 121 insertions(+), 122 deletions(-) create mode 100644 src/puya/awst/validation/immutable.py diff --git a/examples/sizes.txt b/examples/sizes.txt index 2fcbd621de..ed96652bee 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -6,7 +6,7 @@ application/Reference 177 167 - | 92 83 - arc4_dynamic_arrays/DynamicArray 2695 1931 - | 1733 1138 - arc4_numeric_comparisons/UIntNOrdering 1100 908 - | 786 597 - - arc4_types/Arc4Address 85 62 - | 37 18 - + arc4_types/Arc4Address 79 18 - | 34 11 - arc4_types/Arc4Arrays 623 376 - | 368 182 - arc4_types/Arc4BoolEval 751 14 - | 167 8 - arc4_types/Arc4BoolType 381 69 - | 307 46 - @@ -130,4 +130,4 @@ unssa/UnSSA 432 368 - | 241 204 - voting/VotingRoundApp 1593 1483 - | 734 649 - with_reentrancy/WithReentrancy 255 242 - | 132 122 - - Total 69200 53576 53517 | 32843 21764 21720 \ No newline at end of file + Total 69194 53532 53473 | 32840 21757 21713 \ No newline at end of file diff --git a/src/puya/awst/validation/immutable.py b/src/puya/awst/validation/immutable.py new file mode 100644 index 0000000000..7da20ad4ea --- /dev/null +++ b/src/puya/awst/validation/immutable.py @@ -0,0 +1,49 @@ +from puya import log +from puya.awst import nodes as awst_nodes +from puya.awst.awst_traverser import AWSTTraverser + +logger = log.get_logger(__name__) + + +class ImmutableValidator(AWSTTraverser): + @classmethod + def validate(cls, module: awst_nodes.AWST) -> None: + validator = cls() + for module_statement in module: + module_statement.accept(validator) + + def visit_assignment_expression(self, expr: awst_nodes.AssignmentExpression) -> None: + super().visit_assignment_expression(expr) + _validate_lvalue(expr.target) + + def visit_assignment_statement(self, statement: awst_nodes.AssignmentStatement) -> None: + super().visit_assignment_statement(statement) + _validate_lvalue(statement.target) + + def visit_array_pop(self, expr: awst_nodes.ArrayPop) -> None: + super().visit_array_pop(expr) + if expr.base.wtype.immutable: + logger.error( + "cannot modify - object is immutable", + location=expr.source_location, + ) + + def visit_array_extend(self, expr: awst_nodes.ArrayExtend) -> None: + super().visit_array_extend(expr) + if expr.base.wtype.immutable: + logger.error( + "cannot modify - object is immutable", + location=expr.source_location, + ) + + +def _validate_lvalue(lvalue: awst_nodes.Expression) -> None: + if isinstance(lvalue, awst_nodes.FieldExpression | awst_nodes.IndexExpression): + if lvalue.base.wtype.immutable: + logger.error( + "expression is not valid as an assignment target - object is immutable", + location=lvalue.source_location, + ) + elif isinstance(lvalue, awst_nodes.TupleExpression): + for item in lvalue.items: + _validate_lvalue(item) diff --git a/src/puya/awst/validation/main.py b/src/puya/awst/validation/main.py index 98df0bedcb..2307e00541 100644 --- a/src/puya/awst/validation/main.py +++ b/src/puya/awst/validation/main.py @@ -1,6 +1,7 @@ from puya.awst import nodes as awst_nodes from puya.awst.validation.arc4_copy import ARC4CopyValidator from puya.awst.validation.base_invoker import BaseInvokerValidator +from puya.awst.validation.immutable import ImmutableValidator from puya.awst.validation.inner_transactions import ( InnerTransactionsValidator, InnerTransactionUsedInALoopValidator, @@ -20,3 +21,4 @@ def validate_awst(module: awst_nodes.AWST) -> None: BaseInvokerValidator.validate(module) StorageTypesValidator.validate(module) LabelsValidator.validate(module) + ImmutableValidator.validate(module) diff --git a/src/puyapy/awst_build/eb/_base.py b/src/puyapy/awst_build/eb/_base.py index b8fed50ba6..102747432f 100644 --- a/src/puyapy/awst_build/eb/_base.py +++ b/src/puyapy/awst_build/eb/_base.py @@ -7,7 +7,6 @@ BinaryBooleanOperator, CompileTimeConstantExpression, Expression, - FieldExpression, Lvalue, SingleEvaluation, Statement, @@ -220,13 +219,7 @@ def _validate_lvalue(typ: pytypes.PyType, resolved: Expression) -> Lvalue: raise CodeError( "expression is not valid as an assignment target", resolved.source_location ) - if isinstance(resolved, FieldExpression): - if resolved.base.wtype.immutable: - raise CodeError( - "expression is not valid as an assignment target - object is immutable", - resolved.source_location, - ) - elif isinstance(resolved, TupleExpression): + if isinstance(resolved, TupleExpression): assert isinstance(typ, pytypes.TupleLikeType) for item_typ, item in zip(typ.items, resolved.items, strict=True): _validate_lvalue(item_typ, item) diff --git a/src/puyapy/awst_build/eb/arc4/string.py b/src/puyapy/awst_build/eb/arc4/string.py index cc4af3f4b6..53cec51ab0 100644 --- a/src/puyapy/awst_build/eb/arc4/string.py +++ b/src/puyapy/awst_build/eb/arc4/string.py @@ -8,9 +8,8 @@ ARC4Decode, ARC4Encode, ArrayConcat, - ArrayExtend, + AssignmentStatement, Expression, - ExpressionStatement, Statement, StringConstant, ) @@ -104,13 +103,15 @@ def augmented_assignment( else: value = expect.argument_of_type_else_dummy(rhs, self.pytype).resolve() - return ExpressionStatement( - ArrayExtend( - base=self.resolve(), - other=value, + return AssignmentStatement( + target=self.resolve_lvalue(), + value=ArrayConcat( + left=self.resolve(), + right=value, wtype=wtypes.arc4_string_alias, source_location=location, - ) + ), + source_location=location, ) @typing.override diff --git a/test_cases/arc4_types/address.py b/test_cases/arc4_types/address.py index 21e7ed7f3d..5d2091b22e 100644 --- a/test_cases/arc4_types/address.py +++ b/test_cases/arc4_types/address.py @@ -16,8 +16,9 @@ def approval_program(self) -> bool: some_address = arc4.Address(SOME_ADDRESS) assert some_address == SOME_ADDRESS - some_address[0] = arc4.Byte(123) - assert some_address != SOME_ADDRESS + address_copy = some_address + + assert some_address == address_copy return True def clear_state_program(self) -> bool: diff --git a/test_cases/arc4_types/out/Arc4AddressContract.approval.mir b/test_cases/arc4_types/out/Arc4AddressContract.approval.mir index 0f3746d3b6..f933628406 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.approval.mir +++ b/test_cases/arc4_types/out/Arc4AddressContract.approval.mir @@ -1,38 +1,26 @@ -// Op Stack (out) +// Op Stack (out) // test_cases.arc4_types.address.Arc4AddressContract.approval_program() -> uint64: main_block@0: // arc4_types/address.py:8 // address = arc4.Address(Txn.sender) - txn Sender address#0 + txn Sender address#0 // arc4_types/address.py:9 // assert address == Txn.sender - txn Sender address#0,tmp%0#0 - l-load-copy address#0 1 address#0,tmp%0#0,address#0 (copy) - l-load tmp%0#0 1 address#0,address#0 (copy),tmp%0#0 - == address#0,tmp%1#0 - assert address#0 + txn Sender address#0,tmp%0#0 + l-load-copy address#0 1 address#0,tmp%0#0,address#0 (copy) + l-load tmp%0#0 1 address#0,address#0 (copy),tmp%0#0 + == address#0,tmp%1#0 + assert address#0 // arc4_types/address.py:11 // assert address.native == Txn.sender - txn Sender address#0,tmp%3#0 - l-load address#0 1 tmp%3#0,address#0 - l-load tmp%3#0 1 address#0,tmp%3#0 - == tmp%4#0 + txn Sender address#0,tmp%3#0 + l-load address#0 1 tmp%3#0,address#0 + l-load tmp%3#0 1 address#0,tmp%3#0 + == tmp%4#0 assert - // arc4_types/address.py:16 - // some_address = arc4.Address(SOME_ADDRESS) - addr "VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA" Address(VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - // arc4_types/address.py:19 - // some_address[0] = arc4.Byte(123) - byte 0x7b Address(VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA),0x7b - replace2 0 some_address#1 - // arc4_types/address.py:20 - // assert some_address != SOME_ADDRESS - addr "VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA" some_address#1,Address(VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - != tmp%10#0 - assert - // arc4_types/address.py:21 + // arc4_types/address.py:22 // return True - int 1 1 + int 1 1 return diff --git a/test_cases/arc4_types/out/Arc4AddressContract.approval.teal b/test_cases/arc4_types/out/Arc4AddressContract.approval.teal index 959e802b42..451ea1b8d4 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.approval.teal +++ b/test_cases/arc4_types/out/Arc4AddressContract.approval.teal @@ -1,7 +1,6 @@ #pragma version 10 test_cases.arc4_types.address.Arc4AddressContract.approval_program: - bytecblock base32(VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJPQ) // arc4_types/address.py:8 // address = arc4.Address(Txn.sender) txn Sender @@ -15,19 +14,7 @@ test_cases.arc4_types.address.Arc4AddressContract.approval_program: txn Sender == assert - // arc4_types/address.py:16 - // some_address = arc4.Address(SOME_ADDRESS) - bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - // arc4_types/address.py:19 - // some_address[0] = arc4.Byte(123) - pushbytes 0x7b - replace2 0 - // arc4_types/address.py:20 - // assert some_address != SOME_ADDRESS - bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - != - assert - // arc4_types/address.py:21 + // arc4_types/address.py:22 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out/Arc4AddressContract.clear.mir b/test_cases/arc4_types/out/Arc4AddressContract.clear.mir index a617e4767c..00b34a80c0 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.clear.mir +++ b/test_cases/arc4_types/out/Arc4AddressContract.clear.mir @@ -1,7 +1,7 @@ // Op Stack (out) // test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> uint64: main_block@0: - // arc4_types/address.py:24 + // arc4_types/address.py:25 // return True int 1 1 return diff --git a/test_cases/arc4_types/out/Arc4AddressContract.clear.teal b/test_cases/arc4_types/out/Arc4AddressContract.clear.teal index 44682ccdec..bceb68f932 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.clear.teal +++ b/test_cases/arc4_types/out/Arc4AddressContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.address.Arc4AddressContract.clear_state_program: - // arc4_types/address.py:24 + // arc4_types/address.py:25 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out/Arc4AddressContract.destructured.ir b/test_cases/arc4_types/out/Arc4AddressContract.destructured.ir index 69f5037197..449a01096d 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.destructured.ir +++ b/test_cases/arc4_types/out/Arc4AddressContract.destructured.ir @@ -9,12 +9,9 @@ contract test_cases.arc4_types.address.Arc4AddressContract: let tmp%3#0: bytes = (txn Sender) let tmp%4#0: bool = (== address#0 tmp%3#0) (assert tmp%4#0) - let some_address#1: bytes = ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4AddressContract.ssa.ir b/test_cases/arc4_types/out/Arc4AddressContract.ssa.ir index 6cfafe18dd..8ad95b7e51 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.ssa.ir +++ b/test_cases/arc4_types/out/Arc4AddressContract.ssa.ir @@ -22,14 +22,12 @@ contract test_cases.arc4_types.address.Arc4AddressContract: let some_address#0: bytes = addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA let tmp%9#0: bool = (== some_address#0 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) (assert tmp%9#0) - let assigned_value%0#0: bytes = 0x7b - let updated_target%0#0: bytes = (replace3 some_address#0 0u assigned_value%0#0) - let some_address#1: bytes = updated_target%0#0 - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) + let address_copy#0: bytes = some_address#0 + let tmp%10#0: bool = (== some_address#0 address_copy#0) (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_1.ir b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_1.ir index de8bb9806e..379a195d88 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_1.ir +++ b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_1.ir @@ -18,12 +18,11 @@ contract test_cases.arc4_types.address.Arc4AddressContract: (assert tmp%8#0) let tmp%9#0: bool = 1u (assert tmp%9#0) - let some_address#1: bytes = ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) + let tmp%10#0: bool = 1u (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_2.ir b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_2.ir index 64b03c8f30..3ca51517de 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_2.ir +++ b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_2.ir @@ -11,12 +11,9 @@ contract test_cases.arc4_types.address.Arc4AddressContract: (assert tmp%4#0) let tmp%6#0: bool = 1u (assert tmp%6#0) // Address length is 32 bytes - let some_address#1: bytes = ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_3.ir b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_3.ir index 69f5037197..449a01096d 100644 --- a/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_3.ir +++ b/test_cases/arc4_types/out/Arc4AddressContract.ssa.opt_pass_3.ir @@ -9,12 +9,9 @@ contract test_cases.arc4_types.address.Arc4AddressContract: let tmp%3#0: bytes = (txn Sender) let tmp%4#0: bool = (== address#0 tmp%3#0) (assert tmp%4#0) - let some_address#1: bytes = ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/module.awst b/test_cases/arc4_types/out/module.awst index d55add56f1..96f7210bb2 100644 --- a/test_cases/arc4_types/out/module.awst +++ b/test_cases/arc4_types/out/module.awst @@ -107,12 +107,12 @@ contract Arc4StringTypesContract world: arc4.dynamic_array = arc4_encode('World!', arc4.dynamic_array) assert(arc4_encode('Hello World!', arc4.dynamic_array) == hello + space + world) thing: arc4.dynamic_array = arc4_encode('hi', arc4.dynamic_array) - thing.extend(thing) + thing: arc4.dynamic_array = thing + thing assert(thing == arc4_encode('hihi', arc4.dynamic_array)) value: arc4.dynamic_array = arc4_encode('a', arc4.dynamic_array) + arc4_encode('b', arc4.dynamic_array) + arc4_encode('cd', arc4.dynamic_array) - value.extend(arc4_encode('e', arc4.dynamic_array)) - value.extend(arc4_encode('f', arc4.dynamic_array)) - value.extend(arc4_encode('g', arc4.dynamic_array)) + value: arc4.dynamic_array = value + arc4_encode('e', arc4.dynamic_array) + value: arc4.dynamic_array = value + arc4_encode('f', arc4.dynamic_array) + value: arc4.dynamic_array = value + arc4_encode('g', arc4.dynamic_array) assert(arc4_encode('abcdefg', arc4.dynamic_array) == value) assert(arc4_decode(arc4_encode('', arc4.dynamic_array), string) == '') assert(arc4_decode(arc4_encode('hello', arc4.dynamic_array), string) == 'hello') @@ -667,8 +667,8 @@ contract Arc4AddressContract assert(reinterpret_cast(zero_address) == reinterpret_cast(global())) some_address: arc4.static_array = Address("VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA") assert(some_address == Address("VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA")) - some_address[0u]: arc4.uint8 = 123_arc4u8 - assert(some_address != Address("VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA")) + address_copy: arc4.static_array = some_address + assert(some_address == address_copy) return true } diff --git a/test_cases/arc4_types/out_O2/Arc4AddressContract.approval.teal b/test_cases/arc4_types/out_O2/Arc4AddressContract.approval.teal index e360de973d..b73ae54d6e 100644 --- a/test_cases/arc4_types/out_O2/Arc4AddressContract.approval.teal +++ b/test_cases/arc4_types/out_O2/Arc4AddressContract.approval.teal @@ -1,7 +1,6 @@ #pragma version 10 test_cases.arc4_types.address.Arc4AddressContract.approval_program: - bytecblock base32(VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJPQ) txn Sender dupn 2 == @@ -9,11 +8,5 @@ test_cases.arc4_types.address.Arc4AddressContract.approval_program: txn Sender == assert - bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - pushbytes 0x7b - replace2 0 - bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - != - assert pushint 1 // 1 return diff --git a/test_cases/arc4_types/out_O2/Arc4AddressContract.destructured.ir b/test_cases/arc4_types/out_O2/Arc4AddressContract.destructured.ir index 69f5037197..449a01096d 100644 --- a/test_cases/arc4_types/out_O2/Arc4AddressContract.destructured.ir +++ b/test_cases/arc4_types/out_O2/Arc4AddressContract.destructured.ir @@ -9,12 +9,9 @@ contract test_cases.arc4_types.address.Arc4AddressContract: let tmp%3#0: bytes = (txn Sender) let tmp%4#0: bool = (== address#0 tmp%3#0) (assert tmp%4#0) - let some_address#1: bytes = ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) - (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.approval.teal b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.approval.teal index e8aa79bb57..fbfaa2cc70 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.approval.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.approval.teal @@ -46,17 +46,12 @@ test_cases.arc4_types.address.Arc4AddressContract.approval_program: // arc4_types/address.py:16 // some_address = arc4.Address(SOME_ADDRESS) bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - // arc4_types/address.py:19 - // some_address[0] = arc4.Byte(123) - pushint 0 // 0 - pushbytes 0x7b - replace3 - // arc4_types/address.py:20 - // assert some_address != SOME_ADDRESS - bytec_0 // addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA - != - assert + dup // arc4_types/address.py:21 + // assert some_address == address_copy + == + assert + // arc4_types/address.py:22 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.clear.teal b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.clear.teal index 44682ccdec..bceb68f932 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.clear.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.address.Arc4AddressContract.clear_state_program: - // arc4_types/address.py:24 + // arc4_types/address.py:25 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.destructured.ir b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.destructured.ir index 3cb5fe1ef4..71d579d225 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.destructured.ir +++ b/test_cases/arc4_types/out_unoptimized/Arc4AddressContract.destructured.ir @@ -21,13 +21,11 @@ contract test_cases.arc4_types.address.Arc4AddressContract: (assert tmp%8#0) let tmp%9#0: bool = (== addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) (assert tmp%9#0) - let updated_target%0#0: bytes = (replace3 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0u 0x7b) - let some_address#1: bytes = updated_target%0#0 - let tmp%10#0: bool = (!= some_address#1 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) + let tmp%10#0: bool = (== addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) (assert tmp%10#0) return 1u program clear-state: subroutine test_cases.arc4_types.address.Arc4AddressContract.clear_state_program() -> bool: - block@0: // L23 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/puya.log b/test_cases/arc4_types/puya.log index 3f8265139b..17157a5a81 100644 --- a/test_cases/arc4_types/puya.log +++ b/test_cases/arc4_types/puya.log @@ -982,8 +982,8 @@ debug: Sealing block@3: // after_if_else_L6 debug: Terminated block@3: // after_if_else_L6 debug: Sealing block@0: // L7 debug: Terminated block@0: // L7 -debug: Sealing block@0: // L23 -debug: Terminated block@0: // L23 +debug: Sealing block@0: // L24 +debug: Terminated block@0: // L24 debug: Sealing block@0: // L6 debug: Terminated block@0: // L6 debug: Sealing block@1: // abi_routing_L6 @@ -18665,19 +18665,17 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Found equivalence set: awst_tmp%0#0, zero_address#0 debug: Replacing {awst_tmp%0#0} with zero_address#0 made 2 modifications -debug: Found equivalence set: updated_target%0#0, some_address#1 -debug: Replacing {updated_target%0#0} with some_address#1 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (== 32u 32u) to 1u debug: Simplified (len zero_address#0) to 32u debug: Simplified (== zero_address#0 tmp%7#0) to 1u debug: Simplified (== addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) to 1u -debug: Simplified (replace3 addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0u 0x7b) to ((replace2 0) addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA 0x7b) +debug: Simplified (== addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA addr VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA) to 1u debug: Optimizer: Remove Unused Variables debug: Removing unused variable zero_address#0 debug: Removing unused variable tmp%7#0 debug: Removing unused variable some_address#0 -debug: Removing unused variable assigned_value%0#0 +debug: Removing unused variable address_copy#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -18712,6 +18710,7 @@ debug: Removing unused variable tmp%2#0 debug: Removing unused variable tmp%5#0 debug: Removing unused variable tmp%8#0 debug: Removing unused variable tmp%9#0 +debug: Removing unused variable tmp%10#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -18805,10 +18804,6 @@ debug: Inserted main_block@0.ops[7]: 'l-store-copy tmp%1#0 0' debug: Replaced main_block@0.ops[9]: 'v-load tmp%1#0' with 'l-load tmp%1#0' debug: Inserted main_block@0.ops[16]: 'l-store-copy tmp%4#0 0' debug: Replaced main_block@0.ops[18]: 'v-load tmp%4#0' with 'l-load tmp%4#0' -debug: Inserted main_block@0.ops[23]: 'l-store-copy some_address#1 0' -debug: Replaced main_block@0.ops[25]: 'v-load some_address#1' with 'l-load some_address#1' -debug: Inserted main_block@0.ops[28]: 'l-store-copy tmp%10#0 0' -debug: Replaced main_block@0.ops[30]: 'v-load tmp%10#0' with 'l-load tmp%10#0' debug: Inserted main_block@0.ops[3]: 'l-store-copy tmp%0#0 0' debug: Replaced main_block@0.ops[6]: 'v-load tmp%0#0' with 'l-load tmp%0#0' debug: Inserted main_block@0.ops[13]: 'l-store-copy tmp%3#0 0' diff --git a/tests/test_expected_output/arc4.test b/tests/test_expected_output/arc4.test index 3ef33845b1..6b1855548f 100644 --- a/tests/test_expected_output/arc4.test +++ b/tests/test_expected_output/arc4.test @@ -541,3 +541,15 @@ def constant_bool() -> None: assert MyStruct(x=arc4.UInt512(0)) ## E: expression is always True assert arc4.Tuple((arc4.Bool(False),)) ## E: expression is always True + +## case: test_address_immutable +from algopy import * + +class MyTest(ARC4Contract): + @arc4.abimethod + def test(self) -> None: + some_address = arc4.Address() + + this_is_ok = some_address[0] + assert this_is_ok == 0 + some_address[0] = arc4.Byte(123) ## E: expression is not valid as an assignment target - object is immutable From b73b3bebbc6e11a6da80eeea58ede7e3bdf44a8a Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Mon, 28 Oct 2024 16:43:10 +0800 Subject: [PATCH 2/8] fix: correctly determine if an `algopy.arc4.Struct` sub-class is immutable or not based on `frozen` class parameter and immutability of fields --- examples/sizes.txt | 4 +- src/puya/awst/wtypes.py | 12 +- src/puyapy/awst_build/pytypes.py | 2 +- .../out/Arc4StructsTypeContract.approval.mir | 52 +- .../out/Arc4StructsTypeContract.approval.teal | 52 +- .../out/Arc4StructsTypeContract.clear.mir | 2 +- .../out/Arc4StructsTypeContract.clear.teal | 2 +- .../Arc4StructsTypeContract.destructured.ir | 18 +- .../out/Arc4StructsTypeContract.ssa.ir | 60 +- .../Arc4StructsTypeContract.ssa.opt_pass_1.ir | 47 +- ...Arc4StructsTypeContract.ssa.opt_pass_10.ir | 86 +++ ...Arc4StructsTypeContract.ssa.opt_pass_11.ir | 85 +++ ...Arc4StructsTypeContract.ssa.opt_pass_12.ir | 84 +++ ...Arc4StructsTypeContract.ssa.opt_pass_13.ir | 82 +++ .../Arc4StructsTypeContract.ssa.opt_pass_2.ir | 33 +- .../Arc4StructsTypeContract.ssa.opt_pass_3.ir | 32 +- .../Arc4StructsTypeContract.ssa.opt_pass_4.ir | 31 +- .../Arc4StructsTypeContract.ssa.opt_pass_5.ir | 29 +- .../Arc4StructsTypeContract.ssa.opt_pass_6.ir | 27 +- .../Arc4StructsTypeContract.ssa.opt_pass_7.ir | 26 +- .../Arc4StructsTypeContract.ssa.opt_pass_8.ir | 89 +++ .../Arc4StructsTypeContract.ssa.opt_pass_9.ir | 87 +++ test_cases/arc4_types/out/module.awst | 7 + test_cases/arc4_types/out/structs.O0.log | 307 +++++---- .../Arc4StructsTypeContract.destructured.ir | 18 +- .../Arc4StructsTypeContract.approval.teal | 153 +++-- .../Arc4StructsTypeContract.clear.teal | 2 +- .../Arc4StructsTypeContract.destructured.ir | 54 +- test_cases/arc4_types/puya.log | 650 ++++++++++++++++-- test_cases/arc4_types/structs.py | 18 + tests/test_expected_output/arc4.test | 36 + 31 files changed, 1807 insertions(+), 380 deletions(-) create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_10.ir create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_11.ir create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_12.ir create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_13.ir create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_8.ir create mode 100644 test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_9.ir diff --git a/examples/sizes.txt b/examples/sizes.txt index ed96652bee..5215481cfb 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -18,7 +18,7 @@ arc4_types/Arc4RefTypes 85 46 - | 32 27 - arc4_types/Arc4StringTypes 455 35 - | 245 13 - arc4_types/Arc4StructsFromAnotherModule 67 12 - | 49 6 - - arc4_types/Arc4StructsType 302 239 - | 204 121 - + arc4_types/Arc4StructsType 391 239 - | 259 121 - arc4_types/Arc4TuplesType 795 136 - | 537 58 - arc_28/EventEmitter 186 133 - | 100 64 - asset/Reference 268 261 - | 144 141 - @@ -130,4 +130,4 @@ unssa/UnSSA 432 368 - | 241 204 - voting/VotingRoundApp 1593 1483 - | 734 649 - with_reentrancy/WithReentrancy 255 242 - | 132 122 - - Total 69194 53532 53473 | 32840 21757 21713 \ No newline at end of file + Total 69283 53532 53473 | 32895 21757 21713 \ No newline at end of file diff --git a/src/puya/awst/wtypes.py b/src/puya/awst/wtypes.py index 55934edf93..850dfe305d 100644 --- a/src/puya/awst/wtypes.py +++ b/src/puya/awst/wtypes.py @@ -162,9 +162,16 @@ def from_type(cls, transaction_type: TransactionType | None) -> "WInnerTransacti @attrs.frozen class WStructType(WType): fields: immutabledict[str, WType] = attrs.field(converter=immutabledict) + frozen: bool + immutable: bool = attrs.field(init=False) scalar_type: None = attrs.field(default=None, init=False) source_location: SourceLocation | None = attrs.field(eq=False) + @immutable.default + def _immutable(self) -> bool: + # TODO: determine correct behaviour when implementing native structs + raise NotImplementedError + @fields.validator def _fields_validator(self, _: object, fields: immutabledict[str, WType]) -> None: if not fields: @@ -450,14 +457,15 @@ def _require_arc4_fields(fields: Mapping[str, WType]) -> immutabledict[str, ARC4 @attrs.frozen(kw_only=True) class ARC4Struct(ARC4Type): fields: immutabledict[str, ARC4Type] = attrs.field(converter=_require_arc4_fields) - immutable: bool = attrs.field() + frozen: bool + immutable: bool = attrs.field(init=False) source_location: SourceLocation | None = attrs.field(default=None, eq=False) arc4_name: str = attrs.field(init=False, eq=False) native_type: None = attrs.field(default=None, init=False) @immutable.default def _immutable(self) -> bool: - return all(typ.immutable for typ in self.fields.values()) + return self.frozen and all(typ.immutable for typ in self.fields.values()) @arc4_name.default def _arc4_name(self) -> str: diff --git a/src/puyapy/awst_build/pytypes.py b/src/puyapy/awst_build/pytypes.py index 08f54901fc..2c4cc7f010 100644 --- a/src/puyapy/awst_build/pytypes.py +++ b/src/puyapy/awst_build/pytypes.py @@ -428,7 +428,7 @@ def __init__( else: raise InternalError(f"Unknown struct base type: {base}", source_location) wtype = wtype_cls( - fields=field_wtypes, name=name, immutable=frozen, source_location=source_location + fields=field_wtypes, name=name, frozen=frozen, source_location=source_location ) self.__attrs_init__( bases=[base], diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.mir b/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.mir index e3d06003ae..d0c1895019 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.mir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.mir @@ -1,19 +1,19 @@ // Op Stack (out) // test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> uint64: main_block@0: - // arc4_types/structs.py:27 + // arc4_types/structs.py:36 // coord_1 = Vector(x=Decimal("35.382882839"), y=Decimal("150.382884930")) byte 0x000000083cfbf217000000230384b842 0x000000083cfbf217000000230384b842 - // arc4_types/structs.py:28 + // arc4_types/structs.py:37 // coord_2 = Vector(y=Decimal("150.382884930"), x=Decimal("35.382882839")) byte 0x000000083cfbf217000000230384b842 0x000000083cfbf217000000230384b842,0x000000083cfbf217000000230384b842 - // arc4_types/structs.py:29 + // arc4_types/structs.py:38 // coord_3 = add(coord_1.copy(), coord_2.copy()) callsub add coord_3#0,add%1#0,add%2#0 pop 1 coord_3#0,add%1#0 pop 1 coord_3#0 l-store coord_3#0 0 coord_3#0 - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): l-load-copy coord_3#0 0 coord_3#0,coord_3#0 (copy) extract 0 8 // on error: Index access is out of bounds coord_3#0,val#0 @@ -26,11 +26,11 @@ main_block@0: // Implicit fall through to main_for_body@1 (𝕗) val#2,loop_counter%0#0 | (𝕏) val#0 | main_for_body@1: (𝕗) val#2,loop_counter%0#0 | (𝕏) val#0 | - // arc4_types/structs.py:31 + // arc4_types/structs.py:40 // log(val.bytes) x-load val#0 (𝕗) val#2,loop_counter%0#0 | val#0 log (𝕗) val#2,loop_counter%0#0 | - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): f-load loop_counter%0#0 (𝕗) val#2,loop_counter%0#0 | loop_counter%0#0 bnz main_after_for@4 (𝕗) val#2,loop_counter%0#0 | @@ -44,25 +44,25 @@ main_for_header_1@3: b main_for_body@1 (𝕗) val#2,loop_counter%0#0 | (𝕏) val#0 | main_after_for@4: (𝕗) val#2,loop_counter%0#0 | - // arc4_types/structs.py:33 + // arc4_types/structs.py:42 // flags = Flags(a=arc4.Bool(True), b=arc4.Bool(False), c=arc4.Bool(True), d=arc4.Bool(False)) byte 0xa0 (𝕗) val#2,loop_counter%0#0 | 0xa0 - // arc4_types/structs.py:34 + // arc4_types/structs.py:43 // check(flags.copy()) callsub check (𝕗) val#2,loop_counter%0#0 | check%0#0 pop 1 (𝕗) val#2,loop_counter%0#0 | - // arc4_types/structs.py:33 + // arc4_types/structs.py:42 // flags = Flags(a=arc4.Bool(True), b=arc4.Bool(False), c=arc4.Bool(True), d=arc4.Bool(False)) byte 0xa0 (𝕗) val#2,loop_counter%0#0 | 0xa0 - // arc4_types/structs.py:35 + // arc4_types/structs.py:44 // log(flags.bytes) log (𝕗) val#2,loop_counter%0#0 | - // arc4_types/structs.py:38 + // arc4_types/structs.py:47 // nested_decode(VectorFlags(coord_1.copy(), flags.copy())) byte 0x000000083cfbf217000000230384b842a0 (𝕗) val#2,loop_counter%0#0 | 0x000000083cfbf217000000230384b842a0 callsub nested_decode (𝕗) val#2,loop_counter%0#0 | nested_decode%0#0 pop 1 (𝕗) val#2,loop_counter%0#0 | - // arc4_types/structs.py:40 + // arc4_types/structs.py:58 // return True int 1 (𝕗) val#2,loop_counter%0#0 | 1 return (𝕗) val#2,loop_counter%0#0 | @@ -70,13 +70,13 @@ main_after_for@4: // test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> bytes, bytes, bytes: add: (𝕡) v1#0,v2#0 | - // arc4_types/structs.py:46-47 + // arc4_types/structs.py:64-65 // @subroutine // def add(v1: Vector, v2: Vector) -> Vector: proto 2 3 (𝕡) v1#0,v2#0 | add_block@0: (𝕡) v1#0,v2#0 | - // arc4_types/structs.py:49 + // arc4_types/structs.py:67 // x=add_decimal(v1.x, v2.x), p-load v1#0 (𝕡) v1#0,v2#0 | v1#0 (copy) extract 0 8 // on error: Index access is out of bounds (𝕡) v1#0,v2#0 | tmp%0#0 @@ -85,7 +85,7 @@ add_block@0: l-load tmp%0#0 1 (𝕡) v1#0,v2#0 | tmp%1#0,tmp%0#0 l-load tmp%1#0 1 (𝕡) v1#0,v2#0 | tmp%0#0,tmp%1#0 callsub add_decimal (𝕡) v1#0,v2#0 | tmp%2#0 - // arc4_types/structs.py:50 + // arc4_types/structs.py:68 // y=add_decimal(v1.y, v2.y), p-load v1#0 (𝕡) v1#0,v2#0 | tmp%2#0,v1#0 (copy) extract 8 8 // on error: Index access is out of bounds (𝕡) v1#0,v2#0 | tmp%2#0,tmp%3#0 @@ -94,7 +94,7 @@ add_block@0: l-load tmp%3#0 1 (𝕡) v1#0,v2#0 | tmp%2#0,tmp%4#0,tmp%3#0 l-load tmp%4#0 1 (𝕡) v1#0,v2#0 | tmp%2#0,tmp%3#0,tmp%4#0 callsub add_decimal (𝕡) v1#0,v2#0 | tmp%2#0,tmp%5#0 - // arc4_types/structs.py:48-51 + // arc4_types/structs.py:66-69 // return Vector( // x=add_decimal(v1.x, v2.x), // y=add_decimal(v1.y, v2.y), @@ -109,13 +109,13 @@ add_block@0: // test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: add_decimal: (𝕡) x#0,y#0 | - // arc4_types/structs.py:68-69 + // arc4_types/structs.py:86-87 // @subroutine // def add_decimal(x: Decimal, y: Decimal) -> Decimal: proto 2 1 (𝕡) x#0,y#0 | add_decimal_block@0: (𝕡) x#0,y#0 | - // arc4_types/structs.py:70 + // arc4_types/structs.py:88 // return Decimal.from_bytes(op.itob(op.btoi(x.bytes) + op.btoi(y.bytes))) p-load x#0 (𝕡) x#0,y#0 | x#0 (copy) btoi (𝕡) x#0,y#0 | tmp%0#0 @@ -130,13 +130,13 @@ add_decimal_block@0: // test_cases.arc4_types.structs.check(flags: bytes) -> bytes: check: (𝕡) flags#0 | - // arc4_types/structs.py:54-55 + // arc4_types/structs.py:72-73 // @subroutine // def check(flags: Flags) -> None: proto 1 1 (𝕡) flags#0 | check_block@0: (𝕡) flags#0 | - // arc4_types/structs.py:56 + // arc4_types/structs.py:74 // assert flags.a.native p-load flags#0 (𝕡) flags#0 | flags#0 (copy) int 0 (𝕡) flags#0 | flags#0 (copy),0 @@ -148,7 +148,7 @@ check_block@0: int 0 (𝕡) flags#0 | encoded_bool%0#0,0 getbit (𝕡) flags#0 | tmp%0#0 assert (𝕡) flags#0 | - // arc4_types/structs.py:57 + // arc4_types/structs.py:75 // assert not flags.b.native p-load flags#0 (𝕡) flags#0 | flags#0 (copy) int 1 (𝕡) flags#0 | flags#0 (copy),1 @@ -161,7 +161,7 @@ check_block@0: getbit (𝕡) flags#0 | tmp%1#0 ! (𝕡) flags#0 | tmp%2#0 assert (𝕡) flags#0 | - // arc4_types/structs.py:58 + // arc4_types/structs.py:76 // assert flags.c.native p-load flags#0 (𝕡) flags#0 | flags#0 (copy) int 2 (𝕡) flags#0 | flags#0 (copy),2 @@ -173,7 +173,7 @@ check_block@0: int 0 (𝕡) flags#0 | encoded_bool%2#0,0 getbit (𝕡) flags#0 | tmp%3#0 assert (𝕡) flags#0 | - // arc4_types/structs.py:59 + // arc4_types/structs.py:77 // assert not flags.d.native p-load flags#0 (𝕡) flags#0 | flags#0 (copy) int 3 (𝕡) flags#0 | flags#0 (copy),3 @@ -192,13 +192,13 @@ check_block@0: // test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: nested_decode: (𝕡) vector_flags#0 | - // arc4_types/structs.py:62-63 + // arc4_types/structs.py:80-81 // @subroutine // def nested_decode(vector_flags: VectorFlags) -> None: proto 1 1 (𝕡) vector_flags#0 | nested_decode_block@0: (𝕡) vector_flags#0 | - // arc4_types/structs.py:64 + // arc4_types/structs.py:82 // assert vector_flags.vector.x.bytes == op.itob(35382882839) p-load vector_flags#0 (𝕡) vector_flags#0 | vector_flags#0 (copy) extract 0 16 // on error: Index access is out of bounds (𝕡) vector_flags#0 | tmp%0#0 @@ -209,7 +209,7 @@ nested_decode_block@0: l-load tmp%2#0 1 (𝕡) vector_flags#0 | tmp%1#0,tmp%2#0 == (𝕡) vector_flags#0 | tmp%3#0 assert (𝕡) vector_flags#0 | - // arc4_types/structs.py:65 + // arc4_types/structs.py:83 // assert vector_flags.flags.c.native p-load vector_flags#0 (𝕡) vector_flags#0 | vector_flags#0 (copy) extract 16 1 // on error: Index access is out of bounds (𝕡) vector_flags#0 | tmp%4#0 diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.teal b/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.teal index 2de17d33f1..9188716637 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.teal +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.approval.teal @@ -3,17 +3,17 @@ test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program: intcblock 0 1 2 bytecblock 0x00 0xa0 - // arc4_types/structs.py:27 + // arc4_types/structs.py:36 // coord_1 = Vector(x=Decimal("35.382882839"), y=Decimal("150.382884930")) pushbytes 0x000000083cfbf217000000230384b842 - // arc4_types/structs.py:28 + // arc4_types/structs.py:37 // coord_2 = Vector(y=Decimal("150.382884930"), x=Decimal("35.382882839")) dup - // arc4_types/structs.py:29 + // arc4_types/structs.py:38 // coord_3 = add(coord_1.copy(), coord_2.copy()) callsub add popn 2 - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): dup extract 0 8 // on error: Index access is out of bounds @@ -24,10 +24,10 @@ test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program: swap main_for_body@1: - // arc4_types/structs.py:31 + // arc4_types/structs.py:40 // log(val.bytes) log - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): dup bnz main_after_for@4 @@ -37,25 +37,25 @@ main_for_body@1: b main_for_body@1 main_after_for@4: - // arc4_types/structs.py:33 + // arc4_types/structs.py:42 // flags = Flags(a=arc4.Bool(True), b=arc4.Bool(False), c=arc4.Bool(True), d=arc4.Bool(False)) bytec_1 // 0xa0 - // arc4_types/structs.py:34 + // arc4_types/structs.py:43 // check(flags.copy()) callsub check pop - // arc4_types/structs.py:33 + // arc4_types/structs.py:42 // flags = Flags(a=arc4.Bool(True), b=arc4.Bool(False), c=arc4.Bool(True), d=arc4.Bool(False)) bytec_1 // 0xa0 - // arc4_types/structs.py:35 + // arc4_types/structs.py:44 // log(flags.bytes) log - // arc4_types/structs.py:38 + // arc4_types/structs.py:47 // nested_decode(VectorFlags(coord_1.copy(), flags.copy())) pushbytes 0x000000083cfbf217000000230384b842a0 callsub nested_decode pop - // arc4_types/structs.py:40 + // arc4_types/structs.py:58 // return True intc_1 // 1 return @@ -63,25 +63,25 @@ main_after_for@4: // test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> bytes, bytes, bytes: add: - // arc4_types/structs.py:46-47 + // arc4_types/structs.py:64-65 // @subroutine // def add(v1: Vector, v2: Vector) -> Vector: proto 2 3 - // arc4_types/structs.py:49 + // arc4_types/structs.py:67 // x=add_decimal(v1.x, v2.x), frame_dig -2 extract 0 8 // on error: Index access is out of bounds frame_dig -1 extract 0 8 // on error: Index access is out of bounds callsub add_decimal - // arc4_types/structs.py:50 + // arc4_types/structs.py:68 // y=add_decimal(v1.y, v2.y), frame_dig -2 extract 8 8 // on error: Index access is out of bounds frame_dig -1 extract 8 8 // on error: Index access is out of bounds callsub add_decimal - // arc4_types/structs.py:48-51 + // arc4_types/structs.py:66-69 // return Vector( // x=add_decimal(v1.x, v2.x), // y=add_decimal(v1.y, v2.y), @@ -94,11 +94,11 @@ add: // test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: add_decimal: - // arc4_types/structs.py:68-69 + // arc4_types/structs.py:86-87 // @subroutine // def add_decimal(x: Decimal, y: Decimal) -> Decimal: proto 2 1 - // arc4_types/structs.py:70 + // arc4_types/structs.py:88 // return Decimal.from_bytes(op.itob(op.btoi(x.bytes) + op.btoi(y.bytes))) frame_dig -2 btoi @@ -111,11 +111,11 @@ add_decimal: // test_cases.arc4_types.structs.check(flags: bytes) -> bytes: check: - // arc4_types/structs.py:54-55 + // arc4_types/structs.py:72-73 // @subroutine // def check(flags: Flags) -> None: proto 1 1 - // arc4_types/structs.py:56 + // arc4_types/structs.py:74 // assert flags.a.native frame_dig -1 intc_0 // 0 @@ -127,7 +127,7 @@ check: intc_0 // 0 getbit assert - // arc4_types/structs.py:57 + // arc4_types/structs.py:75 // assert not flags.b.native frame_dig -1 intc_1 // 1 @@ -140,7 +140,7 @@ check: getbit ! assert - // arc4_types/structs.py:58 + // arc4_types/structs.py:76 // assert flags.c.native frame_dig -1 intc_2 // 2 @@ -152,7 +152,7 @@ check: intc_0 // 0 getbit assert - // arc4_types/structs.py:59 + // arc4_types/structs.py:77 // assert not flags.d.native frame_dig -1 pushint 3 // 3 @@ -171,11 +171,11 @@ check: // test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: nested_decode: - // arc4_types/structs.py:62-63 + // arc4_types/structs.py:80-81 // @subroutine // def nested_decode(vector_flags: VectorFlags) -> None: proto 1 1 - // arc4_types/structs.py:64 + // arc4_types/structs.py:82 // assert vector_flags.vector.x.bytes == op.itob(35382882839) frame_dig -1 extract 0 16 // on error: Index access is out of bounds @@ -184,7 +184,7 @@ nested_decode: itob == assert - // arc4_types/structs.py:65 + // arc4_types/structs.py:83 // assert vector_flags.flags.c.native frame_dig -1 extract 16 1 // on error: Index access is out of bounds diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.mir b/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.mir index fcb5dc37ea..9047e154f8 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.mir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.mir @@ -1,7 +1,7 @@ // Op Stack (out) // test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> uint64: main_block@0: - // arc4_types/structs.py:43 + // arc4_types/structs.py:61 // return True int 1 1 return diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.teal b/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.teal index 21aa8f0f49..f841c9a5e6 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.teal +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program: - // arc4_types/structs.py:43 + // arc4_types/structs.py:61 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.destructured.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.destructured.ir index c450a665c9..193289164a 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.destructured.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.destructured.ir @@ -1,27 +1,27 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 (log val#0) goto loop_counter%0#0 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#0: uint64 = 1u let val#0: bytes = val#2 goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) (log 0xa0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -32,7 +32,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -40,7 +40,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -62,7 +62,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -77,5 +77,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir index c015ad7214..5e4d1c15a4 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir @@ -1,7 +1,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let current_tail_offset%0#0: uint64 = 16u let encoded_tuple_buffer%0#0: bytes = 0x let encoded_tuple_buffer%1#0: bytes = (concat encoded_tuple_buffer%0#0 0x000000083cfbf217) @@ -23,18 +23,18 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let loop_counter%0#0: uint64 = 0u let val#0: bytes = tmp%0#0 goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto block@2 - block@2: // for_footer_L30 + block@2: // for_footer_L39 goto_nth [block@3][loop_counter%0#1] else goto block@4 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u let val#2: bytes = tmp%1#0 goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let encoded_bool%0#0: bytes = (setbit 0x00 0u 1u) let encoded_bool%1#0: bytes = (setbit 0x00 0u 0u) let encoded_bool%2#0: bytes = (setbit 0x00 0u 1u) @@ -63,10 +63,50 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 copy%4#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) let encoded_tuple_buffer%13#1: bytes = nested_decode%0#0 + let length%0#0: uint64 = (len 0x) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 0x) + let current_tail_offset%4#0: uint64 = 2u + let encoded_tuple_buffer%14#0: bytes = 0x + let as_bytes%1#0: bytes = (itob current_tail_offset%4#0) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_tuple_buffer%15#0: bytes = (concat encoded_tuple_buffer%14#0 offset_as_uint16%0#0) + let data_length%0#0: uint64 = (len encoded_value%0#0) + let current_tail_offset%5#0: uint64 = (+ current_tail_offset%4#0 data_length%0#0) + let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 encoded_value%0#0) + let mutable#0: bytes = encoded_tuple_buffer%16#0 + let copy%5#0: bytes = mutable#0 + let copy#0: bytes = copy%5#0 + let item_start_offset%0#0: uint64 = (extract_uint16 copy#0 0u) + let item_end_offset%0#0: uint64 = (len copy#0) + let tmp%3#0: bytes = (substring3 copy#0 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let data%0#0: bytes = (concat 0x 0x2a) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let assigned_value%0#0: bytes = concat_result%0#0 + let item_offset%0#0: uint64 = (extract_uint16 copy#0 0u) + let data_up_to_item%0#0: bytes = (extract3 copy#0 0u item_offset%0#0) + let updated_data%0#0: bytes = (concat data_up_to_item%0#0 assigned_value%0#0) + let copy#1: bytes = updated_data%0#0 + let tmp%4#0: bool = (!= mutable#0 copy#1) + (assert tmp%4#0) // expected copy is different + let current_tail_offset%6#0: uint64 = 16u + let encoded_tuple_buffer%17#0: bytes = 0x + let encoded_tuple_buffer%18#0: bytes = (concat encoded_tuple_buffer%17#0 0x000000000000000c) + let encoded_tuple_buffer%19#0: bytes = (concat encoded_tuple_buffer%18#0 0x0000000000000022) + let immutable#0: bytes = encoded_tuple_buffer%19#0 + let no_copy#0: bytes = immutable#0 + let tmp%5#0: bool = (== no_copy#0 immutable#0) + (assert tmp%5#0) return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -80,7 +120,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -88,7 +128,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -110,7 +150,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = (extract3 vector_flags#0 0u 16u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 tmp%0#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -125,5 +165,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_1.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_1.ir index c6443d7468..6d81a85bee 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_1.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_1.ir @@ -1,7 +1,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let encoded_tuple_buffer%1#0: bytes = 0x000000083cfbf217 let coord_1#0: bytes = (concat encoded_tuple_buffer%1#0 0x000000230384b842) let encoded_tuple_buffer%4#0: bytes = 0x000000083cfbf217 @@ -11,22 +11,21 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let encoded_bool%0#0: bytes = 0x80 let encoded_bool%1#0: bytes = 0x00 let encoded_bool%2#0: bytes = 0x80 let encoded_bool%3#0: bytes = 0x00 - let encoded_tuple_buffer%7#0: bytes = encoded_bool%0#0 let is_true%0#0: uint64 = (getbit encoded_bool%1#0 0u) - let encoded_tuple_buffer%8#0: bytes = (setbit encoded_tuple_buffer%7#0 1u is_true%0#0) + let encoded_tuple_buffer%8#0: bytes = (setbit encoded_bool%0#0 1u is_true%0#0) let is_true%1#0: uint64 = (getbit encoded_bool%2#0 0u) let encoded_tuple_buffer%9#0: bytes = (setbit encoded_tuple_buffer%8#0 2u is_true%1#0) let is_true%2#0: uint64 = (getbit encoded_bool%3#0 0u) @@ -35,13 +34,35 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: (log flags#0) let tmp%2#0: bool = 1u (assert tmp%2#0) - let encoded_tuple_buffer%12#0: bytes = coord_1#0 - let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 flags#0) + let encoded_tuple_buffer%13#0: bytes = (concat coord_1#0 flags#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let length%0#0: uint64 = 0u + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let offset_as_uint16%0#0: bytes = 0x0002 + let data_length%0#0: uint64 = (len length_uint16%0#0) + let mutable#0: bytes = (concat offset_as_uint16%0#0 length_uint16%0#0) + let item_start_offset%0#0: uint64 = (extract_uint16 mutable#0 0u) + let item_end_offset%0#0: uint64 = (len mutable#0) + let tmp%3#0: bytes = (substring3 mutable#0 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let data%0#0: bytes = 0x2a + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let data_up_to_item%0#0: bytes = (extract3 mutable#0 0u item_start_offset%0#0) + let copy#1: bytes = (concat data_up_to_item%0#0 concat_result%0#0) + let tmp%4#0: bool = (!= mutable#0 copy#1) + (assert tmp%4#0) // expected copy is different + let encoded_tuple_buffer%18#0: bytes = 0x000000000000000c + let tmp%5#0: bool = 1u + (assert tmp%5#0) return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -53,7 +74,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -61,7 +82,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -83,7 +104,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -98,5 +119,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_10.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_10.ir new file mode 100644 index 0000000000..d5fb5854e1 --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_10.ir @@ -0,0 +1,86 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let concat_result%0#0: bytes = 0x00012a + let copy#1: bytes = (concat 0x0002 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_11.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_11.ir new file mode 100644 index 0000000000..7abc861728 --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_11.ir @@ -0,0 +1,85 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let copy#1: bytes = 0x000200012a + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_12.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_12.ir new file mode 100644 index 0000000000..b31730dec6 --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_12.ir @@ -0,0 +1,84 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let tmp%4#0: bool = 1u + (assert tmp%4#0) // expected copy is different + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_13.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_13.ir new file mode 100644 index 0000000000..0bad534fc8 --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_13.ir @@ -0,0 +1,82 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_2.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_2.ir index 6bf190445c..cf6b4e324e 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_2.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_2.ir @@ -1,7 +1,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let coord_1#0: bytes = 0x000000083cfbf217000000230384b842 let coord_2#0: bytes = 0x000000083cfbf217000000230384b842 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(coord_1#0, coord_2#0) @@ -9,15 +9,15 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let is_true%0#0: uint64 = 0u let encoded_tuple_buffer%8#0: bytes = (setbit 0x80 1u is_true%0#0) let is_true%1#0: uint64 = 1u @@ -28,10 +28,25 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: (log flags#0) let encoded_tuple_buffer%13#0: bytes = (concat coord_1#0 flags#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let length_uint16%0#0: bytes = 0x0000 + let mutable#0: bytes = (concat 0x0002 length_uint16%0#0) + let item_start_offset%0#0: uint64 = (extract_uint16 mutable#0 0u) + let item_end_offset%0#0: uint64 = (len mutable#0) + let tmp%3#0: bytes = (substring3 mutable#0 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x2a) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let data_up_to_item%0#0: bytes = (extract3 mutable#0 0u item_start_offset%0#0) + let copy#1: bytes = (concat data_up_to_item%0#0 concat_result%0#0) + let tmp%4#0: bool = (!= mutable#0 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -42,7 +57,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -50,7 +65,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -72,7 +87,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -87,5 +102,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_3.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_3.ir index 750d13abc7..e6f8666d30 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_3.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_3.ir @@ -1,21 +1,21 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let encoded_tuple_buffer%8#0: bytes = 0x80 let encoded_tuple_buffer%9#0: bytes = (setbit encoded_tuple_buffer%8#0 2u 1u) let flags#0: bytes = (setbit encoded_tuple_buffer%9#0 3u 0u) @@ -23,10 +23,24 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: (log flags#0) let encoded_tuple_buffer%13#0: bytes = (concat 0x000000083cfbf217000000230384b842 flags#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let mutable#0: bytes = 0x00020000 + let item_start_offset%0#0: uint64 = (extract_uint16 mutable#0 0u) + let item_end_offset%0#0: uint64 = (len mutable#0) + let tmp%3#0: bytes = (substring3 mutable#0 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x2a) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let data_up_to_item%0#0: bytes = (extract3 mutable#0 0u item_start_offset%0#0) + let copy#1: bytes = (concat data_up_to_item%0#0 concat_result%0#0) + let tmp%4#0: bool = (!= mutable#0 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -37,7 +51,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -45,7 +59,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -67,7 +81,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -82,5 +96,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_4.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_4.ir index 59c94607b8..5eb7611273 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_4.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_4.ir @@ -1,31 +1,44 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let encoded_tuple_buffer%9#0: bytes = 0xa0 let flags#0: bytes = (setbit encoded_tuple_buffer%9#0 3u 0u) let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) (log flags#0) let encoded_tuple_buffer%13#0: bytes = (concat 0x000000083cfbf217000000230384b842 flags#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let item_start_offset%0#0: uint64 = 2u + let item_end_offset%0#0: uint64 = 4u + let tmp%3#0: bytes = (substring3 0x00020000 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x2a) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let data_up_to_item%0#0: bytes = (extract3 0x00020000 0u item_start_offset%0#0) + let copy#1: bytes = (concat data_up_to_item%0#0 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -36,7 +49,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -44,7 +57,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -66,7 +79,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -81,5 +94,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_5.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_5.ir index cf114551f5..2bdd381bca 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_5.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_5.ir @@ -1,30 +1,41 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let flags#0: bytes = 0xa0 let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) (log flags#0) let encoded_tuple_buffer%13#0: bytes = (concat 0x000000083cfbf217000000230384b842 flags#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let tmp%3#0: bytes = 0x0000 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x2a) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let data_up_to_item%0#0: bytes = 0x0002 + let copy#1: bytes = (concat data_up_to_item%0#0 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -35,7 +46,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -43,7 +54,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -65,7 +76,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -80,5 +91,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_6.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_6.ir index 8cf2df5bfb..e3ceb28c46 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_6.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_6.ir @@ -1,29 +1,38 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) (log 0xa0) let encoded_tuple_buffer%13#0: bytes = 0x000000083cfbf217000000230384b842a0 let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let expr_value_trimmed%0#0: bytes = 0x + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x2a) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let copy#1: bytes = (concat 0x0002 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -34,7 +43,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -42,7 +51,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -64,7 +73,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -79,5 +88,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_7.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_7.ir index 7b5093aadd..cf005d0738 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_7.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_7.ir @@ -1,28 +1,36 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) (log val#1) goto loop_counter%0#1 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#2: uint64 = 1u goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) (log 0xa0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let concatenated%0#0: bytes = 0x2a + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let copy#1: bytes = (concat 0x0002 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -33,7 +41,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -41,7 +49,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -63,7 +71,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -78,5 +86,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_8.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_8.ir new file mode 100644 index 0000000000..3a33630cde --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_8.ir @@ -0,0 +1,89 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let len_%0#0: uint64 = 1u + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 0x2a) + let copy#1: bytes = (concat 0x0002 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_9.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_9.ir new file mode 100644 index 0000000000..c1b4e37829 --- /dev/null +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_9.ir @@ -0,0 +1,87 @@ +contract test_cases.arc4_types.structs.Arc4StructsTypeContract: + program approval: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: + block@0: // L35 + let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) + let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds + let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds + let loop_counter%0#0: uint64 = 0u + goto block@1 + block@1: // for_body_L40 + let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) + let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) + (log val#1) + goto loop_counter%0#1 ? block@4 : block@3 + block@3: // for_header_1_L39 + let loop_counter%0#2: uint64 = 1u + goto block@1 + block@4: // after_for_L39 + let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) + (log 0xa0) + let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) + let len_16_bit%0#0: bytes = 0x0001 + let concat_result%0#0: bytes = (concat len_16_bit%0#0 0x2a) + let copy#1: bytes = (concat 0x0002 concat_result%0#0) + let tmp%4#0: bool = (!= 0x00020000 copy#1) + (assert tmp%4#0) // expected copy is different + return 1u + + subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : + block@0: // L64 + let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) + let tmp%3#0: bytes = ((extract 8 8) v1#0) // on error: Index access is out of bounds + let tmp%4#0: bytes = ((extract 8 8) v2#0) // on error: Index access is out of bounds + let tmp%5#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%3#0, tmp%4#0) + let encoded_tuple_buffer%2#0: bytes = (concat tmp%2#0 tmp%5#0) + return encoded_tuple_buffer%2#0 v1#0 v2#0 + + subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: + block@0: // L86 + let tmp%0#0: uint64 = (btoi x#0) + let tmp%1#0: uint64 = (btoi y#0) + let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) + let tmp%3#0: bytes = (itob tmp%2#0) + return tmp%3#0 + + subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: + block@0: // L72 + let is_true%0#0: uint64 = (getbit flags#0 0u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%0#0) + let is_true%1#0: uint64 = (getbit flags#0 1u) + let encoded_bool%1#0: bytes = (setbit 0x00 0u is_true%1#0) + let tmp%1#0: bool = (getbit encoded_bool%1#0 0u) + let tmp%2#0: bool = (! tmp%1#0) + (assert tmp%2#0) + let is_true%2#0: uint64 = (getbit flags#0 2u) + let encoded_bool%2#0: bytes = (setbit 0x00 0u is_true%2#0) + let tmp%3#0: bool = (getbit encoded_bool%2#0 0u) + (assert tmp%3#0) + let is_true%3#0: uint64 = (getbit flags#0 3u) + let encoded_bool%3#0: bytes = (setbit 0x00 0u is_true%3#0) + let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) + let tmp%5#0: bool = (! tmp%4#0) + (assert tmp%5#0) + return flags#0 + + subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: + block@0: // L80 + let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds + let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds + let tmp%2#0: bytes = (itob 35382882839u) + let tmp%3#0: bool = (== tmp%1#0 tmp%2#0) + (assert tmp%3#0) + let tmp%4#0: bytes = ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds + let is_true%0#0: uint64 = (getbit tmp%4#0 2u) + let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) + let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) + (assert tmp%5#0) + return vector_flags#0 + + program clear-state: + subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: + block@0: // L60 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/module.awst b/test_cases/arc4_types/out/module.awst index 96f7210bb2..61dbaa8a04 100644 --- a/test_cases/arc4_types/out/module.awst +++ b/test_cases/arc4_types/out/module.awst @@ -57,6 +57,13 @@ contract Arc4StructsTypeContract log(reinterpret_cast(flags)) assert(reinterpret_cast(reinterpret_cast(reinterpret_cast(coord_1))) == reinterpret_cast(coord_1)) test_cases.arc4_types.structs.nested_decode(new test_cases.arc4_types.structs.VectorFlags(vector=coord_1.copy(), flags=flags.copy())) + mutable: test_cases.arc4_types.structs.FrozenButMutable = new test_cases.arc4_types.structs.FrozenButMutable(mutable=arc4_encode(hex<"">, arc4.dynamic_array)) + copy: test_cases.arc4_types.structs.FrozenButMutable = mutable.copy() + copy.mutable.extend((42_arc4u8)) + assert(mutable != copy, comment="expected copy is different") + immutable: test_cases.arc4_types.structs.FrozenAndImmutable = new test_cases.arc4_types.structs.FrozenAndImmutable(one=12_arc4u64, two=34_arc4u64) + no_copy: test_cases.arc4_types.structs.FrozenAndImmutable = immutable + assert(no_copy == immutable) return true } diff --git a/test_cases/arc4_types/out/structs.O0.log b/test_cases/arc4_types/out/structs.O0.log index 05d5211496..269ee67913 100644 --- a/test_cases/arc4_types/out/structs.O0.log +++ b/test_cases/arc4_types/out/structs.O0.log @@ -1,61 +1,61 @@ PC Teal Stack 1 intcblock 0 8 1 2 -7 bytecblock 0x00 0x 0x000000083cfbf217 0x000000230384b842 -30 bytec_1 0x +7 bytecblock 0x 0x00 0x000000083cfbf217 0x000000230384b842 +30 bytec_0 0x 31 bytec_2 0x, 0x000000083CFBF217 32 concat 0x000000083CFBF217 33 bytec_3 0x000000083CFBF217, 0x000000230384B842 34 concat 0x000000083CFBF217000000230384B842 35 dup 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 -36 bytec_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x +36 bytec_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x 37 bytec_2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x, 0x000000083CFBF217 38 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217 39 bytec_3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000230384B842 40 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 41 callsub add 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 -148 proto 2 3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 -151 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 -153 intc_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0 -154 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0, 8 -155 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217 -156 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842 -158 intc_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842, 0 -159 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842, 0, 8 -160 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 -161 callsub add_decimal 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 -188 proto 2 1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 -191 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 0x000000083CFBF217 -193 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839 -194 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839, 0x000000083CFBF217 -196 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839, 35382882839 -197 + 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 70765765678 -198 itob 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 0x0000001079F7E42E -199 retsub 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E -164 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842 -166 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842, 8 -167 dup 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842, 8, 8 -168 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842 -169 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842 -171 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842, 8 -172 dup 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842, 8, 8 -173 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 -174 callsub add_decimal 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 -188 proto 2 1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 -191 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 0x000000230384B842 -193 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930 -194 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930, 0x000000230384B842 -196 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930, 150382884930 -197 + 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 300765769860 -198 itob 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 0x0000004607097084 -199 retsub 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084 -177 bytec_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084, 0x -178 uncover 2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000004607097084, 0x, 0x0000001079F7E42E -180 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000004607097084, 0x0000001079F7E42E -181 swap 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084 -182 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084 -183 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842 -185 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 -187 retsub 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 +237 proto 2 3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 +240 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 +242 intc_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0 +243 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0, 8 +244 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217 +245 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842 +247 intc_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842, 0 +248 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217000000230384B842, 0, 8 +249 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 +250 callsub add_decimal 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 +277 proto 2 1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217 +280 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 0x000000083CFBF217 +282 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839 +283 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839, 0x000000083CFBF217 +285 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 35382882839, 35382882839 +286 + 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 70765765678 +287 itob 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217, 0x000000083CFBF217, 0x0000001079F7E42E +288 retsub 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E +253 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842 +255 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842, 8 +256 dup 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000083CFBF217000000230384B842, 8, 8 +257 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842 +258 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842 +260 intc_1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842, 8 +261 dup 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000083CFBF217000000230384B842, 8, 8 +262 extract3 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 +263 callsub add_decimal 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 +277 proto 2 1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842 +280 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 0x000000230384B842 +282 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930 +283 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930, 0x000000230384B842 +285 btoi 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 150382884930, 150382884930 +286 + 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 300765769860 +287 itob 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x000000230384B842, 0x000000230384B842, 0x0000004607097084 +288 retsub 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084 +266 bytec_0 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084, 0x +267 uncover 2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000004607097084, 0x, 0x0000001079F7E42E +269 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000004607097084, 0x0000001079F7E42E +270 swap 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E, 0x0000004607097084 +271 concat 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084 +272 frame_dig -2 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842 +274 frame_dig -1 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 +276 retsub 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 44 popn 2 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084 46 dup 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x0000001079F7E42E0000004607097084 47 intc_0 0x000000083CFBF217000000230384B842, 0x0000001079F7E42E0000004607097084, 0x0000001079F7E42E0000004607097084, 0 @@ -79,25 +79,25 @@ PC Teal Stack 58 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 1 59 switch main_for_header_1@3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 63 b main_after_for@4 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 -74 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00 +74 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00 75 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0 76 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0, 1 77 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80 -78 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00 +78 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00 79 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0 80 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0, 0 81 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00 -82 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0x00 +82 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0x00 83 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0x00, 0 84 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0x00, 0, 1 85 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x00, 0x80 86 cover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00 -88 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00, 0x00 +88 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00, 0x00 89 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00, 0x00, 0 90 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00, 0x00, 0, 0 91 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x80, 0x80, 0x00, 0x00 92 cover 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x80, 0x00 -94 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x80, 0x00, 0x +94 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x80, 0x00, 0x 95 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x00, 0x, 0x80 97 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x00, 0x80 98 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00, 0x80, 0x80, 0x00 @@ -123,51 +123,51 @@ PC Teal Stack 122 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0 123 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 124 callsub check 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -200 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -203 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -205 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 -206 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -207 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 -208 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 -209 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 -211 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 -212 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 -213 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -214 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -215 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -217 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 -218 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -219 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 -220 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 -221 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 -223 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 -224 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 -225 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -226 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -227 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -228 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -230 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 2 -231 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -232 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 -233 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 -234 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 -236 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 -237 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 -238 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -239 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -240 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -242 pushint 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 3 -244 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -245 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 -246 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 -247 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 -249 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 -250 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 -251 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -252 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -253 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -254 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -256 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +289 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +292 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +294 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 +295 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +296 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 +297 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 +298 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 +300 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 +301 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 +302 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +303 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +304 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +306 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +307 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 +308 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 +309 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 +310 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 +312 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 +313 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 +314 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 +315 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +316 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +317 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +319 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 2 +320 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +321 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 +322 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 +323 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 +325 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 +326 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 +327 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +328 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +329 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +331 pushint 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 3 +333 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 +334 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 +335 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 +336 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 +338 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 +339 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 +340 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 +341 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 +342 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +343 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +345 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 127 pop 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0 128 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 129 log 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0 @@ -176,39 +176,94 @@ PC Teal Stack 133 dig 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842, 0x000000083CFBF217000000230384B842 135 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842, 1 136 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842 -137 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842, 0x +137 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842, 0x 138 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x, 0x000000083CFBF217000000230384B842 139 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0x000000083CFBF217000000230384B842 140 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842, 0xA0 141 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 142 callsub nested_decode 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -257 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -260 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -262 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0 -263 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0, 16 -265 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842 -266 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0 -267 intc_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0, 8 -268 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217 -269 pushint 35382882839 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 35382882839 -276 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 0x000000083CFBF217 -277 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -278 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -279 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -281 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16 -283 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16, 1 -284 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0 -285 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0, 2 -286 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -287 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00 -288 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00, 0 -289 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x00, 0, 1 -291 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80 -292 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80, 0 -293 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -294 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -295 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -297 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +346 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +349 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +351 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0 +352 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0, 16 +354 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842 +355 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0 +356 intc_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0, 8 +357 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217 +358 pushint 35382882839 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 35382882839 +365 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 0x000000083CFBF217 +366 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 +367 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +368 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +370 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16 +372 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16, 1 +373 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0 +374 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0, 2 +375 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 +376 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00 +377 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00, 0 +378 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x00, 0, 1 +380 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80 +381 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80, 0 +382 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 +383 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +384 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +386 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 145 pop 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 -146 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 1 -147 return 1 \ No newline at end of file +146 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x +147 len 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0 +148 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000000000000000 +149 extract 6 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000 +152 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x +153 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000 +154 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 2 +155 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x0000000000000002 +156 extract 6 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x0002 +159 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x0002, 0x +160 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x, 0x0002 +161 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0000, 0x0002 +162 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x0002, 0x0000 +163 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000 +164 dupn 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00020000 +166 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00020000, 0 +167 extract_uint16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 2 +168 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 2, 0x00020000 +169 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 2, 0x00020000, 0x00020000 +170 len 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 2, 0x00020000, 4 +171 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 2, 4, 0x00020000 +172 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 2, 4, 0x00020000, 0x00020000 +173 uncover 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 4, 0x00020000, 0x00020000, 2 +175 uncover 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00020000, 2, 4 +177 substring3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x0000 +178 extract 2 0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x +181 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x, 0x +182 pushbytes 0x2a 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x, 0x, "*" +185 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x, "*" +186 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, "*" +187 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, "*", "*" +188 len 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, "*", 1 +189 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, "*", 0x0000000000000001 +190 extract 6 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, "*", 0x0001 +193 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x0001, "*" +194 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00012A +195 dig 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00012A, 0x00020000 +197 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00012A, 0x00020000, 0 +198 extract_uint16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00020000, 0x00012A, 2 +199 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00012A, 2, 0x00020000 +201 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00012A, 2, 0x00020000, 0 +202 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00012A, 0x00020000, 0, 2 +204 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x00012A, 0x0002 +205 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x0002, 0x00012A +206 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x00020000, 0x000200012A +207 != 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 1 +208 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 +209 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x +210 pushbytes 0x000000000000000c 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x, 0x000000000000000C +220 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000000000000C +221 pushbytes 0x0000000000000022 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000000000000C, 0x0000000000000022 +231 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000000000000C0000000000000022 +232 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000000000000C0000000000000022, 0x000000000000000C0000000000000022 +233 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 1 +234 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 +235 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 1 +236 return 1 \ No newline at end of file diff --git a/test_cases/arc4_types/out_O2/Arc4StructsTypeContract.destructured.ir b/test_cases/arc4_types/out_O2/Arc4StructsTypeContract.destructured.ir index c450a665c9..193289164a 100644 --- a/test_cases/arc4_types/out_O2/Arc4StructsTypeContract.destructured.ir +++ b/test_cases/arc4_types/out_O2/Arc4StructsTypeContract.destructured.ir @@ -1,27 +1,27 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let (coord_3#0: bytes, add%1#0: bytes, add%2#0: bytes) = test_cases.arc4_types.structs.add(0x000000083cfbf217000000230384b842, 0x000000083cfbf217000000230384b842) let val#0: bytes = ((extract 0 8) coord_3#0) // on error: Index access is out of bounds let val#2: bytes = ((extract 8 8) coord_3#0) // on error: Index access is out of bounds let loop_counter%0#0: uint64 = 0u goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 (log val#0) goto loop_counter%0#0 ? block@4 : block@3 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#0: uint64 = 1u let val#0: bytes = val#2 goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) (log 0xa0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = ((extract 0 8) v1#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) v2#0) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -32,7 +32,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -40,7 +40,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -62,7 +62,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds let tmp%1#0: bytes = ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -77,5 +77,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal index 70f730ef1c..ab3c71ba12 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal @@ -2,27 +2,27 @@ test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program: intcblock 0 8 1 2 - bytecblock 0x00 0x 0x000000083cfbf217 0x000000230384b842 - // arc4_types/structs.py:27 + bytecblock 0x 0x00 0x000000083cfbf217 0x000000230384b842 + // arc4_types/structs.py:36 // coord_1 = Vector(x=Decimal("35.382882839"), y=Decimal("150.382884930")) - bytec_1 // 0x + bytec_0 // 0x bytec_2 // 0x000000083cfbf217 concat bytec_3 // 0x000000230384b842 concat dup - // arc4_types/structs.py:28 + // arc4_types/structs.py:37 // coord_2 = Vector(y=Decimal("150.382884930"), x=Decimal("35.382882839")) - bytec_1 // 0x + bytec_0 // 0x bytec_2 // 0x000000083cfbf217 concat bytec_3 // 0x000000230384b842 concat - // arc4_types/structs.py:29 + // arc4_types/structs.py:38 // coord_3 = add(coord_1.copy(), coord_2.copy()) callsub add popn 2 - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): dup intc_0 // 0 @@ -37,10 +37,10 @@ test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program: swap main_for_body@1: - // arc4_types/structs.py:31 + // arc4_types/structs.py:40 // log(val.bytes) log - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): dup switch main_for_header_1@3 @@ -49,33 +49,33 @@ main_for_body@1: main_for_header_1@3: intc_2 // 1 bury 1 - // arc4_types/structs.py:30 + // arc4_types/structs.py:39 // for val in (coord_3.x, coord_3.y): dig 1 b main_for_body@1 main_after_for@4: - // arc4_types/structs.py:33 + // arc4_types/structs.py:42 // flags = Flags(a=arc4.Bool(True), b=arc4.Bool(False), c=arc4.Bool(True), d=arc4.Bool(False)) - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 intc_2 // 1 setbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 dup setbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 intc_2 // 1 setbit cover 2 - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 dup setbit cover 3 - bytec_1 // 0x + bytec_0 // 0x uncover 2 concat swap @@ -99,32 +99,101 @@ main_after_for@4: pushint 3 // 3 uncover 2 setbit - // arc4_types/structs.py:34 + // arc4_types/structs.py:43 // check(flags.copy()) dup callsub check pop - // arc4_types/structs.py:35 + // arc4_types/structs.py:44 // log(flags.bytes) dup log - // arc4_types/structs.py:36 + // arc4_types/structs.py:45 // assert Vector.from_bytes(coord_1.bytes).bytes == coord_1.bytes dig 3 dup dig 1 == assert - // arc4_types/structs.py:38 + // arc4_types/structs.py:47 // nested_decode(VectorFlags(coord_1.copy(), flags.copy())) - bytec_1 // 0x + bytec_0 // 0x swap concat swap concat callsub nested_decode pop - // arc4_types/structs.py:40 + // arc4_types/structs.py:49 + // mutable = FrozenButMutable(arc4.DynamicBytes()) + bytec_0 // 0x + len + itob + extract 6 2 + bytec_0 // 0x + concat + intc_3 // 2 + itob + extract 6 2 + bytec_0 // 0x + swap + concat + swap + concat + // arc4_types/structs.py:50 + // copy = mutable.copy() + dupn 2 + // arc4_types/structs.py:51 + // copy.mutable.append(arc4.Byte(42)) + intc_0 // 0 + extract_uint16 + swap + dup + len + swap + dup + uncover 3 + uncover 3 + substring3 + extract 2 0 + bytec_0 // 0x + pushbytes 0x2a + concat + concat + dup + len + itob + extract 6 2 + swap + concat + dig 1 + intc_0 // 0 + extract_uint16 + uncover 2 + intc_0 // 0 + uncover 2 + extract3 + swap + concat + // arc4_types/structs.py:52 + // assert mutable != copy, "expected copy is different" + != + assert // expected copy is different + // arc4_types/structs.py:54 + // immutable = FrozenAndImmutable(arc4.UInt64(12), arc4.UInt64(34)) + bytec_0 // 0x + pushbytes 0x000000000000000c + concat + pushbytes 0x0000000000000022 + concat + // arc4_types/structs.py:55 + // no_copy = immutable + dup + // arc4_types/structs.py:56 + // assert no_copy == immutable + == + assert + // arc4_types/structs.py:58 // return True intc_2 // 1 return @@ -132,11 +201,11 @@ main_after_for@4: // test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> bytes, bytes, bytes: add: - // arc4_types/structs.py:46-47 + // arc4_types/structs.py:64-65 // @subroutine // def add(v1: Vector, v2: Vector) -> Vector: proto 2 3 - // arc4_types/structs.py:49 + // arc4_types/structs.py:67 // x=add_decimal(v1.x, v2.x), frame_dig -2 intc_0 // 0 @@ -147,7 +216,7 @@ add: intc_1 // 8 extract3 // on error: Index access is out of bounds callsub add_decimal - // arc4_types/structs.py:50 + // arc4_types/structs.py:68 // y=add_decimal(v1.y, v2.y), frame_dig -2 intc_1 // 8 @@ -158,12 +227,12 @@ add: dup extract3 // on error: Index access is out of bounds callsub add_decimal - // arc4_types/structs.py:48-51 + // arc4_types/structs.py:66-69 // return Vector( // x=add_decimal(v1.x, v2.x), // y=add_decimal(v1.y, v2.y), // ) - bytec_1 // 0x + bytec_0 // 0x uncover 2 concat swap @@ -175,11 +244,11 @@ add: // test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: add_decimal: - // arc4_types/structs.py:68-69 + // arc4_types/structs.py:86-87 // @subroutine // def add_decimal(x: Decimal, y: Decimal) -> Decimal: proto 2 1 - // arc4_types/structs.py:70 + // arc4_types/structs.py:88 // return Decimal.from_bytes(op.itob(op.btoi(x.bytes) + op.btoi(y.bytes))) frame_dig -2 btoi @@ -192,28 +261,28 @@ add_decimal: // test_cases.arc4_types.structs.check(flags: bytes) -> bytes: check: - // arc4_types/structs.py:54-55 + // arc4_types/structs.py:72-73 // @subroutine // def check(flags: Flags) -> None: proto 1 1 - // arc4_types/structs.py:56 + // arc4_types/structs.py:74 // assert flags.a.native frame_dig -1 intc_0 // 0 getbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 uncover 2 setbit intc_0 // 0 getbit assert - // arc4_types/structs.py:57 + // arc4_types/structs.py:75 // assert not flags.b.native frame_dig -1 intc_2 // 1 getbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 uncover 2 setbit @@ -221,24 +290,24 @@ check: getbit ! assert - // arc4_types/structs.py:58 + // arc4_types/structs.py:76 // assert flags.c.native frame_dig -1 intc_3 // 2 getbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 uncover 2 setbit intc_0 // 0 getbit assert - // arc4_types/structs.py:59 + // arc4_types/structs.py:77 // assert not flags.d.native frame_dig -1 pushint 3 // 3 getbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 uncover 2 setbit @@ -252,11 +321,11 @@ check: // test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: nested_decode: - // arc4_types/structs.py:62-63 + // arc4_types/structs.py:80-81 // @subroutine // def nested_decode(vector_flags: VectorFlags) -> None: proto 1 1 - // arc4_types/structs.py:64 + // arc4_types/structs.py:82 // assert vector_flags.vector.x.bytes == op.itob(35382882839) frame_dig -1 intc_0 // 0 @@ -269,7 +338,7 @@ nested_decode: itob == assert - // arc4_types/structs.py:65 + // arc4_types/structs.py:83 // assert vector_flags.flags.c.native frame_dig -1 pushint 16 // 16 @@ -277,7 +346,7 @@ nested_decode: extract3 // on error: Index access is out of bounds intc_3 // 2 getbit - bytec_0 // 0x00 + bytec_1 // 0x00 intc_0 // 0 uncover 2 setbit diff --git a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.clear.teal b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.clear.teal index 21aa8f0f49..f841c9a5e6 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.clear.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program: - // arc4_types/structs.py:43 + // arc4_types/structs.py:61 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir index 44b2022ef3..b870eab381 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir +++ b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir @@ -1,7 +1,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program approval: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program() -> bool: - block@0: // L26 + block@0: // L35 let encoded_tuple_buffer%1#0: bytes = (concat 0x 0x000000083cfbf217) let encoded_tuple_buffer%2#0: bytes = (concat encoded_tuple_buffer%1#0 0x000000230384b842) let coord_1#0: bytes = encoded_tuple_buffer%2#0 @@ -17,16 +17,16 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let loop_counter%0#0: uint64 = 0u let val#0: bytes = tmp%0#0 goto block@1 - block@1: // for_body_L31 + block@1: // for_body_L40 (log val#0) goto block@2 - block@2: // for_footer_L30 + block@2: // for_footer_L39 goto_nth [block@3][loop_counter%0#0] else goto block@4 - block@3: // for_header_1_L30 + block@3: // for_header_1_L39 let loop_counter%0#0: uint64 = 1u let val#0: bytes = tmp%1#0 goto block@1 - block@4: // after_for_L30 + block@4: // after_for_L39 let encoded_bool%0#0: bytes = (setbit 0x00 0u 1u) let encoded_bool%1#0: bytes = (setbit 0x00 0u 0u) let encoded_bool%2#0: bytes = (setbit 0x00 0u 1u) @@ -49,10 +49,44 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let encoded_tuple_buffer%12#0: bytes = (concat 0x copy%3#0) let encoded_tuple_buffer%13#0: bytes = (concat encoded_tuple_buffer%12#0 copy%4#0) let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) + let length%0#0: uint64 = (len 0x) + let as_bytes%0#0: bytes = (itob length%0#0) + let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let encoded_value%0#0: bytes = (concat length_uint16%0#0 0x) + let as_bytes%1#0: bytes = (itob 2u) + let offset_as_uint16%0#0: bytes = ((extract 6 2) as_bytes%1#0) + let encoded_tuple_buffer%15#0: bytes = (concat 0x offset_as_uint16%0#0) + let encoded_tuple_buffer%16#0: bytes = (concat encoded_tuple_buffer%15#0 encoded_value%0#0) + let mutable#0: bytes = encoded_tuple_buffer%16#0 + let copy%5#0: bytes = mutable#0 + let copy#0: bytes = copy%5#0 + let item_start_offset%0#0: uint64 = (extract_uint16 copy#0 0u) + let item_end_offset%0#0: uint64 = (len copy#0) + let tmp%3#0: bytes = (substring3 copy#0 item_start_offset%0#0 item_end_offset%0#0) + let expr_value_trimmed%0#0: bytes = ((extract 2 0) tmp%3#0) + let data%0#0: bytes = (concat 0x 0x2a) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%2#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let assigned_value%0#0: bytes = concat_result%0#0 + let item_offset%0#0: uint64 = (extract_uint16 copy#0 0u) + let data_up_to_item%0#0: bytes = (extract3 copy#0 0u item_offset%0#0) + let updated_data%0#0: bytes = (concat data_up_to_item%0#0 assigned_value%0#0) + let copy#0: bytes = updated_data%0#0 + let tmp%4#0: bool = (!= mutable#0 copy#0) + (assert tmp%4#0) // expected copy is different + let encoded_tuple_buffer%18#0: bytes = (concat 0x 0x000000000000000c) + let encoded_tuple_buffer%19#0: bytes = (concat encoded_tuple_buffer%18#0 0x0000000000000022) + let immutable#0: bytes = encoded_tuple_buffer%19#0 + let no_copy#0: bytes = immutable#0 + let tmp%5#0: bool = (== no_copy#0 immutable#0) + (assert tmp%5#0) return 1u subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : - block@0: // L46 + block@0: // L64 let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -64,7 +98,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return encoded_tuple_buffer%2#0 v1#0 v2#0 subroutine test_cases.arc4_types.structs.add_decimal(x: bytes, y: bytes) -> bytes: - block@0: // L68 + block@0: // L86 let tmp%0#0: uint64 = (btoi x#0) let tmp%1#0: uint64 = (btoi y#0) let tmp%2#0: uint64 = (+ tmp%0#0 tmp%1#0) @@ -72,7 +106,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return tmp%3#0 subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: - block@0: // L54 + block@0: // L72 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -94,7 +128,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: return flags#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: - block@0: // L62 + block@0: // L80 let tmp%0#0: bytes = (extract3 vector_flags#0 0u 16u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 tmp%0#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -109,5 +143,5 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: - block@0: // L42 + block@0: // L60 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/puya.log b/test_cases/arc4_types/puya.log index 17157a5a81..570b904069 100644 --- a/test_cases/arc4_types/puya.log +++ b/test_cases/arc4_types/puya.log @@ -522,48 +522,48 @@ debug: Replaced trivial Phi node: let my_tuple#1: bytes = φ(my_tuple#0 <- block debug: Terminated block@13: // bool_merge_L40 debug: Sealing block@0: // L51 debug: Terminated block@0: // L51 -debug: Sealing block@0: // L25 -debug: Terminated block@0: // L25 -debug: Sealing block@1: // abi_routing_L25 -debug: Terminated block@1: // abi_routing_L25 -debug: Sealing block@2: // bare_routing_L25 -debug: Terminated block@2: // bare_routing_L25 -debug: Sealing block@3: // after_if_else_L25 -debug: Terminated block@3: // after_if_else_L25 -debug: Sealing block@0: // L46 -debug: Terminated block@0: // L46 -debug: Sealing block@0: // L68 -debug: Terminated block@0: // L68 -debug: Sealing block@0: // L54 -debug: Terminated block@0: // L54 -debug: Sealing block@0: // L62 -debug: Terminated block@0: // L62 -debug: Sealing block@0: // L26 -debug: Terminated block@0: // L26 -debug: Looking for 'loop_counter%0' in an unsealed block creating an incomplete Phi: block@1: // for_body_L31 -debug: Created Phi assignment: let loop_counter%0#1: uint64 = undefined while trying to resolve 'loop_counter%0' in block@1: // for_body_L31 -debug: Looking for 'val' in an unsealed block creating an incomplete Phi: block@1: // for_body_L31 -debug: Created Phi assignment: let val#1: bytes = undefined while trying to resolve 'val' in block@1: // for_body_L31 -debug: Terminated block@1: // for_body_L31 -debug: Sealing block@2: // for_footer_L30 -debug: Terminated block@2: // for_footer_L30 -debug: Sealing block@3: // for_header_1_L30 -debug: Terminated block@3: // for_header_1_L30 -debug: Sealing block@1: // for_body_L31 -debug: Added loop_counter%0#0 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0) in block@0: // L26 -debug: Added loop_counter%0#2 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) in block@3: // for_header_1_L30 -debug: Added val#0 to Phi node: let val#1: bytes = φ(val#0 <- block@0) in block@0: // L26 -debug: Added val#2 to Phi node: let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) in block@3: // for_header_1_L30 -debug: Sealing block@4: // after_for_L30 -debug: Created Phi assignment: let coord_1#1: bytes = undefined while trying to resolve 'coord_1' in block@1: // for_body_L31 -debug: Added coord_1#0 to Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0) in block@0: // L26 -debug: Added coord_1#1 to Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0, coord_1#1 <- block@3) in block@3: // for_header_1_L30 +debug: Sealing block@0: // L34 +debug: Terminated block@0: // L34 +debug: Sealing block@1: // abi_routing_L34 +debug: Terminated block@1: // abi_routing_L34 +debug: Sealing block@2: // bare_routing_L34 +debug: Terminated block@2: // bare_routing_L34 +debug: Sealing block@3: // after_if_else_L34 +debug: Terminated block@3: // after_if_else_L34 +debug: Sealing block@0: // L64 +debug: Terminated block@0: // L64 +debug: Sealing block@0: // L86 +debug: Terminated block@0: // L86 +debug: Sealing block@0: // L72 +debug: Terminated block@0: // L72 +debug: Sealing block@0: // L80 +debug: Terminated block@0: // L80 +debug: Sealing block@0: // L35 +debug: Terminated block@0: // L35 +debug: Looking for 'loop_counter%0' in an unsealed block creating an incomplete Phi: block@1: // for_body_L40 +debug: Created Phi assignment: let loop_counter%0#1: uint64 = undefined while trying to resolve 'loop_counter%0' in block@1: // for_body_L40 +debug: Looking for 'val' in an unsealed block creating an incomplete Phi: block@1: // for_body_L40 +debug: Created Phi assignment: let val#1: bytes = undefined while trying to resolve 'val' in block@1: // for_body_L40 +debug: Terminated block@1: // for_body_L40 +debug: Sealing block@2: // for_footer_L39 +debug: Terminated block@2: // for_footer_L39 +debug: Sealing block@3: // for_header_1_L39 +debug: Terminated block@3: // for_header_1_L39 +debug: Sealing block@1: // for_body_L40 +debug: Added loop_counter%0#0 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0) in block@0: // L35 +debug: Added loop_counter%0#2 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) in block@3: // for_header_1_L39 +debug: Added val#0 to Phi node: let val#1: bytes = φ(val#0 <- block@0) in block@0: // L35 +debug: Added val#2 to Phi node: let val#1: bytes = φ(val#0 <- block@0, val#2 <- block@3) in block@3: // for_header_1_L39 +debug: Sealing block@4: // after_for_L39 +debug: Created Phi assignment: let coord_1#1: bytes = undefined while trying to resolve 'coord_1' in block@1: // for_body_L40 +debug: Added coord_1#0 to Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0) in block@0: // L35 +debug: Added coord_1#1 to Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0, coord_1#1 <- block@3) in block@3: // for_header_1_L39 debug: Replacing trivial Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0, coord_1#1 <- block@3) (coord_1#1) with coord_1#0 debug: Deleting Phi assignment: let coord_1#1: bytes = φ(coord_1#0 <- block@0, coord_1#1 <- block@3) debug: Replaced trivial Phi node: let coord_1#1: bytes = φ(coord_1#0 <- block@0, coord_1#1 <- block@3) (coord_1#1) with coord_1#0 in current definition for 3 blocks -debug: Terminated block@4: // after_for_L30 -debug: Sealing block@0: // L42 -debug: Terminated block@0: // L42 +debug: Terminated block@4: // after_for_L39 +debug: Sealing block@0: // L60 +debug: Terminated block@0: // L60 debug: Sealing block@0: // L6 debug: Terminated block@0: // L6 debug: Sealing block@1: // abi_routing_L6 @@ -2572,6 +2572,14 @@ debug: Found equivalence set: encoded_tuple_buffer%10#0, flags#0, copy%2#0, copy debug: Replacing {encoded_tuple_buffer%10#0, copy%2#0, copy%4#0} with flags#0 made 3 modifications debug: Found equivalence set: check%0#0, copy%2#1 debug: Found equivalence set: nested_decode%0#0, encoded_tuple_buffer%13#1 +debug: Found equivalence set: encoded_tuple_buffer%16#0, mutable#0, copy%5#0, copy#0 +debug: Replacing {encoded_tuple_buffer%16#0, copy%5#0, copy#0} with mutable#0 made 6 modifications +debug: Found equivalence set: concat_result%0#0, assigned_value%0#0 +debug: Replacing {assigned_value%0#0} with concat_result%0#0 made 1 modifications +debug: Found equivalence set: updated_data%0#0, copy#1 +debug: Replacing {updated_data%0#0} with copy#1 made 1 modifications +debug: Found equivalence set: encoded_tuple_buffer%19#0, immutable#0, no_copy#0 +debug: Replacing {encoded_tuple_buffer%19#0, no_copy#0} with immutable#0 made 2 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (concat 0x 0x000000083cfbf217) to 0x000000083cfbf217 debug: Simplified (concat 0x 0x000000083cfbf217) to 0x000000083cfbf217 @@ -2584,6 +2592,13 @@ debug: Simplified (setbit 0x00 0u 0u) to 0x00 debug: Simplified (concat 0x encoded_bool%0#0) to encoded_bool%0#0 debug: Simplified (== coord_1#0 coord_1#0) to 1u debug: Simplified (concat 0x coord_1#0) to coord_1#0 +debug: Simplified (len 0x) to 0u +debug: Simplified (concat length_uint16%0#0 0x) to length_uint16%0#0 +debug: Simplified ((extract 6 2) as_bytes%1#0) to 0x0002 +debug: Simplified (concat 0x offset_as_uint16%0#0) to offset_as_uint16%0#0 +debug: Simplified (concat 0x 0x2a) to 0x2a +debug: Simplified (concat 0x 0x000000000000000c) to 0x000000000000000c +debug: Simplified (== immutable#0 immutable#0) to 1u debug: Optimizer: Remove Unused Variables debug: Removing unused variable current_tail_offset%0#0 debug: Removing unused variable encoded_tuple_buffer%0#0 @@ -2595,18 +2610,36 @@ debug: Not removing unused assignment since source is not marked as pure: let ch debug: Removing unused variable current_tail_offset%3#0 debug: Removing unused variable encoded_tuple_buffer%11#0 debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable current_tail_offset%4#0 +debug: Removing unused variable encoded_tuple_buffer%14#0 +debug: Removing unused variable as_bytes%1#0 +debug: Removing unused variable current_tail_offset%5#0 +debug: Removing unused variable current_tail_offset%6#0 +debug: Removing unused variable encoded_tuple_buffer%17#0 +debug: Removing unused variable immutable#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: simplifying a goto nth with two targets into a conditional branch -debug: simplified terminator of block@2: // for_footer_L30 from goto_nth [block@3][loop_counter%0#1] else goto block@4 to goto loop_counter%0#1 ? block@4 : block@3 +debug: simplified terminator of block@2: // for_footer_L39 from goto_nth [block@3][loop_counter%0#1] else goto block@4 to goto loop_counter%0#1 ? block@4 : block@3 debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@2: // for_footer_L30 with block@1: // for_body_L31 in block@3: // for_header_1_L30 -debug: Replaced predecessor block@2: // for_footer_L30 with block@1: // for_body_L31 in block@4: // after_for_L30 -debug: Merged linear block@2: // for_footer_L30 into block@1: // for_body_L31 +debug: Replaced predecessor block@2: // for_footer_L39 with block@1: // for_body_L40 in block@3: // for_header_1_L39 +debug: Replaced predecessor block@2: // for_footer_L39 with block@1: // for_body_L40 in block@4: // after_for_L39 +debug: Merged linear block@2: // for_footer_L39 into block@1: // for_body_L40 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination +debug: Replacing redundant declaration let item_offset%0#0: uint64 = (extract_uint16 mutable#0 0u) with copy of existing registers (Register(source_location=arc4_types/structs.py:51:8-20, ir_type=uint64, name='item_start_offset%0', version=0),) +debug: Found equivalence set: encoded_bool%0#0, encoded_tuple_buffer%7#0 +debug: Replacing {encoded_tuple_buffer%7#0} with encoded_bool%0#0 made 1 modifications +debug: Found equivalence set: coord_1#0, encoded_tuple_buffer%12#0 +debug: Replacing {encoded_tuple_buffer%12#0} with coord_1#0 made 1 modifications +debug: Found equivalence set: length_uint16%0#0, encoded_value%0#0 +debug: Replacing {encoded_value%0#0} with length_uint16%0#0 made 2 modifications +debug: Found equivalence set: offset_as_uint16%0#0, encoded_tuple_buffer%15#0 +debug: Replacing {encoded_tuple_buffer%15#0} with offset_as_uint16%0#0 made 1 modifications +debug: Found equivalence set: item_start_offset%0#0, item_offset%0#0 +debug: Replacing {item_offset%0#0} with item_start_offset%0#0 made 1 modifications debug: Optimizer: Remove Calls To No Op Subroutines debug: Optimizing subroutine test_cases.arc4_types.structs.add debug: Splitting parallel copies prior to optimization @@ -2693,14 +2726,13 @@ debug: Begin optimization pass 2/100 debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: coord_1#0, encoded_tuple_buffer%12#0 -debug: Replacing {encoded_tuple_buffer%12#0} with coord_1#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (concat 0x000000083cfbf217 0x000000230384b842) to 0x000000083cfbf217000000230384b842 debug: Simplified (concat 0x000000083cfbf217 0x000000230384b842) to 0x000000083cfbf217000000230384b842 debug: Simplified (getbit 0x00 0u) to 0u debug: Simplified (getbit 0x80 0u) to 1u debug: Simplified (getbit 0x00 0u) to 0u +debug: Simplified ((extract 6 2) as_bytes%0#0) to 0x0000 debug: Optimizer: Remove Unused Variables debug: Removing unused variable encoded_tuple_buffer%1#0 debug: Removing unused variable encoded_tuple_buffer%4#0 @@ -2708,10 +2740,16 @@ debug: Removing unused variable encoded_bool%0#0 debug: Removing unused variable encoded_bool%1#0 debug: Removing unused variable encoded_bool%2#0 debug: Removing unused variable encoded_bool%3#0 -debug: Removing unused variable encoded_tuple_buffer%7#0 debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) debug: Removing unused variable tmp%2#0 debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable length%0#0 +debug: Removing unused variable as_bytes%0#0 +debug: Removing unused variable offset_as_uint16%0#0 +debug: Removing unused variable data_length%0#0 +debug: Removing unused variable data%0#0 +debug: Removing unused variable encoded_tuple_buffer%18#0 +debug: Removing unused variable tmp%5#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -2794,6 +2832,7 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (setbit 0x80 1u 0u) to 0x80 +debug: Simplified (concat 0x0002 0x0000) to 0x00020000 debug: Optimizer: Remove Unused Variables debug: Removing unused variable coord_1#0 debug: Removing unused variable coord_2#0 @@ -2802,6 +2841,7 @@ debug: Removing unused variable is_true%1#0 debug: Removing unused variable is_true%2#0 debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable length_uint16%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -2882,10 +2922,13 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (setbit 0x80 2u 1u) to 0xa0 +debug: Simplified (extract_uint16 0x00020000 0u) to 2u +debug: Simplified (len 0x00020000) to 4u debug: Optimizer: Remove Unused Variables debug: Removing unused variable encoded_tuple_buffer%8#0 debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable mutable#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -2966,10 +3009,14 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (setbit 0xa0 3u 0u) to 0xa0 +debug: Simplified (substring3 0x00020000 2u 4u) to 0x0000 +debug: Simplified (extract3 0x00020000 0u 2u) to 0x0002 debug: Optimizer: Remove Unused Variables debug: Removing unused variable encoded_tuple_buffer%9#0 debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(flags#0) debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable item_start_offset%0#0 +debug: Removing unused variable item_end_offset%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -3050,10 +3097,13 @@ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (concat 0x000000083cfbf217000000230384b842 0xa0) to 0x000000083cfbf217000000230384b842a0 +debug: Simplified ((extract 2 0) 0x0000) to 0x debug: Optimizer: Remove Unused Variables debug: Removing unused variable flags#0 debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(encoded_tuple_buffer%13#0) +debug: Removing unused variable tmp%3#0 +debug: Removing unused variable data_up_to_item%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -3133,10 +3183,12 @@ debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContra debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x 0x2a) to 0x2a debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) debug: Removing unused variable encoded_tuple_buffer%13#0 debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable expr_value_trimmed%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -3216,9 +3268,11 @@ debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContra debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (len 0x2a) to 1u debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable concatenated%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -3292,7 +3346,509 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: No optimizations performed in pass 8, ending loop +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_8.ir +debug: Begin optimization pass 9/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified ((extract 6 2) as_bytes%2#0) to 0x0001 +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable len_%0#0 +debug: Removing unused variable as_bytes%2#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_9.ir +debug: Begin optimization pass 10/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0001 0x2a) to 0x00012a +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable len_16_bit%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_10.ir +debug: Begin optimization pass 11/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0002 0x00012a) to 0x000200012a +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable concat_result%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_11.ir +debug: Begin optimization pass 12/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (!= 0x00020000 0x000200012a) to 1u +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable copy#1 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_12.ir +debug: Begin optimization pass 13/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Removing unused variable tmp%4#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4StructsTypeContract.ssa.opt_pass_13.ir +debug: Begin optimization pass 14/100 +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Not removing unused assignment since source is not marked as pure: let check%0#0: bytes = test_cases.arc4_types.structs.check(0xa0) +debug: Not removing unused assignment since source is not marked as pure: let nested_decode%0#0: bytes = test_cases.arc4_types.structs.nested_decode(0x000000083cfbf217000000230384b842a0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.add_decimal +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.check +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: No optimizations performed in pass 14, ending loop debug: Removing Phis from test_cases.arc4_types.structs.Arc4StructsTypeContract.approval_program debug: Removing Phis from test_cases.arc4_types.structs.add debug: Removing Phis from test_cases.arc4_types.structs.add_decimal diff --git a/test_cases/arc4_types/structs.py b/test_cases/arc4_types/structs.py index 1e001e3de2..8302351fbf 100644 --- a/test_cases/arc4_types/structs.py +++ b/test_cases/arc4_types/structs.py @@ -22,6 +22,15 @@ class VectorFlags(arc4.Struct): flags: Flags +class FrozenButMutable(arc4.Struct, frozen=True): + mutable: arc4.DynamicBytes + + +class FrozenAndImmutable(arc4.Struct, frozen=True): + one: arc4.UInt64 + two: arc4.UInt64 + + class Arc4StructsTypeContract(Contract): def approval_program(self) -> bool: coord_1 = Vector(x=Decimal("35.382882839"), y=Decimal("150.382884930")) @@ -37,6 +46,15 @@ def approval_program(self) -> bool: nested_decode(VectorFlags(coord_1.copy(), flags.copy())) + mutable = FrozenButMutable(arc4.DynamicBytes()) + copy = mutable.copy() + copy.mutable.append(arc4.Byte(42)) + assert mutable != copy, "expected copy is different" + + immutable = FrozenAndImmutable(arc4.UInt64(12), arc4.UInt64(34)) + no_copy = immutable + assert no_copy == immutable + return True def clear_state_program(self) -> bool: diff --git a/tests/test_expected_output/arc4.test b/tests/test_expected_output/arc4.test index 6b1855548f..cce1cac803 100644 --- a/tests/test_expected_output/arc4.test +++ b/tests/test_expected_output/arc4.test @@ -212,6 +212,11 @@ class Arc4CopyContract(arc4.ARC4Contract): ## case: copy_arc4_struct from algopy import GlobalState, LocalState, Txn, arc4, subroutine, uenumerate +class FrozenMutable(arc4.Struct, frozen=True): + mutable: arc4.DynamicBytes + +class FrozenImmutable(arc4.Struct, frozen=True): + number: arc4.UInt64 class InnerStruct(arc4.Struct): number: arc4.UInt64 @@ -240,6 +245,18 @@ def method_outer(outer: OuterStruct) -> None: def method_tup(tup: tuple[InnerStruct, bool]) -> None: pass +@subroutine +def method_mutable_struct(mut: FrozenMutable) -> None: + pass + +@subroutine +def method_immutable_struct(mut: FrozenImmutable) -> None: + pass + +@subroutine +def method_immutable(tup: tuple[InnerStruct, bool]) -> None: + pass + @subroutine def new_inner() -> InnerStruct: return InnerStruct(number=arc4.UInt64(1)) @@ -257,6 +274,9 @@ class Arc4StructCopyTests(arc4.ARC4Contract): self.global_inner = InnerStruct(number=arc4.UInt64(1)) self.global_outer = OuterStruct(number=arc4.UInt64(2), inner=InnerStruct(number=arc4.UInt64(3))) self.global_proxy = GlobalState(OuterStruct(number=arc4.UInt64(1), inner=InnerStruct(number=arc4.UInt64(2)))) + self.global_mutable = FrozenMutable(arc4.DynamicBytes()) + self.global_immutable = FrozenImmutable(arc4.UInt64(42)) + self.global_mutable_proxy = GlobalState(FrozenMutable(arc4.DynamicBytes())) self.local = LocalState(OuterStruct) @arc4.abimethod @@ -264,10 +284,14 @@ class Arc4StructCopyTests(arc4.ARC4Contract): # **INIT** var_inner = InnerStruct(number=arc4.UInt64(4)) var_outer = OuterStruct(number=arc4.UInt64(5), inner=InnerStruct(number=arc4.UInt64(6))) + var_mutable_struct = FrozenMutable(arc4.DynamicBytes()) + var_immutable_struct = FrozenImmutable(arc4.UInt64(12)) number = arc4.UInt64(42) bad_outer_from_locals = OuterStruct(number, var_inner) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a struct constructor ok_outer_from_locals = OuterStruct(number, var_inner.copy()) + ok_immutable = var_immutable_struct + ok_mutable = var_mutable_struct.copy() # **FUNCTION LOCALS** bad_inner = var_inner ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being assigned to another variable @@ -284,6 +308,14 @@ class Arc4StructCopyTests(arc4.ARC4Contract): method_num(var_outer.number) method_num(var_outer.inner.number) + method_mutable_struct(var_mutable_struct) + method_mutable_struct(var_mutable_struct.copy()) + method_immutable_struct(var_immutable_struct) + method_mutable_struct(self.global_mutable) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a subroutine from state + method_mutable_struct(self.global_mutable_proxy.value) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a subroutine from state + method_mutable_struct(self.global_mutable_proxy.value.copy()) + method_immutable_struct(self.global_immutable) + method_inner(var_outer.inner) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a subroutine method_inner(var_outer.inner.copy()) @@ -315,6 +347,10 @@ class Arc4StructCopyTests(arc4.ARC4Contract): bol = self.global_proxy.maybe()[1] bad_outer = self.global_proxy.get(new_outer()) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being assigned to another variable var_outer = self.global_proxy.get(new_outer()).copy() + bad_mutable = self.global_mutable ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being assigned to another variable + bad_mutable = self.global_mutable.copy() + bad_mutable = self.global_mutable_proxy.value ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being assigned to another variable + bad_mutable = self.global_mutable_proxy.value.copy() method_outer(self.local[Txn.sender]) ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a subroutine from state method_outer(self.local[Txn.sender].copy()) From 0c555a4be45de453462586f71f068f878976f5b1 Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Wed, 30 Oct 2024 15:33:43 +0800 Subject: [PATCH 3/8] fix: passing a mutable value more than once to a subroutine will now raise an error as allowing it would break semantic compatability BREAKING CHANGE: passing a mutable value more than once to a subroutine causes an error --- src/puya/ir/builder/callsub.py | 8 ++++++++ tests/test_expected_output/arc4.test | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/puya/ir/builder/callsub.py b/src/puya/ir/builder/callsub.py index d0c65c3bbd..96f838a900 100644 --- a/src/puya/ir/builder/callsub.py +++ b/src/puya/ir/builder/callsub.py @@ -2,6 +2,7 @@ import attrs +from puya import log from puya.awst import ( nodes as awst_nodes, wtypes, @@ -13,6 +14,8 @@ from puya.ir.models import InvokeSubroutine, Register, Subroutine, Value, ValueProvider, ValueTuple from puya.parse import SourceLocation +logger = log.get_logger(__name__) + def visit_subroutine_call_expression( context: IRFunctionBuildContext, expr: awst_nodes.SubroutineCallExpression @@ -46,6 +49,11 @@ def _call_subroutine( arg_val = arg_lookup.get(index=idx, param_name=param.name) resolved_args.append(arg_val) if param.implicit_return: + if arg_val in implicit_args: + logger.error( + "mutable values cannot be passed more than once to a subroutine", + location=arg_val.source_location, + ) implicit_args.append(arg_val) if not arg_lookup.is_empty: raise CodeError("function call arguments do not match signature", call_location) from None diff --git a/tests/test_expected_output/arc4.test b/tests/test_expected_output/arc4.test index cce1cac803..0303692039 100644 --- a/tests/test_expected_output/arc4.test +++ b/tests/test_expected_output/arc4.test @@ -589,3 +589,21 @@ class MyTest(ARC4Contract): this_is_ok = some_address[0] assert this_is_ok == 0 some_address[0] = arc4.Byte(123) ## E: expression is not valid as an assignment target - object is immutable + +## case: test_mutable_params_passed_only_once +from algopy import * + +class MyTest(ARC4Contract): + @arc4.abimethod + def test(self) -> None: + my_array = arc4.DynamicBytes() + self.double_use_not_allowed(my_array, my_array) ## E: mutable values cannot be passed more than once to a subroutine + # if we allowed this, the following would fail + assert my_array[0] == 42 + assert my_array[1] == 43 + + + @subroutine + def double_use_not_allowed(self, arr1: arc4.DynamicBytes, arr2: arc4.DynamicBytes) -> None: + arr1.append(arc4.Byte(42)) + arr2.append(arc4.Byte(43)) From 21ad4a5429bab29790332f7782aa9b93233f245a Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Wed, 30 Oct 2024 17:44:32 +0800 Subject: [PATCH 4/8] fix: use read location for variable source locations, rather than where the variable was last defined --- .../ConstantProductAMM.approval.teal | 8 +- .../out_unoptimized/Auction.approval.teal | 8 +- .../VotingRoundApp.approval.teal | 4 +- src/puya/ir/builder/main.py | 1 + .../HelloFactory.approval.teal | 63 +----- .../CreateAndTransferContract.approval.teal | 5 +- .../out_unoptimized/Greeter.approval.teal | 4 +- .../out_unoptimized/MyContract.approval.teal | 4 +- .../out_unoptimized/itxn_loop.approval.teal | 16 +- .../out_unoptimized/Greeter.approval.teal | 198 ++++-------------- .../out_unoptimized/Caller.approval.teal | 16 +- 11 files changed, 74 insertions(+), 253 deletions(-) diff --git a/examples/amm/out_unoptimized/ConstantProductAMM.approval.teal b/examples/amm/out_unoptimized/ConstantProductAMM.approval.teal index 354b2c25e9..514bb3a8b5 100644 --- a/examples/amm/out_unoptimized/ConstantProductAMM.approval.teal +++ b/examples/amm/out_unoptimized/ConstantProductAMM.approval.teal @@ -588,10 +588,14 @@ do_asset_transfer: // asset_receiver=receiver, // ).submit() itxn_begin - // amm/contract.py:357 - // def do_asset_transfer(*, receiver: Account, asset: Asset, amount: UInt64) -> None: + // amm/contract.py:359 + // xfer_asset=asset, frame_dig -2 + // amm/contract.py:360 + // asset_amount=amount, frame_dig -1 + // amm/contract.py:361 + // asset_receiver=receiver, frame_dig -3 itxn_field AssetReceiver itxn_field AssetAmount diff --git a/examples/auction/out_unoptimized/Auction.approval.teal b/examples/auction/out_unoptimized/Auction.approval.teal index 54fb19cbf3..69e38d504b 100644 --- a/examples/auction/out_unoptimized/Auction.approval.teal +++ b/examples/auction/out_unoptimized/Auction.approval.teal @@ -270,8 +270,8 @@ opt_into_asset: // auction/contract.py:36 // asset_receiver=Global.current_application_address, global CurrentApplicationAddress - // auction/contract.py:26 - // def opt_into_asset(self, asset: Asset) -> None: + // auction/contract.py:37 + // xfer_asset=asset, frame_dig -1 itxn_field XferAsset itxn_field AssetReceiver @@ -525,8 +525,8 @@ claim_asset: // asset_amount=self.asa_amount, // ).submit() itxn_begin - // auction/contract.py:98 - // def claim_asset(self, asset: Asset) -> None: + // auction/contract.py:102 + // xfer_asset=asset, frame_dig -1 // auction/contract.py:103 // asset_close_to=self.previous_bidder, diff --git a/examples/voting/out_unoptimized/VotingRoundApp.approval.teal b/examples/voting/out_unoptimized/VotingRoundApp.approval.teal index 5914b2483a..3afa713aca 100644 --- a/examples/voting/out_unoptimized/VotingRoundApp.approval.teal +++ b/examples/voting/out_unoptimized/VotingRoundApp.approval.teal @@ -808,8 +808,8 @@ close_after_for@14: bytec 13 // "nft_image_url" app_global_get_ex assert // check self.nft_image_url exists - // voting/voting.py:144 - // note += "]}}" + // voting/voting.py:153 + // note=note, uncover 2 itxn_field Note itxn_field ConfigAssetURL diff --git a/src/puya/ir/builder/main.py b/src/puya/ir/builder/main.py index 0beca9cb35..f458714df3 100644 --- a/src/puya/ir/builder/main.py +++ b/src/puya/ir/builder/main.py @@ -470,6 +470,7 @@ def visit_var_expression(self, expr: awst_nodes.VarExpression) -> TExpression: variable = self.context.ssa.read_variable( expr.name, ir_type, self.context.block_builder.active_block ) + variable = attrs.evolve(variable, source_location=expr.source_location) return variable def visit_intrinsic_call(self, call: awst_nodes.IntrinsicCall) -> TExpression: diff --git a/test_cases/compile/out_unoptimized/HelloFactory.approval.teal b/test_cases/compile/out_unoptimized/HelloFactory.approval.teal index 59761bba14..8aefcf6e52 100644 --- a/test_cases/compile/out_unoptimized/HelloFactory.approval.teal +++ b/test_cases/compile/out_unoptimized/HelloFactory.approval.teal @@ -370,8 +370,8 @@ test_compile_contract: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:35 - // hello_app = ( + // compile/factory.py:49 + // app_id=hello_app, swap itxn_field ApplicationID // compile/factory.py:48 @@ -550,8 +550,8 @@ test_compile_contract_tmpl: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:67 - // hello_app = ( + // compile/factory.py:84 + // app_id=hello_app, swap itxn_field ApplicationID // compile/factory.py:83 @@ -715,8 +715,8 @@ test_compile_contract_prfx: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:103 - // hello_app = ( + // compile/factory.py:117 + // app_id=hello_app, swap itxn_field ApplicationID // compile/factory.py:116 @@ -992,14 +992,8 @@ test_arc4_create: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:163-164 - // # create app - // hello_app = arc4.arc4_create(Hello.create, "hello").created_app swap itxn_field ApplicationID - // compile/factory.py:166-167 - // # call the new app - // result, _txn = arc4.abi_call(Hello.greet, "world", app_id=hello_app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1101,13 +1095,8 @@ test_arc4_create_tmpl: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:182 - // hello_app = arc4.arc4_create( swap itxn_field ApplicationID - // compile/factory.py:187-188 - // # call the new app - // result, _txn = arc4.abi_call(HelloTmpl.greet, "world", app_id=hello_app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1211,13 +1200,8 @@ test_arc4_create_prfx: extract 6 2 bytec_3 // "world" concat - // compile/factory.py:205 - // hello_app = arc4.arc4_create( swap itxn_field ApplicationID - // compile/factory.py:210-211 - // # call the new app - // result, _txn = arc4.abi_call(HelloPrfx.greet, "world", app_id=hello_app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1448,12 +1432,8 @@ test_arc4_create_modified_compiled: extract 6 2 bytec 6 // "there" concat - // compile/factory.py:246 - // app = arc4.arc4_create( swap itxn_field ApplicationID - // compile/factory.py:257 - // result, _txn = arc4.abi_call(Hello.greet, "there", app_id=app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1589,14 +1569,8 @@ test_arc4_update: extract 6 2 bytec 6 // "there" concat - // compile/factory.py:266-267 - // # create app - // app = arc4.arc4_create( swap itxn_field ApplicationID - // compile/factory.py:280-281 - // # call the new app - // result, _txn = arc4.abi_call(HelloTmpl.greet, "there", app_id=app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1623,13 +1597,7 @@ test_arc4_update: // # update the app // arc4.arc4_update(Hello, app_id=app) itxn_begin - // compile/factory.py:266-267 - // # create app - // app = arc4.arc4_create( frame_dig 0 - // compile/factory.py:284-285 - // # update the app - // arc4.arc4_update(Hello, app_id=app) bytec_2 // base64(CoEBQw==) itxn_field ClearStateProgramPages bytec_0 // 0x @@ -1656,14 +1624,8 @@ test_arc4_update: extract 6 2 bytec 6 // "there" concat - // compile/factory.py:266-267 - // # create app - // app = arc4.arc4_create( frame_dig 0 itxn_field ApplicationID - // compile/factory.py:287-288 - // # call the updated app - // result, _txn = arc4.abi_call(Hello.greet, "there", app_id=app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1694,9 +1656,8 @@ test_arc4_update: // # on_complete is inferred from Hello.delete ARC4 definition // ) itxn_begin - // compile/factory.py:266-267 - // # create app - // app = arc4.arc4_create( + // compile/factory.py:294 + // app_id=app, frame_dig 0 // compile/factory.py:291-296 // # delete the app @@ -1805,12 +1766,8 @@ test_other_constants: extract 6 2 bytec 21 // "Johnny" concat - // compile/factory.py:300 - // app = arc4.arc4_create( swap itxn_field ApplicationID - // compile/factory.py:315 - // result, _txn = arc4.abi_call(HelloOtherConstants.greet, "Johnny", app_id=app) pushbytes 0x5b0c2375 // method "greet(string)byte[]" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1940,12 +1897,8 @@ test_abi_call_create_params: extract 6 2 bytec 6 // "there" concat - // compile/factory.py:327 - // app = arc4.abi_call( swap itxn_field ApplicationID - // compile/factory.py:339 - // result, _txn = arc4.abi_call(Hello.greet, "there", app_id=app) bytec 5 // method "greet(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs diff --git a/test_cases/inner_transactions/out_unoptimized/CreateAndTransferContract.approval.teal b/test_cases/inner_transactions/out_unoptimized/CreateAndTransferContract.approval.teal index b37a5e2e86..9ed5e50069 100644 --- a/test_cases/inner_transactions/out_unoptimized/CreateAndTransferContract.approval.teal +++ b/test_cases/inner_transactions/out_unoptimized/CreateAndTransferContract.approval.teal @@ -154,9 +154,8 @@ create_and_transfer: // inner_transactions/asset_transfer.py:30 // asset_receiver=Global.current_application_address, global CurrentApplicationAddress - // inner_transactions/asset_transfer.py:13-14 - // # create - // new_asset = ( + // inner_transactions/asset_transfer.py:32 + // xfer_asset=new_asset, swap itxn_field XferAsset // inner_transactions/asset_transfer.py:31 diff --git a/test_cases/inner_transactions/out_unoptimized/Greeter.approval.teal b/test_cases/inner_transactions/out_unoptimized/Greeter.approval.teal index 19787f2422..5cb8a11458 100644 --- a/test_cases/inner_transactions/out_unoptimized/Greeter.approval.teal +++ b/test_cases/inner_transactions/out_unoptimized/Greeter.approval.teal @@ -202,11 +202,9 @@ log_greetings: bytec_0 // "hello_app" app_global_get_ex assert // check self.hello_app exists - // inner_transactions/c2c.py:24 - // def log_greetings(self, name: arc4.String) -> None: - frame_dig -1 // inner_transactions/c2c.py:27 // app_args=(arc4.arc4_signature("hello(string)string"), name), + frame_dig -1 pushbytes 0x02bece11 // method "hello(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs diff --git a/test_cases/inner_transactions/out_unoptimized/MyContract.approval.teal b/test_cases/inner_transactions/out_unoptimized/MyContract.approval.teal index 73cbaa5315..40c7afedae 100644 --- a/test_cases/inner_transactions/out_unoptimized/MyContract.approval.teal +++ b/test_cases/inner_transactions/out_unoptimized/MyContract.approval.teal @@ -1148,8 +1148,8 @@ test4: // + Bytes(b"\x48") # pop // ) dupn 3 - // inner_transactions/contract.py:230 - // approval_2 = ( + // inner_transactions/contract.py:239 + // approval_program=(approval_1, approval_2, approval_2, approval_2), cover 2 cover 2 // inner_transactions/contract.py:245 diff --git a/test_cases/inner_transactions/out_unoptimized/itxn_loop.approval.teal b/test_cases/inner_transactions/out_unoptimized/itxn_loop.approval.teal index 716a4d969a..52b6a3e37e 100644 --- a/test_cases/inner_transactions/out_unoptimized/itxn_loop.approval.teal +++ b/test_cases/inner_transactions/out_unoptimized/itxn_loop.approval.teal @@ -60,12 +60,10 @@ main_for_header@1: b main_switch_case_default@6 main_switch_case_0@3: - // inner_transactions/itxn_loop.py:28 - // i_note = op.extract(note, 0, i) - dig 3 - bury 3 // inner_transactions/itxn_loop.py:31 // app_params.set(note=i_note, app_args=(Bytes(b"1"),)) + dig 3 + bury 3 bytec_0 // 0x31 bury 7 intc_0 // 1 @@ -73,12 +71,10 @@ main_switch_case_0@3: b main_switch_case_next@7 main_switch_case_1@4: - // inner_transactions/itxn_loop.py:28 - // i_note = op.extract(note, 0, i) - dig 3 - bury 3 // inner_transactions/itxn_loop.py:33 // app_params.set(note=i_note, app_args=(Bytes(b"2"), Bytes(b"1"))) + dig 3 + bury 3 bytec_1 // 0x32 bury 7 bytec_0 // 0x31 @@ -88,8 +84,8 @@ main_switch_case_1@4: b main_switch_case_next@7 main_switch_case_2@5: - // inner_transactions/itxn_loop.py:28 - // i_note = op.extract(note, 0, i) + // inner_transactions/itxn_loop.py:36 + // note=i_note, dig 3 bury 3 // inner_transactions/itxn_loop.py:37 diff --git a/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal b/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal index 3ea6fde19c..9eebb94ece 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal @@ -460,8 +460,8 @@ test_is_a_b: frame_dig -2 concat swap - // typed_abi_call/typed_c2c.py:19 - // def test_is_a_b(self, a: Bytes, b: Bytes, app: Application) -> None: + // typed_abi_call/typed_c2c.py:24 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:20-25 @@ -498,12 +498,8 @@ test_method_selector_kinds: extract 6 2 bytec 33 // "test1" concat - // typed_abi_call/typed_c2c.py:28 - // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:29 - // result, _txn = arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -539,12 +535,8 @@ test_method_selector_kinds: extract 6 2 bytec 35 // "test2" concat - // typed_abi_call/typed_c2c.py:28 - // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:31 - // result, _txn = arc4.abi_call(LoggerClient.echo, "test2", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -580,12 +572,8 @@ test_method_selector_kinds: extract 6 2 bytec 37 // "test3" concat - // typed_abi_call/typed_c2c.py:28 - // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:33 - // result, _txn = arc4.abi_call[arc4.String]("echo", "test3", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -621,12 +609,8 @@ test_method_selector_kinds: extract 6 2 bytec 39 // "test4" concat - // typed_abi_call/typed_c2c.py:28 - // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:35 - // result, _txn = arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -662,12 +646,8 @@ test_method_selector_kinds: extract 6 2 bytec 41 // "test5" concat - // typed_abi_call/typed_c2c.py:28 - // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:37 - // result, _txn = arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -712,12 +692,8 @@ test_method_overload: extract 6 2 bytec 43 // "typed + ignore" concat - // typed_abi_call/typed_c2c.py:41 - // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:42 - // arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -758,12 +734,8 @@ test_method_overload: extract 6 2 bytec 45 // "untyped + ignore" concat - // typed_abi_call/typed_c2c.py:41 - // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:45 - // arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -799,12 +771,8 @@ test_method_overload: extract 6 2 bytec 47 // "tuple" concat - // typed_abi_call/typed_c2c.py:41 - // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:48 - // result = arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -859,12 +827,8 @@ test_method_overload: extract 6 2 bytec 48 // "untyped" concat - // typed_abi_call/typed_c2c.py:41 - // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:52 - // txn_result = arc4.abi_call("echo(string)string", "untyped", app_id=app) bytec 5 // method "echo(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -909,12 +873,8 @@ test_arg_conversion: extract 6 2 bytec 19 // "converted1" concat - // typed_abi_call/typed_c2c.py:56 - // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:57 - // txn = arc4.abi_call(Logger.log_string, "converted1", app_id=app) bytec 12 // method "log(string)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -932,12 +892,8 @@ test_arg_conversion: // typed_abi_call/typed_c2c.py:60 // txn = arc4.abi_call(Logger.log_uint64, 2, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:56 - // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:60 - // txn = arc4.abi_call(Logger.log_uint64, 2, app_id=app) pushbytes 0x3c1058d9 // method "log(uint64)void" itxn_field ApplicationArgs bytec 14 // 0x0000000000000002 @@ -957,12 +913,8 @@ test_arg_conversion: // typed_abi_call/typed_c2c.py:63 // txn = arc4.abi_call(Logger.log_uint512, 3, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:56 - // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:63 - // txn = arc4.abi_call(Logger.log_uint512, 3, app_id=app) pushbytes 0x6af45930 // method "log(uint512)void" itxn_field ApplicationArgs pushbytes 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 @@ -991,12 +943,8 @@ test_arg_conversion: extract 6 2 bytec 20 // 0x34 concat - // typed_abi_call/typed_c2c.py:56 - // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:66 - // txn = arc4.abi_call(Logger.log_bytes, b"4", app_id=app) pushbytes 0xb500e111 // method "log(byte[])void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1018,12 +966,8 @@ test_arg_conversion: intc_0 // 0 intc_3 // 1 setbit - // typed_abi_call/typed_c2c.py:56 - // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:69 - // txn = arc4.abi_call(Logger.log_bool, True, app_id=app) pushbytes 0x6eed7ec3 // method "log(bool)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1149,8 +1093,8 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, concat - // typed_abi_call/typed_c2c.py:73 - // def test_15plus_args(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:96 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:74-97 @@ -1299,12 +1243,8 @@ test_void: extract 6 2 bytec 22 // "World1" concat - // typed_abi_call/typed_c2c.py:101 - // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:102 - // txn = arc4.abi_call(LOG_METHOD_NAME + "(string)void", "World1", app_id=app) bytec 12 // method "log(string)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1328,12 +1268,8 @@ test_void: extract 6 2 bytec 23 // "World2" concat - // typed_abi_call/typed_c2c.py:101 - // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:105 - // txn = arc4.abi_call(LOG_METHOD_NAME + "(string)", "World2", app_id=app) bytec 12 // method "log(string)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1357,12 +1293,8 @@ test_void: extract 6 2 bytec 24 // "World3" concat - // typed_abi_call/typed_c2c.py:101 - // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:108 - // txn = arc4.abi_call(LOG_METHOD_NAME, arc4.String("World3"), app_id=app) bytec 12 // method "log(string)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1386,12 +1318,8 @@ test_void: extract 6 2 bytec 25 // "World4" concat - // typed_abi_call/typed_c2c.py:101 - // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:111 - // txn = arc4.abi_call(Logger.log_string, "World4", app_id=app) bytec 12 // method "log(string)void" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1427,10 +1355,14 @@ test_ref_types: // typed_abi_call/typed_c2c.py:119 // Global.current_application_address, global CurrentApplicationAddress - // typed_abi_call/typed_c2c.py:115 - // def test_ref_types(self, app: Application, asset: Asset) -> None: + // typed_abi_call/typed_c2c.py:120 + // app, frame_dig -2 + // typed_abi_call/typed_c2c.py:118 + // asset, frame_dig -1 + // typed_abi_call/typed_c2c.py:121 + // app_id=app, frame_dig -2 itxn_field ApplicationID itxn_field Assets @@ -1512,12 +1444,8 @@ test_native_string: extract 6 2 bytec 8 // "s" concat - // typed_abi_call/typed_c2c.py:129 - // def test_native_string(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:130 - // result1, _txn = arc4.abi_call(Logger.echo_native_string, "s", app_id=app) bytec 26 // method "echo_native_string(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1551,12 +1479,8 @@ test_native_string: extract 6 2 bytec 8 // "s" concat - // typed_abi_call/typed_c2c.py:129 - // def test_native_string(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:133 - // result2, _txn = arc4.abi_call(Logger.echo_native_string, String("s"), app_id=app) bytec 26 // method "echo_native_string(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1588,12 +1512,8 @@ test_native_string: extract 6 2 bytec 8 // "s" concat - // typed_abi_call/typed_c2c.py:129 - // def test_native_string(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:136 - // result3, _txn = arc4.abi_call(Logger.echo_native_string, arc4.String("s"), app_id=app) bytec 26 // method "echo_native_string(string)string" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1635,12 +1555,8 @@ test_native_bytes: extract 6 2 bytec 9 // 0x62 concat - // typed_abi_call/typed_c2c.py:140 - // def test_native_bytes(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:141 - // result1, _txn = arc4.abi_call(Logger.echo_native_bytes, b"b", app_id=app) bytec 27 // method "echo_native_bytes(byte[])byte[]" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1674,12 +1590,8 @@ test_native_bytes: extract 6 2 bytec 9 // 0x62 concat - // typed_abi_call/typed_c2c.py:140 - // def test_native_bytes(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:144 - // result2, _txn = arc4.abi_call(Logger.echo_native_bytes, Bytes(b"b"), app_id=app) bytec 27 // method "echo_native_bytes(byte[])byte[]" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1715,8 +1627,6 @@ test_native_bytes: extract 6 2 bytec 9 // 0x62 concat - // typed_abi_call/typed_c2c.py:140 - // def test_native_bytes(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:147-149 @@ -1758,12 +1668,8 @@ test_native_uint64: // typed_abi_call/typed_c2c.py:154 // result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:153 - // def test_native_uint64(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:154 - // result1, _txn = arc4.abi_call(Logger.echo_native_uint64, 1, app_id=app) bytec 28 // method "echo_native_uint64(uint64)uint64" itxn_field ApplicationArgs bytec 4 // 0x0000000000000001 @@ -1794,12 +1700,8 @@ test_native_uint64: itxn_begin intc_3 // 1 itob - // typed_abi_call/typed_c2c.py:153 - // def test_native_uint64(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:157 - // result2, _txn = arc4.abi_call(Logger.echo_native_uint64, UInt64(1), app_id=app) bytec 28 // method "echo_native_uint64(uint64)uint64" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1825,12 +1727,8 @@ test_native_uint64: // typed_abi_call/typed_c2c.py:160 // result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:153 - // def test_native_uint64(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:160 - // result3, _txn = arc4.abi_call(Logger.echo_native_uint64, arc4.UInt64(1), app_id=app) bytec 28 // method "echo_native_uint64(uint64)uint64" itxn_field ApplicationArgs bytec 4 // 0x0000000000000001 @@ -1867,12 +1765,8 @@ test_native_biguint: // typed_abi_call/typed_c2c.py:165 // result1, _txn = arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:164 - // def test_native_biguint(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:165 - // result1, _txn = arc4.abi_call(Logger.echo_native_biguint, 2, app_id=app) bytec 29 // method "echo_native_biguint(uint512)uint512" itxn_field ApplicationArgs bytec 6 // 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 @@ -1909,12 +1803,8 @@ test_native_biguint: bzero bytec 10 // 0x02 b| - // typed_abi_call/typed_c2c.py:164 - // def test_native_biguint(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:168 - // result2, _txn = arc4.abi_call(Logger.echo_native_biguint, BigUInt(2), app_id=app) bytec 29 // method "echo_native_biguint(uint512)uint512" itxn_field ApplicationArgs itxn_field ApplicationArgs @@ -1939,12 +1829,8 @@ test_native_biguint: // typed_abi_call/typed_c2c.py:171 // result3, _txn = arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:164 - // def test_native_biguint(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:171 - // result3, _txn = arc4.abi_call(Logger.echo_native_biguint, arc4.UInt512(2), app_id=app) bytec 29 // method "echo_native_biguint(uint512)uint512" itxn_field ApplicationArgs bytec 6 // 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 @@ -2007,8 +1893,8 @@ test_native_tuple: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:175 - // def test_native_tuple(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:185 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:176-186 @@ -2179,8 +2065,8 @@ test_native_tuple: // typed_abi_call/typed_c2c.py:201 // BigUInt(2), cover 3 - // typed_abi_call/typed_c2c.py:175 - // def test_native_tuple(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:202 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:193-203 @@ -2249,8 +2135,8 @@ test_native_tuple: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:175 - // def test_native_tuple(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:215 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:206-216 @@ -2335,8 +2221,8 @@ test_native_tuple: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:175 - // def test_native_tuple(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:226 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:219-227 @@ -2516,8 +2402,8 @@ test_native_tuple_method_ref: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:234 - // def test_native_tuple_method_ref(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:242 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:235-243 @@ -2694,8 +2580,8 @@ test_native_tuple_method_ref: // typed_abi_call/typed_c2c.py:256 // BigUInt(2), cover 3 - // typed_abi_call/typed_c2c.py:234 - // def test_native_tuple_method_ref(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:257 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:250-258 @@ -2812,8 +2698,8 @@ test_native_tuple_method_ref: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:234 - // def test_native_tuple_method_ref(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:268 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:261-269 @@ -2946,8 +2832,8 @@ test_native_tuple_method_ref: bytec_3 // 0x6231 concat swap - // typed_abi_call/typed_c2c.py:234 - // def test_native_tuple_method_ref(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:279 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:272-280 @@ -3137,8 +3023,8 @@ test_nested_tuples: concat swap concat - // typed_abi_call/typed_c2c.py:284 - // def test_nested_tuples(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:289 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:285-290 @@ -3354,8 +3240,8 @@ test_nested_tuples: concat swap concat - // typed_abi_call/typed_c2c.py:284 - // def test_nested_tuples(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:302 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:298-303 @@ -3580,8 +3466,8 @@ test_nested_tuples: concat swap concat - // typed_abi_call/typed_c2c.py:284 - // def test_nested_tuples(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:320 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:311-321 @@ -3735,12 +3621,8 @@ test_no_args: // typed_abi_call/typed_c2c.py:331 // result, _txn = arc4.abi_call(Logger.no_args, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:330 - // def test_no_args(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:331 - // result, _txn = arc4.abi_call(Logger.no_args, app_id=app) bytec 32 // method "no_args()uint64" itxn_field ApplicationArgs intc_1 // appl @@ -3765,12 +3647,8 @@ test_no_args: // typed_abi_call/typed_c2c.py:333 // arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:330 - // def test_no_args(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:333 - // arc4_result, _txn = arc4.abi_call[arc4.UInt64]("no_args()uint64", app_id=app) bytec 32 // method "no_args()uint64" itxn_field ApplicationArgs intc_1 // appl @@ -3794,12 +3672,8 @@ test_no_args: // typed_abi_call/typed_c2c.py:336 // arc4.abi_call(Logger.no_args, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:330 - // def test_no_args(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:336 - // arc4.abi_call(Logger.no_args, app_id=app) bytec 32 // method "no_args()uint64" itxn_field ApplicationArgs intc_1 // appl @@ -3883,8 +3757,8 @@ test_named_tuples: swap concat swap - // typed_abi_call/typed_c2c.py:340 - // def test_named_tuples(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:345 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:341-346 @@ -3965,8 +3839,8 @@ test_named_tuples: swap concat swap - // typed_abi_call/typed_c2c.py:340 - // def test_named_tuples(self, app: Application) -> None: + // typed_abi_call/typed_c2c.py:352 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call/typed_c2c.py:348-353 diff --git a/test_cases/typed_abi_call_txn/out_unoptimized/Caller.approval.teal b/test_cases/typed_abi_call_txn/out_unoptimized/Caller.approval.teal index 60ff4c5cf0..49c9db598a 100644 --- a/test_cases/typed_abi_call_txn/out_unoptimized/Caller.approval.teal +++ b/test_cases/typed_abi_call_txn/out_unoptimized/Caller.approval.teal @@ -230,8 +230,8 @@ test_call_with_txn: frame_dig -2 concat swap - // typed_abi_call_txn/caller.py:16 - // def test_call_with_txn(self, a: Bytes, b: Bytes, app: Application) -> None: + // typed_abi_call_txn/caller.py:27 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call_txn/caller.py:22-28 @@ -327,8 +327,8 @@ test_call_with_acfg: frame_dig -2 concat swap - // typed_abi_call_txn/caller.py:32 - // def test_call_with_acfg(self, a: Bytes, b: Bytes, app: Application) -> None: + // typed_abi_call_txn/caller.py:43 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call_txn/caller.py:38-44 @@ -415,8 +415,8 @@ test_call_with_infer: frame_dig -2 concat swap - // typed_abi_call_txn/caller.py:47 - // def test_call_with_infer(self, a: Bytes, b: Bytes, app: Application) -> None: + // typed_abi_call_txn/caller.py:58 + // app_id=app, frame_dig -1 itxn_field ApplicationID // typed_abi_call_txn/caller.py:53-59 @@ -493,11 +493,7 @@ test_call_with_acfg_no_return: frame_dig -2 concat swap - // typed_abi_call_txn/caller.py:62 - // def test_call_with_acfg_no_return(self, a: Bytes, b: Bytes, app: Application) -> None: frame_dig -1 - // typed_abi_call_txn/caller.py:69 - // TxnContract.call_with_acfg_no_return, a, acfg, b, app_id=app, note=b"1" pushbytes 0x31 itxn_field Note itxn_field ApplicationID From 261a9eae113193ff9fa82454007cb7c702d25299 Mon Sep 17 00:00:00 2001 From: Adam Chidlow Date: Tue, 29 Oct 2024 11:53:38 +0800 Subject: [PATCH 5/8] feat: allow variable rebinding of mutable parameter values --- examples/merkle/out/MerkleTree.ssa.ir | 2 + examples/merkle/puya.log | 2 + examples/sizes.txt | 11 +- .../struct_in_box/out/ExampleContract.ssa.ir | 4 +- .../ExampleContract.approval.teal | 4 +- .../ExampleContract.destructured.ir | 3 +- examples/struct_in_box/puya.log | 3 + examples/voting/out/VotingRoundApp.ssa.ir | 4 +- .../VotingRoundApp.approval.teal | 19 +- .../VotingRoundApp.destructured.ir | 3 +- examples/voting/puya.log | 11 +- src/puya/awst/validation/arc4_copy.py | 27 +- src/puya/ir/builder/_utils.py | 56 +- src/puya/ir/builder/arc4.py | 95 +- src/puya/ir/builder/assignment.py | 132 +- src/puya/ir/builder/main.py | 48 +- test_cases/arc4_types/mutable_params.py | 69 +- test_cases/arc4_types/mutable_params2.py | 25 + .../Arc4MutableParamsContract.approval.mir | 690 ++-- .../Arc4MutableParamsContract.approval.teal | 419 ++- .../out/Arc4MutableParamsContract.clear.mir | 2 +- .../out/Arc4MutableParamsContract.clear.teal | 2 +- .../Arc4MutableParamsContract.destructured.ir | 157 +- .../out/Arc4MutableParamsContract.ssa.ir | 364 ++- ...rc4MutableParamsContract.ssa.opt_pass_1.ir | 188 +- ...c4MutableParamsContract.ssa.opt_pass_10.ir | 159 +- ...c4MutableParamsContract.ssa.opt_pass_11.ir | 159 +- ...c4MutableParamsContract.ssa.opt_pass_12.ir | 159 +- ...c4MutableParamsContract.ssa.opt_pass_13.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_2.ir | 162 +- ...rc4MutableParamsContract.ssa.opt_pass_3.ir | 161 +- ...rc4MutableParamsContract.ssa.opt_pass_4.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_5.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_6.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_7.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_8.ir | 159 +- ...rc4MutableParamsContract.ssa.opt_pass_9.ir | 159 +- .../out/Arc4StructsTypeContract.ssa.ir | 12 +- .../out/MutableParams2.approval.teal | 158 + .../arc4_types/out/MutableParams2.arc32.json | 50 + .../arc4_types/out/MutableParams2.clear.teal | 5 + .../out/MutableParams2.destructured.ir | 87 + .../arc4_types/out/MutableParams2.ssa.ir | 172 + .../out/MutableParams2.ssa.opt_pass_1.ir | 120 + .../out/MutableParams2.ssa.opt_pass_2.ir | 103 + .../out/MutableParams2.ssa.opt_pass_3.ir | 96 + .../out/MutableParams2.ssa.opt_pass_4.ir | 91 + .../out/MutableParams2.ssa.opt_pass_5.ir | 88 + .../out/MutableParams2.ssa.opt_pass_6.ir | 86 + .../arc4_types/out/client_MutableParams2.py | 13 + test_cases/arc4_types/out/module.awst | 87 +- .../arc4_types/out/mutable_params.O0.log | 1641 +++++++--- .../arc4_types/out/mutable_params.O1.log | 894 ++++-- .../arc4_types/out/mutable_params.O2.log | 894 ++++-- test_cases/arc4_types/out/structs.O0.log | 140 +- .../Arc4MutableParamsContract.approval.teal | 296 +- .../Arc4MutableParamsContract.destructured.ir | 157 +- .../out_O2/MutableParams2.approval.teal | 122 + .../out_O2/MutableParams2.clear.teal | 5 + .../out_O2/MutableParams2.destructured.ir | 87 + .../Arc4MutableParamsContract.approval.teal | 632 +++- .../Arc4MutableParamsContract.clear.teal | 2 +- .../Arc4MutableParamsContract.destructured.ir | 321 +- .../Arc4StructsTypeContract.approval.teal | 8 +- .../Arc4StructsTypeContract.destructured.ir | 6 +- .../MutableParams2.approval.teal | 278 ++ .../out_unoptimized/MutableParams2.clear.teal | 5 + .../MutableParams2.destructured.ir | 162 + test_cases/arc4_types/puya.log | 2823 +++++++++++++++-- tests/test_arc32.py | 15 + .../test_expected_output/expected_errors.test | 18 +- 71 files changed, 11750 insertions(+), 2177 deletions(-) create mode 100644 test_cases/arc4_types/mutable_params2.py create mode 100644 test_cases/arc4_types/out/MutableParams2.approval.teal create mode 100644 test_cases/arc4_types/out/MutableParams2.arc32.json create mode 100644 test_cases/arc4_types/out/MutableParams2.clear.teal create mode 100644 test_cases/arc4_types/out/MutableParams2.destructured.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_1.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_2.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_3.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_4.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_5.ir create mode 100644 test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_6.ir create mode 100644 test_cases/arc4_types/out/client_MutableParams2.py create mode 100644 test_cases/arc4_types/out_O2/MutableParams2.approval.teal create mode 100644 test_cases/arc4_types/out_O2/MutableParams2.clear.teal create mode 100644 test_cases/arc4_types/out_O2/MutableParams2.destructured.ir create mode 100644 test_cases/arc4_types/out_unoptimized/MutableParams2.approval.teal create mode 100644 test_cases/arc4_types/out_unoptimized/MutableParams2.clear.teal create mode 100644 test_cases/arc4_types/out_unoptimized/MutableParams2.destructured.ir diff --git a/examples/merkle/out/MerkleTree.ssa.ir b/examples/merkle/out/MerkleTree.ssa.ir index ad737607cd..fbbad61d1e 100644 --- a/examples/merkle/out/MerkleTree.ssa.ir +++ b/examples/merkle/out/MerkleTree.ssa.ir @@ -62,6 +62,8 @@ contract examples.merkle.contract.MerkleTree: subroutine examples.merkle.contract.compute_root_hash(proof: bytes, leaf: bytes) -> : block@0: // L19 + let proof%is_original#0: bool = 1u + let proof%out#0: bytes = proof#0 let computed#0: bytes = leaf#0 let tmp%0#0: uint64 = (extract_uint16 proof#0 0u) (assert 1u) // Step cannot be zero diff --git a/examples/merkle/puya.log b/examples/merkle/puya.log index 9bfcfc3b75..b2436746ce 100644 --- a/examples/merkle/puya.log +++ b/examples/merkle/puya.log @@ -492,10 +492,12 @@ debug: Optimizing subroutine examples.merkle.contract.compute_root_hash debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: proof#0, proof%out#0 debug: Found equivalence set: leaf#0, computed#0 debug: Replacing {computed#0} with leaf#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables +debug: Removing unused variable proof%is_original#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops diff --git a/examples/sizes.txt b/examples/sizes.txt index 5215481cfb..26acec72c1 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -12,14 +12,15 @@ arc4_types/Arc4BoolType 381 69 - | 307 46 - arc4_types/Arc4DynamicBytes 377 185 - | 213 100 - arc4_types/Arc4DynamicStringArray 283 124 - | 172 53 - - arc4_types/Arc4MutableParams 471 286 - | 292 141 - + arc4_types/Arc4MutableParams 1110 644 - | 699 343 - arc4_types/Arc4Mutation 2958 1426 - | 1977 593 - arc4_types/Arc4NumericTypes 749 186 - | 243 26 - arc4_types/Arc4RefTypes 85 46 - | 32 27 - arc4_types/Arc4StringTypes 455 35 - | 245 13 - arc4_types/Arc4StructsFromAnotherModule 67 12 - | 49 6 - - arc4_types/Arc4StructsType 391 239 - | 259 121 - + arc4_types/Arc4StructsType 389 239 - | 259 121 - arc4_types/Arc4TuplesType 795 136 - | 537 58 - + arc4_types/MutableParams2 334 202 - | 193 97 - arc_28/EventEmitter 186 133 - | 100 64 - asset/Reference 268 261 - | 144 141 - auction/Auction 592 522 - | 328 281 - @@ -108,7 +109,7 @@ state_totals 65 32 - | 32 16 - stress_tests/BruteForceRotationSearch 228 163 - | 152 106 - string_ops 156 154 - | 58 55 - - struct_in_box/Example 243 206 - | 127 99 - + struct_in_box/Example 242 206 - | 127 99 - stubs/BigUInt 192 121 - | 126 73 - stubs/Bytes 944 279 - | 606 153 - stubs/String 701 167 - | 416 54 - @@ -128,6 +129,6 @@ unassigned_expression/Unassigned 158 119 - | 81 57 - undefined_phi_args/Baddie 319 282 - | 174 157 - unssa/UnSSA 432 368 - | 241 204 - - voting/VotingRoundApp 1593 1483 - | 734 649 - + voting/VotingRoundApp 1590 1483 - | 733 649 - with_reentrancy/WithReentrancy 255 242 - | 132 122 - - Total 69283 53532 53473 | 32895 21757 21713 \ No newline at end of file + Total 70250 54092 54033 | 33494 22056 22012 \ No newline at end of file diff --git a/examples/struct_in_box/out/ExampleContract.ssa.ir b/examples/struct_in_box/out/ExampleContract.ssa.ir index e777434415..9f54dac2b5 100644 --- a/examples/struct_in_box/out/ExampleContract.ssa.ir +++ b/examples/struct_in_box/out/ExampleContract.ssa.ir @@ -87,10 +87,12 @@ contract examples.struct_in_box.contract.ExampleContract: subroutine examples.struct_in_box.contract.ExampleContract.write_to_box(user: bytes) -> bytes: block@0: // L18 + let user%is_original#0: bool = 1u + let user%out#0: bytes = user#0 let box_key#0: bytes = (extract3 user#0 2u 8u) // on error: Index access is out of bounds (box_del box_key#0) (box_put box_key#0 user#0) - return user#0 + return user%out#0 subroutine examples.struct_in_box.contract.ExampleContract.attach_asset_to_user(user_id: bytes, asset: uint64) -> void: block@0: // L36 diff --git a/examples/struct_in_box/out_unoptimized/ExampleContract.approval.teal b/examples/struct_in_box/out_unoptimized/ExampleContract.approval.teal index bbe4f57b2a..8d6cf0a54f 100644 --- a/examples/struct_in_box/out_unoptimized/ExampleContract.approval.teal +++ b/examples/struct_in_box/out_unoptimized/ExampleContract.approval.teal @@ -165,9 +165,10 @@ write_to_box: // @subroutine // def write_to_box(self, user: UserStruct) -> None: proto 1 1 + frame_dig -1 // struct_in_box/contract.py:20 // box_key = user.id.bytes - frame_dig -1 + dup intc_2 // 2 intc_3 // 8 extract3 // on error: Index access is out of bounds @@ -181,7 +182,6 @@ write_to_box: // op.Box.put(box_key, user.bytes) frame_dig -1 box_put - frame_dig -1 retsub diff --git a/examples/struct_in_box/out_unoptimized/ExampleContract.destructured.ir b/examples/struct_in_box/out_unoptimized/ExampleContract.destructured.ir index 78206721e1..c688ca022e 100644 --- a/examples/struct_in_box/out_unoptimized/ExampleContract.destructured.ir +++ b/examples/struct_in_box/out_unoptimized/ExampleContract.destructured.ir @@ -85,10 +85,11 @@ contract examples.struct_in_box.contract.ExampleContract: subroutine examples.struct_in_box.contract.ExampleContract.write_to_box(user: bytes) -> bytes: block@0: // L18 + let user%out#0: bytes = user#0 let box_key#0: bytes = (extract3 user#0 2u 8u) // on error: Index access is out of bounds (box_del box_key#0) (box_put box_key#0 user#0) - return user#0 + return user%out#0 subroutine examples.struct_in_box.contract.ExampleContract.attach_asset_to_user(user_id: bytes, asset: uint64) -> void: block@0: // L36 diff --git a/examples/struct_in_box/puya.log b/examples/struct_in_box/puya.log index e12cbcd06f..d0943c6207 100644 --- a/examples/struct_in_box/puya.log +++ b/examples/struct_in_box/puya.log @@ -490,9 +490,12 @@ debug: Optimizing subroutine examples.struct_in_box.contract.ExampleContract.wri debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: user#0, user%out#0 +debug: Replacing {user%out#0} with user#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (extract3 user#0 2u 8u) // on error: Index access is out of bounds to ((extract 2 8) user#0) // on error: Index access is out of bounds debug: Optimizer: Remove Unused Variables +debug: Removing unused variable user%is_original#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops diff --git a/examples/voting/out/VotingRoundApp.ssa.ir b/examples/voting/out/VotingRoundApp.ssa.ir index aaad8ea61f..bfef64a81a 100644 --- a/examples/voting/out/VotingRoundApp.ssa.ir +++ b/examples/voting/out/VotingRoundApp.ssa.ir @@ -132,6 +132,8 @@ contract examples.voting.voting.VotingRoundApp: subroutine examples.voting.voting.VotingRoundApp.store_option_counts(option_counts: bytes) -> bytes: block@0: // L217 + let option_counts%is_original#0: bool = 1u + let option_counts%out#0: bytes = option_counts#0 let tmp%0#0: uint64 = (extract_uint16 option_counts#0 0u) let tmp%1#0: bool = (!= tmp%0#0 0u) (assert tmp%1#0) // option_counts should be non-empty @@ -164,7 +166,7 @@ contract examples.voting.voting.VotingRoundApp: let copy%0#0: bytes = option_counts#0 (app_global_put "option_counts" copy%0#0) (app_global_put "total_options" total_options#1) - return option_counts#0 + return option_counts%out#0 subroutine examples.voting.voting.VotingRoundApp.bootstrap(fund_min_bal_req: uint64) -> void: block@0: // L82 diff --git a/examples/voting/out_unoptimized/VotingRoundApp.approval.teal b/examples/voting/out_unoptimized/VotingRoundApp.approval.teal index 3afa713aca..af54f8d3ad 100644 --- a/examples/voting/out_unoptimized/VotingRoundApp.approval.teal +++ b/examples/voting/out_unoptimized/VotingRoundApp.approval.teal @@ -281,9 +281,10 @@ store_option_counts: // @subroutine // def store_option_counts(self, option_counts: VoteIndexArray) -> None: proto 1 1 + frame_dig -1 // voting/voting.py:219 // assert option_counts.length, "option_counts should be non-empty" - frame_dig -1 + dup intc_0 // 0 extract_uint16 intc_0 // 0 @@ -310,13 +311,13 @@ store_option_counts: store_option_counts_for_header@1: // voting/voting.py:223 // for item in option_counts: + frame_dig 3 frame_dig 2 - frame_dig 1 < bz store_option_counts_after_for@4 frame_dig -1 extract 2 0 - frame_dig 2 + frame_dig 3 intc_1 // 1 * intc_1 // 1 @@ -324,19 +325,19 @@ store_option_counts_for_header@1: // voting/voting.py:224 // total_options += item.native btoi - frame_dig 0 + frame_dig 1 + - frame_bury 0 - frame_dig 2 + frame_bury 1 + frame_dig 3 intc_1 // 1 + - frame_bury 2 + frame_bury 3 b store_option_counts_for_header@1 store_option_counts_after_for@4: // voting/voting.py:225 // assert total_options <= 128, "Can't have more than 128 vote options" - frame_dig 0 + frame_dig 1 dup pushint 128 // 128 <= @@ -352,8 +353,6 @@ store_option_counts_after_for@4: bytec 14 // "total_options" swap app_global_put - frame_dig -1 - frame_bury 0 retsub diff --git a/examples/voting/out_unoptimized/VotingRoundApp.destructured.ir b/examples/voting/out_unoptimized/VotingRoundApp.destructured.ir index c698211bb2..3a67bea71c 100644 --- a/examples/voting/out_unoptimized/VotingRoundApp.destructured.ir +++ b/examples/voting/out_unoptimized/VotingRoundApp.destructured.ir @@ -131,6 +131,7 @@ contract examples.voting.voting.VotingRoundApp: subroutine examples.voting.voting.VotingRoundApp.store_option_counts(option_counts: bytes) -> bytes: block@0: // L217 + let option_counts%out#0: bytes = option_counts#0 let tmp%0#0: uint64 = (extract_uint16 option_counts#0 0u) let tmp%1#0: bool = (!= tmp%0#0 0u) (assert tmp%1#0) // option_counts should be non-empty @@ -160,7 +161,7 @@ contract examples.voting.voting.VotingRoundApp: let copy%0#0: bytes = option_counts#0 (app_global_put "option_counts" copy%0#0) (app_global_put "total_options" total_options#0) - return option_counts#0 + return option_counts%out#0 subroutine examples.voting.voting.VotingRoundApp.bootstrap(fund_min_bal_req: uint64) -> void: block@0: // L82 diff --git a/examples/voting/puya.log b/examples/voting/puya.log index 7066b3467d..59e69d29f2 100644 --- a/examples/voting/puya.log +++ b/examples/voting/puya.log @@ -399,6 +399,12 @@ debug: Added option_counts#1 to Phi node: let option_counts#1: bytes = φ(option debug: Replacing trivial Phi node: let option_counts#1: bytes = φ(option_counts#0 <- block@0, option_counts#1 <- block@3) (option_counts#1) with option_counts#0 debug: Deleting Phi assignment: let option_counts#1: bytes = φ(option_counts#0 <- block@0, option_counts#1 <- block@3) debug: Replaced trivial Phi node: let option_counts#1: bytes = φ(option_counts#0 <- block@0, option_counts#1 <- block@3) (option_counts#1) with option_counts#0 in current definition for 3 blocks +debug: Created Phi assignment: let option_counts%out#1: bytes = undefined while trying to resolve 'option_counts%out' in block@1: // for_header_L223 +debug: Added option_counts%out#0 to Phi node: let option_counts%out#1: bytes = φ(option_counts%out#0 <- block@0) in block@0: // L217 +debug: Added option_counts%out#1 to Phi node: let option_counts%out#1: bytes = φ(option_counts%out#0 <- block@0, option_counts%out#1 <- block@3) in block@3: // for_footer_L223 +debug: Replacing trivial Phi node: let option_counts%out#1: bytes = φ(option_counts%out#0 <- block@0, option_counts%out#1 <- block@3) (option_counts%out#1) with option_counts%out#0 +debug: Deleting Phi assignment: let option_counts%out#1: bytes = φ(option_counts%out#0 <- block@0, option_counts%out#1 <- block@3) +debug: Replaced trivial Phi node: let option_counts%out#1: bytes = φ(option_counts%out#0 <- block@0, option_counts%out#1 <- block@3) (option_counts%out#1) with option_counts%out#0 in current definition for 3 blocks debug: Terminated block@4: // after_for_L223 debug: Sealing block@0: // L82 debug: Terminated block@0: // L82 @@ -644,12 +650,13 @@ debug: Optimizing subroutine examples.voting.voting.VotingRoundApp.store_option_ debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: option_counts#0, option_counts%out#0, copy%0#0 +debug: Replacing {option_counts%out#0, copy%0#0} with option_counts#0 made 2 modifications debug: Found equivalence set: array_length%0#0, reverse_index_internal%0#0 -debug: Found equivalence set: option_counts#0, copy%0#0 -debug: Replacing {copy%0#0} with option_counts#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (* item_index_internal%0#1 1u) to item_index_internal%0#1 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable option_counts%is_original#0 debug: Removing unused variable tmp%1#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References diff --git a/src/puya/awst/validation/arc4_copy.py b/src/puya/awst/validation/arc4_copy.py index 731c49172c..cc25a49771 100644 --- a/src/puya/awst/validation/arc4_copy.py +++ b/src/puya/awst/validation/arc4_copy.py @@ -53,18 +53,18 @@ def visit_assignment_expression(self, expr: awst_nodes.AssignmentExpression) -> expr.value.accept(self) def visit_subroutine_call_expression(self, expr: awst_nodes.SubroutineCallExpression) -> None: - super().visit_subroutine_call_expression(expr) - for arg in expr.args: - match arg.value: - case awst_nodes.VarExpression(): - # Var expressions don't need copy as we implicitly return the latest value and - # update the var - continue - case awst_nodes.AppStateExpression() | awst_nodes.AppAccountStateExpression(): - message = "being passed to a subroutine from state" - case _: - message = "being passed to a subroutine" - _check_for_arc4_copy(arg.value, message) + for arg_ in expr.args: + for arg in _expand_tuple_items(arg_.value): + match arg: + case awst_nodes.VarExpression(): + # Var expressions don't need copy as we implicitly return the latest value + # and update the var + continue + case awst_nodes.AppStateExpression() | awst_nodes.AppAccountStateExpression(): + message = "being passed to a subroutine from state" + case _: + message = "being passed to a subroutine" + _check_for_arc4_copy(arg, message) def visit_new_array(self, expr: awst_nodes.NewArray) -> None: super().visit_new_array(expr) @@ -131,7 +131,8 @@ def _check_for_arc4_copy(expr: awst_nodes.Expression, context_desc: str) -> None def _expand_tuple_items(expr: awst_nodes.Expression) -> Iterator[awst_nodes.Expression]: match expr: case awst_nodes.TupleExpression(items=items): - yield from items + for item in items: + yield from _expand_tuple_items(item) case _: yield expr diff --git a/src/puya/ir/builder/_utils.py b/src/puya/ir/builder/_utils.py index 413522fb39..07a15e9f1d 100644 --- a/src/puya/ir/builder/_utils.py +++ b/src/puya/ir/builder/_utils.py @@ -3,10 +3,13 @@ import attrs -from puya.awst import nodes as awst_nodes +from puya.awst import ( + nodes as awst_nodes, + wtypes, +) from puya.errors import InternalError from puya.ir.avm_ops import AVMOp -from puya.ir.context import IRFunctionBuildContext +from puya.ir.context import TMP_VAR_INDICATOR, IRFunctionBuildContext from puya.ir.models import ( Assignment, BytesConstant, @@ -76,6 +79,55 @@ def assign_targets( context.block_builder.add( Assignment(targets=targets, source=source, source_location=assignment_location) ) + # also update any implicitly returned variables + implicit_params = {p.name for p in context.subroutine.parameters if p.implicit_return} + for target in targets: + if target.name in implicit_params: + _update_implicit_out_var(context, target.name, target.ir_type) + + +def _update_implicit_out_var(context: IRFunctionBuildContext, var: str, ir_type: IRType) -> None: + # emit conditional assignment equivalent to + # if var%is_original: + # var%out = var + loc = SourceLocation(file=None, line=1) + wtype = wtypes.bytes_wtype if ir_type == IRType.bytes else wtypes.uint64_wtype + node = awst_nodes.IfElse( + condition=awst_nodes.VarExpression( + name=get_implicit_return_is_original(var), + wtype=wtypes.bool_wtype, + source_location=loc, + ), + if_branch=awst_nodes.Block( + body=[ + awst_nodes.AssignmentStatement( + target=awst_nodes.VarExpression( + name=get_implicit_return_out(var), + wtype=wtype, + source_location=loc, + ), + value=awst_nodes.VarExpression( + name=var, + wtype=wtype, + source_location=loc, + ), + source_location=loc, + ) + ], + source_location=loc, + ), + else_branch=None, + source_location=loc, + ) + node.accept(context.visitor) + + +def get_implicit_return_is_original(var_name: str) -> str: + return f"{var_name}{TMP_VAR_INDICATOR}is_original" + + +def get_implicit_return_out(var_name: str) -> str: + return f"{var_name}{TMP_VAR_INDICATOR}out" def mktemp( diff --git a/src/puya/ir/builder/arc4.py b/src/puya/ir/builder/arc4.py index 500a7dbb82..2c2aa2decc 100644 --- a/src/puya/ir/builder/arc4.py +++ b/src/puya/ir/builder/arc4.py @@ -2,6 +2,7 @@ import attrs +from puya import log from puya.arc4_util import ( determine_arc4_tuple_head_size, get_arc4_fixed_bit_size, @@ -17,7 +18,6 @@ from puya.ir.avm_ops import AVMOp from puya.ir.builder._utils import ( assert_value, - assign, assign_intrinsic_op, assign_targets, assign_temp, @@ -36,10 +36,11 @@ ValueTuple, ) from puya.ir.types_ import AVMBytesEncoding, IRType, get_wtype_arity -from puya.ir.utils import format_tuple_index from puya.parse import SourceLocation, sequential_source_locations_merge from puya.utils import bits_to_bytes +logger = log.get_logger(__name__) + @attrs.frozen(kw_only=True) class ArrayIterator: @@ -356,7 +357,7 @@ def handle_arc4_assign( value: ValueProvider, source_location: SourceLocation, *, - is_mutation: bool = False, + is_nested_update: bool, ) -> Value: result: Value match target: @@ -366,68 +367,71 @@ def handle_arc4_assign( ) as base_expr, index=index_value, ): + item = _arc4_replace_array_item( + context, + base_expr=base_expr, + index_value_expr=index_value, + wtype=array_wtype, + value=value, + source_location=source_location, + ) return handle_arc4_assign( context, target=base_expr, - value=_arc4_replace_array_item( - context, - base_expr=base_expr, - index_value_expr=index_value, - wtype=array_wtype, - value=value, - source_location=source_location, - ), + value=item, source_location=source_location, - is_mutation=True, + is_nested_update=True, ) case awst_nodes.FieldExpression( base=awst_nodes.Expression(wtype=wtypes.ARC4Struct() as struct_wtype) as base_expr, name=field_name, ): + item = _arc4_replace_struct_item( + context, + base_expr=base_expr, + field_name=field_name, + wtype=struct_wtype, + value=value, + source_location=source_location, + ) return handle_arc4_assign( context, target=base_expr, - value=_arc4_replace_struct_item( - context, - base_expr=base_expr, - field_name=field_name, - wtype=struct_wtype, - value=value, - source_location=source_location, - ), + value=item, source_location=source_location, - is_mutation=True, + is_nested_update=True, ) case awst_nodes.TupleItemExpression( base=awst_nodes.Expression(wtype=wtypes.ARC4Tuple() as tuple_wtype) as base_expr, index=index_value, ): + item = _arc4_replace_tuple_item( + context, + base_expr=base_expr, + index_int=index_value, + wtype=tuple_wtype, + value=value, + source_location=source_location, + ) return handle_arc4_assign( context, target=base_expr, - value=_arc4_replace_tuple_item( - context, - base_expr=base_expr, - index_int=index_value, - wtype=tuple_wtype, - value=value, - source_location=source_location, - ), + value=item, source_location=source_location, - is_mutation=True, + is_nested_update=True, ) # this function is sometimes invoked outside an assignment expr/stmt, which # is how a non l-value expression can be possible # TODO: refactor this so that this special case is handled where it originates case awst_nodes.TupleItemExpression( wtype=item_wtype, - ) as ti_expr if not item_wtype.immutable: - result = assign( - context=context, - name=_get_tuple_var_name(ti_expr), - source=value, - register_location=ti_expr.source_location, + ) if not item_wtype.immutable: + (result,) = handle_assignment( + context, + target, + value=value, assignment_location=source_location, + is_nested_update=True, ) return result case _: @@ -436,20 +440,11 @@ def handle_arc4_assign( target, value=value, assignment_location=source_location, - is_mutation=is_mutation, + is_nested_update=is_nested_update, ) return result -def _get_tuple_var_name(expr: awst_nodes.TupleItemExpression) -> str: - if isinstance(expr.base.wtype, wtypes.WTuple): - if isinstance(expr.base, awst_nodes.TupleItemExpression): - return format_tuple_index(expr.base.wtype, _get_tuple_var_name(expr.base), expr.index) - if isinstance(expr.base, awst_nodes.VarExpression): - return format_tuple_index(expr.base.wtype, expr.base.name, expr.index) - raise CodeError("invalid assignment target", expr.base.source_location) - - def concat_values( context: IRFunctionBuildContext, left_expr: awst_nodes.Expression, @@ -592,7 +587,13 @@ def pop_arc4_array( assignment_location=source_location, ) - handle_arc4_assign(context, target=expr.base, value=data, source_location=source_location) + handle_arc4_assign( + context, + target=expr.base, + value=data, + is_nested_update=True, + source_location=source_location, + ) return popped diff --git a/src/puya/ir/builder/assignment.py b/src/puya/ir/builder/assignment.py index 7052edbceb..82d4e1b7a4 100644 --- a/src/puya/ir/builder/assignment.py +++ b/src/puya/ir/builder/assignment.py @@ -11,15 +11,22 @@ from puya.ir.avm_ops import AVMOp from puya.ir.builder import arc4 from puya.ir.builder._tuple_util import build_tuple_registers -from puya.ir.builder._utils import assign_targets, assign_temp +from puya.ir.builder._utils import ( + assign, + assign_targets, + assign_temp, + get_implicit_return_is_original, +) from puya.ir.context import IRFunctionBuildContext from puya.ir.models import ( Intrinsic, + UInt64Constant, Value, ValueProvider, ValueTuple, ) -from puya.ir.types_ import get_wtype_arity +from puya.ir.types_ import IRType, get_wtype_arity +from puya.ir.utils import format_tuple_index from puya.parse import SourceLocation logger = log.get_logger(__name__) @@ -33,7 +40,11 @@ def handle_assignment_expr( ) -> Sequence[Value]: expr_values = context.visitor.visit_expr(value) return handle_assignment( - context, target=target, value=expr_values, assignment_location=assignment_location + context, + target=target, + value=expr_values, + is_nested_update=False, + assignment_location=assignment_location, ) @@ -41,50 +52,41 @@ def handle_assignment( context: IRFunctionBuildContext, target: awst_nodes.Expression, value: ValueProvider, - assignment_location: SourceLocation | None, - *, - is_mutation: bool = False, -) -> Sequence[Value]: - # separating out the target LValue check allows the _handle_assignment to statically assert - # all LValue types are covered - if not isinstance(target, awst_nodes.Lvalue): - raise CodeError("expression is not valid as an assignment target", target.source_location) - return _handle_assignment( - context, - target, - value, - assignment_location or target.source_location, - is_mutation=is_mutation, - ) - - -def _handle_assignment( - context: IRFunctionBuildContext, - target: awst_nodes.Lvalue, - value: ValueProvider, assignment_location: SourceLocation, *, - is_mutation: bool, + is_nested_update: bool, ) -> Sequence[Value]: match target: - case awst_nodes.VarExpression(name=var_name, source_location=var_loc, wtype=var_type): - is_implicit_return = var_name in ( - p.name for p in context.subroutine.parameters if p.implicit_return + # special case: a nested update can cause a tuple item to be re-assigned + # TODO: refactor this so that this special case is handled where it originates + case awst_nodes.TupleItemExpression( + wtype=var_type, source_location=var_loc + ) as ti_expr if ( + # including assumptions in condition, so assignment will error if they are not true + not var_type.immutable # mutable arc4 type + and is_nested_update # is a reassignment due to a nested update + and var_type.scalar_type is not None # only updating a scalar value + ): + base_name = _get_tuple_var_name(ti_expr) + return _handle_maybe_implicit_return_assignment( + context, + base_name=base_name, + wtype=var_type, + value=value, + var_loc=var_loc, + assignment_loc=assignment_location, + is_nested_update=is_nested_update, ) - if is_implicit_return and not is_mutation: - raise CodeError( - f"cannot reassign mutable parameter {var_name!r}" - " which is being passed by reference", - assignment_location, - ) - registers = build_tuple_registers(context, var_name, var_type, var_loc) - assign_targets( + case awst_nodes.VarExpression(name=base_name, source_location=var_loc, wtype=var_type): + return _handle_maybe_implicit_return_assignment( context, - source=value, - targets=registers, - assignment_location=assignment_location, + base_name=base_name, + wtype=var_type, + value=value, + var_loc=var_loc, + assignment_loc=assignment_location, + is_nested_update=is_nested_update, ) - return registers case awst_nodes.TupleExpression() as tup_expr: source = context.visitor.materialise_value_provider( value, description="tuple_assignment" @@ -105,6 +107,7 @@ def _handle_assignment( context, target=item, value=nested_value, + is_nested_update=False, assignment_location=assignment_location, ) ) @@ -192,6 +195,7 @@ def _handle_assignment( context, target=ix_expr, value=value, + is_nested_update=is_nested_update, source_location=assignment_location, ), ) @@ -210,6 +214,7 @@ def _handle_assignment( context, target=field_expr, value=value, + is_nested_update=is_nested_update, source_location=assignment_location, ), ) @@ -220,4 +225,49 @@ def _handle_assignment( assignment_location, ) case _: - typing.assert_never(target) + raise CodeError( + "expression is not valid as an assignment target", target.source_location + ) + + +def _handle_maybe_implicit_return_assignment( + context: IRFunctionBuildContext, + *, + base_name: str, + wtype: wtypes.WType, + value: ValueProvider, + var_loc: SourceLocation, + assignment_loc: SourceLocation, + is_nested_update: bool, +) -> Sequence[Value]: + registers = build_tuple_registers(context, base_name, wtype, var_loc) + for register in registers: + is_implicit_return = register.name in ( + p.name for p in context.subroutine.parameters if p.implicit_return + ) + # if an implicitly returned value is explicitly reassigned, then set a register which will + # prevent the original from being updated any further + if is_implicit_return and not is_nested_update: + assign( + context, + UInt64Constant(value=0, ir_type=IRType.bool, source_location=None), + name=get_implicit_return_is_original(register.name), + assignment_location=None, + ) + + assign_targets( + context, + source=value, + targets=registers, + assignment_location=assignment_loc, + ) + return registers + + +def _get_tuple_var_name(expr: awst_nodes.TupleItemExpression) -> str: + if isinstance(expr.base.wtype, wtypes.WTuple): + if isinstance(expr.base, awst_nodes.TupleItemExpression): + return format_tuple_index(expr.base.wtype, _get_tuple_var_name(expr.base), expr.index) + if isinstance(expr.base, awst_nodes.VarExpression): + return format_tuple_index(expr.base.wtype, expr.base.name, expr.index) + raise CodeError("invalid assignment target", expr.base.source_location) diff --git a/src/puya/ir/builder/main.py b/src/puya/ir/builder/main.py index f458714df3..030251e0ec 100644 --- a/src/puya/ir/builder/main.py +++ b/src/puya/ir/builder/main.py @@ -1,6 +1,8 @@ import typing from collections.abc import Iterator, Sequence +import attrs + import puya.awst.visitors import puya.ir.builder.storage from puya import algo_constants, log, utils @@ -23,9 +25,14 @@ assign_targets, assign_temp, extract_const_int, + get_implicit_return_is_original, + get_implicit_return_out, mktemp, ) -from puya.ir.builder.assignment import handle_assignment, handle_assignment_expr +from puya.ir.builder.assignment import ( + handle_assignment, + handle_assignment_expr, +) from puya.ir.builder.bytes import ( visit_bytes_intersection_slice_expression, visit_bytes_slice_expression, @@ -94,8 +101,22 @@ def build_body( builder = cls(ctx, function, subroutine) func_ctx = builder.context with func_ctx.log_exceptions(): - function.body.accept(builder) block_builder = func_ctx.block_builder + for p in subroutine.parameters: + if p.implicit_return: + assign( + func_ctx, + UInt64Constant(value=1, ir_type=IRType.bool, source_location=None), + name=get_implicit_return_is_original(p.name), + assignment_location=None, + ) + assign( + func_ctx, + p, + name=get_implicit_return_out(p.name), + assignment_location=None, + ) + function.body.accept(builder) final_block = block_builder.active_block if not final_block.terminated: if function.return_type != wtypes.void_wtype: @@ -110,7 +131,9 @@ def build_body( block_builder.terminate( SubroutineReturn( result=[ - block_builder.ssa.read_variable(p.name, p.ir_type, final_block) + block_builder.ssa.read_variable( + get_implicit_return_out(p.name), p.ir_type, final_block + ) for p in subroutine.parameters if p.implicit_return ], @@ -262,6 +285,7 @@ def visit_biguint_postfix_unary_operation( self.context, target=expr.target, value=new_value, + is_nested_update=False, assignment_location=expr.source_location, ) return target_value @@ -285,6 +309,7 @@ def visit_uint64_postfix_unary_operation( self.context, target=expr.target, value=new_value, + is_nested_update=False, assignment_location=expr.source_location, ) return target_value @@ -1006,6 +1031,7 @@ def visit_uint64_augmented_assignment( self.context, target=statement.target, value=expr, + is_nested_update=False, assignment_location=statement.source_location, ) @@ -1020,6 +1046,7 @@ def visit_biguint_augmented_assignment( self.context, target=statement.target, value=expr, + is_nested_update=False, assignment_location=statement.source_location, ) @@ -1034,6 +1061,7 @@ def visit_bytes_augmented_assignment( self.context, target=statement.target, value=expr, + is_nested_update=False, assignment_location=statement.source_location, ) @@ -1074,15 +1102,17 @@ def visit_array_concat(self, expr: awst_nodes.ArrayConcat) -> TExpression: ) def visit_array_extend(self, expr: awst_nodes.ArrayExtend) -> TExpression: + concat_result = arc4.concat_values( + self.context, + left_expr=expr.base, + right_expr=expr.other, + source_location=expr.source_location, + ) return arc4.handle_arc4_assign( self.context, target=expr.base, - value=arc4.concat_values( - self.context, - left_expr=expr.base, - right_expr=expr.other, - source_location=expr.source_location, - ), + value=concat_result, + is_nested_update=True, source_location=expr.source_location, ) diff --git a/test_cases/arc4_types/mutable_params.py b/test_cases/arc4_types/mutable_params.py index c151e6043c..4b14c475d7 100644 --- a/test_cases/arc4_types/mutable_params.py +++ b/test_cases/arc4_types/mutable_params.py @@ -1,6 +1,6 @@ import typing -from algopy import Contract, subroutine +from algopy import Contract, UInt64, subroutine from algopy.arc4 import ( Bool, StaticArray, @@ -79,8 +79,37 @@ def mutating_copies(self) -> None: self.other_routine_2(my_array_copy_2) assert my_array_copy_2[0] == UInt8(10), "my_array_copy_2 should have mutated value" - # tuples of mutable types only work with a .copy() - self.other_routine_3((my_array.copy(), my_array_copy_2.copy(), my_array_copy_2.copy())) + my_array_copy_3 = my_array_copy.copy() + + originals = (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()) + self.mutate_tuple_items_and_reassign( + (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + start=UInt64(0), + reassign=True, + ) + assert originals == (my_array, my_array_copy_2, my_array_copy_3) + + self.mutate_tuple_items_and_reassign( + (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + ) + + assert my_array[0] == 100 + assert my_array_copy_2[0] == 101 + assert my_array_copy_3[0] == 102 + assert my_array[1] == 103 + assert my_array_copy_2[1] == 104 + assert my_array_copy_3[1] == 105 + + self.mutate_tuple_items_and_reassign( + (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + ) + + assert my_array[0] == 200 + assert my_array_copy_2[0] == 201 + assert my_array_copy_3[0] == 202 + assert my_array[1] == 206 + assert my_array_copy_2[1] == 207 + assert my_array_copy_3[1] == 208 # Nested array items should still require a copy nested = StructWithArray(test_array=my_array.copy()) @@ -99,14 +128,32 @@ def other_routine_2(self, array: TestArray) -> TestArray: return copy @subroutine - def other_routine_3(self, arrays: tuple[TestArray, TestArray, TestArray]) -> None: - # this modifies the local copy - for array in arrays: - array[0] = UInt8(99) - - arrays[0][0] = UInt8(99) - arrays[1][0] = UInt8(99) - arrays[2][0] = UInt8(99) + def mutate_tuple_items_and_reassign( + self, arrays: tuple[TestArray, TestArray, TestArray], *, start: UInt64, reassign: bool + ) -> None: + arrays[0][0] = UInt8(start) + arrays[1][0] = UInt8(start + 1) + arrays[2][0] = UInt8(start + 2) + + assert arrays[0][0] == start + assert arrays[1][0] == start + 1 + assert arrays[2][0] == start + 2 + + arrays[0][1] = UInt8(start + 3) + arrays[1][1] = UInt8(start + 4) + arrays[2][1] = UInt8(start + 5) + + # overwrite params + if reassign: + arrays = (arrays[0].copy(), arrays[1].copy(), arrays[2].copy()) + + arrays[0][1] = UInt8(start + 6) + arrays[1][1] = UInt8(start + 7) + arrays[2][1] = UInt8(start + 8) + + assert arrays[0][1] == start + 6 + assert arrays[1][1] == start + 7 + assert arrays[2][1] == start + 8 def clear_state_program(self) -> bool: return True diff --git a/test_cases/arc4_types/mutable_params2.py b/test_cases/arc4_types/mutable_params2.py new file mode 100644 index 0000000000..fb71610159 --- /dev/null +++ b/test_cases/arc4_types/mutable_params2.py @@ -0,0 +1,25 @@ +from algopy import arc4, subroutine + + +class MutableParams2(arc4.ARC4Contract): + @arc4.abimethod() + def test_array_rebinding(self) -> None: + a = arc4.DynamicBytes(0) + self.maybe_modify_array(a, assign_local=True) + assert a == arc4.DynamicBytes(0, 1) + + a = arc4.DynamicBytes(1) + self.maybe_modify_array(a, assign_local=False) + assert a == arc4.DynamicBytes(1, 42, 4) + + @subroutine + def maybe_modify_array(self, a: arc4.DynamicBytes, *, assign_local: bool) -> None: # v0 + if assign_local: + a.append(arc4.Byte(1)) # v1: modify out + a = arc4.DynamicBytes(1, 2, 3) # v2: BOUNDARY + a.append(arc4.Byte(4)) # v3: local only + a = arc4.DynamicBytes(1, 2, 4) # v4: local only + else: + a.append(arc4.Byte(42)) # v5: modify out + + a.append(arc4.Byte(4)) # v6: modify out IF not b ELSE local only diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.mir b/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.mir index 10744a66cc..82d8a70f31 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.mir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.mir @@ -1,4 +1,4 @@ -// Op Stack (out) +// Op Stack (out) // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program() -> uint64: main_block@0: // arc4_types/mutable_params.py:29 @@ -6,7 +6,7 @@ main_block@0: callsub mutating_copies // arc4_types/mutable_params.py:31 // return True - int 1 1 + int 1 1 return @@ -20,21 +20,21 @@ mutating_copies: mutating_copies_block@0: // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - byte 0x01020304 0x01020304 + byte 0x01020304 0x01020304 // arc4_types/mutable_params.py:46 // my_array[2] = UInt8(5) - byte 0x05 0x01020304,0x05 - replace2 2 my_array#1 + byte 0x05 0x01020304,0x05 + replace2 2 my_array#1 // arc4_types/mutable_params.py:49 // assert my_array[2] == UInt8(5), "my_array should be mutated" - l-load-copy my_array#1 0 my_array#1,my_array#1 (copy) - extract 2 1 // on error: Index access is out of bounds my_array#1,reinterpret_biguint%2#0 - byte 0x05 my_array#1,reinterpret_biguint%2#0,0x05 - b== my_array#1,tmp%1#0 - assert // my_array should be mutated my_array#1 + l-load-copy my_array#1 0 my_array#1,my_array#1 (copy) + extract 2 1 // on error: Index access is out of bounds my_array#1,reinterpret_biguint%2#0 + byte 0x05 my_array#1,reinterpret_biguint%2#0,0x05 + b== my_array#1,tmp%1#0 + assert // my_array should be mutated my_array#1 // arc4_types/mutable_params.py:52 // t, f = self.other_routine(my_array, my_struct) - l-load my_array#1 0 my_array#1 + l-load my_array#1 0 my_array#1 // arc4_types/mutable_params.py:36-41 // my_struct = TestStruct( // b_val=Bool(True), @@ -42,48 +42,48 @@ mutating_copies_block@0: // s_val_1=String("Happy"), // s_val_2=String("Days"), // ) - byte 0x80320006000d00054861707079000444617973 my_array#1,0x80320006000d00054861707079000444617973 + byte 0x80320006000d00054861707079000444617973 my_array#1,0x80320006000d00054861707079000444617973 // arc4_types/mutable_params.py:52 // t, f = self.other_routine(my_array, my_struct) - callsub other_routine t#0,f#0,my_array#1,my_struct#1 + callsub other_routine t#0,f#0,my_array#1,my_struct#1 // arc4_types/mutable_params.py:53 // assert t - l-load t#0 3 f#0,my_array#1,my_struct#1,t#0 - assert f#0,my_array#1,my_struct#1 + l-load t#0 3 f#0,my_array#1,my_struct#1,t#0 + assert f#0,my_array#1,my_struct#1 // arc4_types/mutable_params.py:54 // assert not f - l-load f#0 2 my_array#1,my_struct#1,f#0 - ! my_array#1,my_struct#1,tmp%2#0 - assert my_array#1,my_struct#1 + l-load f#0 2 my_array#1,my_struct#1,f#0 + ! my_array#1,my_struct#1,tmp%2#0 + assert my_array#1,my_struct#1 // arc4_types/mutable_params.py:56 // assert my_array[1] == UInt8(5), "my_array has been mutated by the subroutine" - l-load-copy my_array#1 1 my_array#1,my_struct#1,my_array#1 (copy) - extract 1 1 // on error: Index access is out of bounds my_array#1,my_struct#1,reinterpret_biguint%4#0 - byte 0x05 my_array#1,my_struct#1,reinterpret_biguint%4#0,0x05 - b== my_array#1,my_struct#1,tmp%3#0 - assert // my_array has been mutated by the subroutine my_array#1,my_struct#1 + l-load-copy my_array#1 1 my_array#1,my_struct#1,my_array#1 (copy) + extract 1 1 // on error: Index access is out of bounds my_array#1,my_struct#1,reinterpret_biguint%4#0 + byte 0x05 my_array#1,my_struct#1,reinterpret_biguint%4#0,0x05 + b== my_array#1,my_struct#1,tmp%3#0 + assert // my_array has been mutated by the subroutine my_array#1,my_struct#1 // arc4_types/mutable_params.py:58 // assert my_struct.s_val_1 == String( - l-load-copy my_struct#1 0 my_array#1,my_struct#1,my_struct#1 (copy) - int 2 my_array#1,my_struct#1,my_struct#1 (copy),2 - extract_uint16 my_array#1,my_struct#1,item_start_offset%0#0 - l-load-copy my_struct#1 1 my_array#1,my_struct#1,item_start_offset%0#0,my_struct#1 (copy) - int 4 my_array#1,my_struct#1,item_start_offset%0#0,my_struct#1 (copy),4 - extract_uint16 my_array#1,my_struct#1,item_start_offset%0#0,item_end_offset%0#0 - l-load my_struct#1 2 my_array#1,item_start_offset%0#0,item_end_offset%0#0,my_struct#1 - l-load item_start_offset%0#0 2 my_array#1,item_end_offset%0#0,my_struct#1,item_start_offset%0#0 - l-load item_end_offset%0#0 2 my_array#1,my_struct#1,item_start_offset%0#0,item_end_offset%0#0 - substring3 my_array#1,tmp%4#0 + l-load-copy my_struct#1 0 my_array#1,my_struct#1,my_struct#1 (copy) + int 2 my_array#1,my_struct#1,my_struct#1 (copy),2 + extract_uint16 my_array#1,my_struct#1,item_start_offset%0#0 + l-load-copy my_struct#1 1 my_array#1,my_struct#1,item_start_offset%0#0,my_struct#1 (copy) + int 4 my_array#1,my_struct#1,item_start_offset%0#0,my_struct#1 (copy),4 + extract_uint16 my_array#1,my_struct#1,item_start_offset%0#0,item_end_offset%0#0 + l-load my_struct#1 2 my_array#1,item_start_offset%0#0,item_end_offset%0#0,my_struct#1 + l-load item_start_offset%0#0 2 my_array#1,item_end_offset%0#0,my_struct#1,item_start_offset%0#0 + l-load item_end_offset%0#0 2 my_array#1,my_struct#1,item_start_offset%0#0,item_end_offset%0#0 + substring3 my_array#1,tmp%4#0 // arc4_types/mutable_params.py:58-60 // assert my_struct.s_val_1 == String( // "AARRGH!" // ), "my_struct has been mutated by the subroutine" - byte 0x000741415252474821 my_array#1,tmp%4#0,0x000741415252474821 - == my_array#1,tmp%5#0 - assert // my_struct has been mutated by the subroutine my_array#1 + byte 0x000741415252474821 my_array#1,tmp%4#0,0x000741415252474821 + == my_array#1,tmp%5#0 + assert // my_struct has been mutated by the subroutine my_array#1 // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - byte 0x01020304 my_array#1,0x01020304 + byte 0x01020304 my_array#1,0x01020304 // arc4_types/mutable_params.py:36-41 // my_struct = TestStruct( // b_val=Bool(True), @@ -91,194 +91,514 @@ mutating_copies_block@0: // s_val_1=String("Happy"), // s_val_2=String("Days"), // ) - byte 0x80320006000d00054861707079000444617973 my_array#1,0x01020304,0x80320006000d00054861707079000444617973 + byte 0x80320006000d00054861707079000444617973 my_array#1,0x01020304,0x80320006000d00054861707079000444617973 // arc4_types/mutable_params.py:63 // self.other_routine(my_array_copy.copy(), my_struct_copy.copy()) - callsub other_routine my_array#1,other_routine%4#0,other_routine%5#0,other_routine%6#0,other_routine%7#0 - pop 1 my_array#1,other_routine%4#0,other_routine%5#0,other_routine%6#0 - pop 1 my_array#1,other_routine%4#0,other_routine%5#0 - pop 1 my_array#1,other_routine%4#0 - pop 1 my_array#1 + callsub other_routine my_array#1,other_routine%4#0,other_routine%5#0,other_routine%6#0,other_routine%7#0 + pop 1 my_array#1,other_routine%4#0,other_routine%5#0,other_routine%6#0 + pop 1 my_array#1,other_routine%4#0,other_routine%5#0 + pop 1 my_array#1,other_routine%4#0 + pop 1 my_array#1 // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - byte 0x01020304 my_array#1,0x01020304 + byte 0x01020304 my_array#1,0x01020304 // arc4_types/mutable_params.py:75 // my_array_copy_2 = self.other_routine_2(my_array_copy_2) - callsub other_routine_2 my_array#1,my_array_copy_2#2,my_array_copy_2#1 - pop 1 my_array#1,my_array_copy_2#2 - l-store my_array_copy_2#2 0 my_array#1,my_array_copy_2#2 + callsub other_routine_2 my_array#1,my_array_copy_2#2,my_array_copy_2#1 + pop 1 my_array#1,my_array_copy_2#2 + l-store my_array_copy_2#2 0 my_array#1,my_array_copy_2#2 // arc4_types/mutable_params.py:77 // assert my_array_copy_2[0] == UInt8(1), "my_array_copy_2 should have original value" - l-load-copy my_array_copy_2#2 0 my_array#1,my_array_copy_2#2,my_array_copy_2#2 (copy) - extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,reinterpret_biguint%8#0 - byte 0x01 my_array#1,my_array_copy_2#2,reinterpret_biguint%8#0,0x01 - b== my_array#1,my_array_copy_2#2,tmp%9#0 - assert // my_array_copy_2 should have original value my_array#1,my_array_copy_2#2 + l-load-copy my_array_copy_2#2 0 my_array#1,my_array_copy_2#2,my_array_copy_2#2 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,reinterpret_biguint%8#0 + byte 0x01 my_array#1,my_array_copy_2#2,reinterpret_biguint%8#0,0x01 + b== my_array#1,my_array_copy_2#2,tmp%9#0 + assert // my_array_copy_2 should have original value my_array#1,my_array_copy_2#2 // arc4_types/mutable_params.py:79 // self.other_routine_2(my_array_copy_2) - l-load my_array_copy_2#2 0 my_array#1,my_array_copy_2#2 - callsub other_routine_2 my_array#1,other_routine_2%2#0,my_array_copy_2#2 - l-store my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,other_routine_2%2#0 - pop 1 my_array#1,my_array_copy_2#2 + l-load my_array_copy_2#2 0 my_array#1,my_array_copy_2#2 + callsub other_routine_2 my_array#1,other_routine_2%2#0,my_array_copy_2#2 + l-store my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,other_routine_2%2#0 + pop 1 my_array#1,my_array_copy_2#2 // arc4_types/mutable_params.py:80 // assert my_array_copy_2[0] == UInt8(10), "my_array_copy_2 should have mutated value" - l-load-copy my_array_copy_2#2 0 my_array#1,my_array_copy_2#2,my_array_copy_2#2 (copy) - extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,reinterpret_biguint%10#0 - byte 0x0a my_array#1,my_array_copy_2#2,reinterpret_biguint%10#0,0x0a - b== my_array#1,my_array_copy_2#2,tmp%10#0 - assert // my_array_copy_2 should have mutated value my_array#1,my_array_copy_2#2 - // arc4_types/mutable_params.py:83 - // self.other_routine_3((my_array.copy(), my_array_copy_2.copy(), my_array_copy_2.copy())) - l-load-copy my_array#1 1 my_array#1,my_array_copy_2#2,my_array#1 (copy) - l-load-copy my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,my_array#1 (copy),my_array_copy_2#2 (copy) - l-load my_array_copy_2#2 2 my_array#1,my_array#1 (copy),my_array_copy_2#2 (copy),my_array_copy_2#2 - callsub other_routine_3 my_array#1,other_routine_3%0#0,other_routine_3%1#0,other_routine_3%2#0 - pop 1 my_array#1,other_routine_3%0#0,other_routine_3%1#0 - pop 1 my_array#1,other_routine_3%0#0 - pop 1 my_array#1 + l-load-copy my_array_copy_2#2 0 my_array#1,my_array_copy_2#2,my_array_copy_2#2 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,reinterpret_biguint%10#0 + byte 0x0a my_array#1,my_array_copy_2#2,reinterpret_biguint%10#0,0x0a + b== my_array#1,my_array_copy_2#2,tmp%10#0 + assert // my_array_copy_2 should have mutated value my_array#1,my_array_copy_2#2 + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) + l-load-copy my_array#1 1 my_array#1,my_array_copy_2#2,my_array#1 (copy) + l-load-copy my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,my_array#1 (copy),my_array_copy_2#2 (copy) + // arc4_types/mutable_params.py:35 + // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) + byte 0x01020304 my_array#1,my_array_copy_2#2,my_array#1 (copy),my_array_copy_2#2 (copy),0x01020304 // arc4_types/mutable_params.py:87 + // start=UInt64(0), + int 0 my_array#1,my_array_copy_2#2,my_array#1 (copy),my_array_copy_2#2 (copy),0x01020304,0 + // arc4_types/mutable_params.py:88 + // reassign=True, + int 1 my_array#1,my_array_copy_2#2,my_array#1 (copy),my_array_copy_2#2 (copy),0x01020304,0,1 + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) + callsub mutate_tuple_items_and_reassign my_array#1,my_array_copy_2#2,mutate_tuple_items_and_reassign%0#0,mutate_tuple_items_and_reassign%1#0,mutate_tuple_items_and_reassign%2#0 + pop 1 my_array#1,my_array_copy_2#2,mutate_tuple_items_and_reassign%0#0,mutate_tuple_items_and_reassign%1#0 + pop 1 my_array#1,my_array_copy_2#2,mutate_tuple_items_and_reassign%0#0 + pop 1 my_array#1,my_array_copy_2#2 + // arc4_types/mutable_params.py:92-94 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + // ) + l-load my_array#1 1 my_array_copy_2#2,my_array#1 + l-load my_array_copy_2#2 1 my_array#1,my_array_copy_2#2 + // arc4_types/mutable_params.py:35 + // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) + byte 0x01020304 my_array#1,my_array_copy_2#2,0x01020304 + // arc4_types/mutable_params.py:93 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + int 100 my_array#1,my_array_copy_2#2,0x01020304,100 + int 1 my_array#1,my_array_copy_2#2,0x01020304,100,1 + // arc4_types/mutable_params.py:92-94 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + // ) + callsub mutate_tuple_items_and_reassign my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:96 + // assert my_array[0] == 100 + l-load-copy my_array#1 2 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array#1 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%12#0 + byte 0x64 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%12#0,0x64 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%16#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:97 + // assert my_array_copy_2[0] == 101 + l-load-copy my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_2#2 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%14#0 + byte 0x65 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%14#0,0x65 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%17#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:98 + // assert my_array_copy_3[0] == 102 + l-load-copy my_array_copy_3#1 0 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_3#1 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%16#0 + byte 0x66 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%16#0,0x66 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%18#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:99 + // assert my_array[1] == 103 + l-load-copy my_array#1 2 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array#1 (copy) + extract 1 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%18#0 + byte 0x67 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%18#0,0x67 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%19#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:100 + // assert my_array_copy_2[1] == 104 + l-load-copy my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_2#2 (copy) + extract 1 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%20#0 + byte 0x68 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%20#0,0x68 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%20#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:101 + // assert my_array_copy_3[1] == 105 + l-load-copy my_array_copy_3#1 0 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_3#1 (copy) + extract 1 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%22#0 + byte 0x69 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%22#0,0x69 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%21#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:103-105 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + // ) + l-load my_array#1 2 my_array_copy_2#2,my_array_copy_3#1,my_array#1 + l-load my_array_copy_2#2 2 my_array_copy_3#1,my_array#1,my_array_copy_2#2 + l-load my_array_copy_3#1 2 my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:104 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + int 200 my_array#1,my_array_copy_2#2,my_array_copy_3#1,200 + int 0 my_array#1,my_array_copy_2#2,my_array_copy_3#1,200,0 + // arc4_types/mutable_params.py:103-105 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + // ) + callsub mutate_tuple_items_and_reassign my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:107 + // assert my_array[0] == 200 + l-load-copy my_array#1 2 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array#1 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%24#0 + byte 0xc8 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%24#0,0xc8 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%22#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:108 + // assert my_array_copy_2[0] == 201 + l-load-copy my_array_copy_2#2 1 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_2#2 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%26#0 + byte 0xc9 my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%26#0,0xc9 + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%23#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:109 + // assert my_array_copy_3[0] == 202 + l-load-copy my_array_copy_3#1 0 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array_copy_3#1 (copy) + extract 0 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%28#0 + byte 0xca my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%28#0,0xca + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%24#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:110 + // assert my_array[1] == 206 + l-load-copy my_array#1 2 my_array#1,my_array_copy_2#2,my_array_copy_3#1,my_array#1 (copy) + extract 1 1 // on error: Index access is out of bounds my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%30#0 + byte 0xce my_array#1,my_array_copy_2#2,my_array_copy_3#1,reinterpret_biguint%30#0,0xce + b== my_array#1,my_array_copy_2#2,my_array_copy_3#1,tmp%25#0 + assert my_array#1,my_array_copy_2#2,my_array_copy_3#1 + // arc4_types/mutable_params.py:111 + // assert my_array_copy_2[1] == 207 + l-load my_array_copy_2#2 1 my_array#1,my_array_copy_3#1,my_array_copy_2#2 + extract 1 1 // on error: Index access is out of bounds my_array#1,my_array_copy_3#1,reinterpret_biguint%32#0 + byte 0xcf my_array#1,my_array_copy_3#1,reinterpret_biguint%32#0,0xcf + b== my_array#1,my_array_copy_3#1,tmp%26#0 + assert my_array#1,my_array_copy_3#1 + // arc4_types/mutable_params.py:112 + // assert my_array_copy_3[1] == 208 + l-load my_array_copy_3#1 0 my_array#1,my_array_copy_3#1 + extract 1 1 // on error: Index access is out of bounds my_array#1,reinterpret_biguint%34#0 + byte 0xd0 my_array#1,reinterpret_biguint%34#0,0xd0 + b== my_array#1,tmp%27#0 + assert my_array#1 + // arc4_types/mutable_params.py:116 // self.other_routine_2(nested.test_array.copy()) - l-load my_array#1 0 my_array#1 - extract 0 4 // on error: Index access is out of bounds tmp%11#0 - callsub other_routine_2 other_routine_2%4#0,other_routine_2%5#0 - pop 1 other_routine_2%4#0 + l-load my_array#1 0 my_array#1 + extract 0 4 // on error: Index access is out of bounds tmp%28#0 + callsub other_routine_2 other_routine_2%4#0,other_routine_2%5#0 + pop 1 other_routine_2%4#0 pop 1 retsub // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> uint64, uint64, bytes, bytes: -other_routine: (𝕡) array#0,struct#0 | - // arc4_types/mutable_params.py:89-90 +other_routine: (𝕡) array#0,struct#0 | + // arc4_types/mutable_params.py:118-119 // @subroutine // def other_routine(self, array: TestArray, struct: TestStruct) -> tuple[bool, bool]: - proto 2 4 (𝕡) array#0,struct#0 | + proto 2 4 (𝕡) array#0,struct#0 | -other_routine_block@0: (𝕡) array#0,struct#0 | - // arc4_types/mutable_params.py:91 +other_routine_block@0: (𝕡) array#0,struct#0 | + // arc4_types/mutable_params.py:120 // array[1] = UInt8(5) - p-load array#0 (𝕡) array#0,struct#0 | array#0 (copy) - byte 0x05 (𝕡) array#0,struct#0 | array#0 (copy),0x05 - replace2 1 (𝕡) array#0,struct#0 | array#0 - p-store array#0 (𝕡) array#0,struct#0 | - // arc4_types/mutable_params.py:92 + p-load array#0 (𝕡) array#0,struct#0 | array#0 (copy) + byte 0x05 (𝕡) array#0,struct#0 | array#0 (copy),0x05 + replace2 1 (𝕡) array#0,struct#0 | array#0 + p-store array#0 (𝕡) array#0,struct#0 | + // arc4_types/mutable_params.py:121 // struct.s_val_1 = String("AARRGH!") - p-load struct#0 (𝕡) array#0,struct#0 | struct#0 (copy) - int 2 (𝕡) array#0,struct#0 | struct#0 (copy),2 - extract_uint16 (𝕡) array#0,struct#0 | item_offset%0#0 - p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy) - int 0 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy),0 - l-load-copy item_offset%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy),0,item_offset%0#0 (copy) - extract3 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0 - p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,struct#0 (copy) - int 4 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,struct#0 (copy),4 - extract_uint16 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0 - p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,struct#0 (copy) - len (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0 - p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0,struct#0 (copy) - l-load-copy next_item_offset%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0,struct#0 (copy),next_item_offset%0#0 (copy) - l-load total_data_length%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,struct#0 (copy),next_item_offset%0#0 (copy),total_data_length%0#0 - substring3 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,data_beyond_item%0#0 - l-load data_up_to_item%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,data_up_to_item%0#0 - byte 0x000741415252474821 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,data_up_to_item%0#0,0x000741415252474821 - concat (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,updated_data%0#0 - l-load data_beyond_item%0#0 1 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,updated_data%0#0,data_beyond_item%0#0 - concat (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,updated_data%1#0 - l-load next_item_offset%0#0 1 (𝕡) array#0,struct#0 | item_offset%0#0,updated_data%1#0,next_item_offset%0#0 - l-load item_offset%0#0 2 (𝕡) array#0,struct#0 | updated_data%1#0,next_item_offset%0#0,item_offset%0#0 - - (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0 - l-load-copy updated_data%1#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,updated_data%1#0 (copy) - int 4 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,updated_data%1#0 (copy),4 - extract_uint16 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%0#0 - int 9 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%0#0,9 - + (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%1#0 - l-load item_length%0#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset%1#0,item_length%0#0 - - (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset%2#0 - itob (𝕡) array#0,struct#0 | updated_data%1#0,as_bytes%1#0 - extract 6 2 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset_bytes%0#0 - l-load updated_data%1#0 1 (𝕡) array#0,struct#0 | tail_offset_bytes%0#0,updated_data%1#0 - l-load tail_offset_bytes%0#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset_bytes%0#0 - replace2 4 (𝕡) array#0,struct#0 | struct#0 - p-store struct#0 (𝕡) array#0,struct#0 | - // arc4_types/mutable_params.py:93 + p-load struct#0 (𝕡) array#0,struct#0 | struct#0 (copy) + int 2 (𝕡) array#0,struct#0 | struct#0 (copy),2 + extract_uint16 (𝕡) array#0,struct#0 | item_offset%0#0 + p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy) + int 0 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy),0 + l-load-copy item_offset%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,struct#0 (copy),0,item_offset%0#0 (copy) + extract3 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0 + p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,struct#0 (copy) + int 4 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,struct#0 (copy),4 + extract_uint16 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0 + p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,struct#0 (copy) + len (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0 + p-load struct#0 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0,struct#0 (copy) + l-load-copy next_item_offset%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,total_data_length%0#0,struct#0 (copy),next_item_offset%0#0 (copy) + l-load total_data_length%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,struct#0 (copy),next_item_offset%0#0 (copy),total_data_length%0#0 + substring3 (𝕡) array#0,struct#0 | item_offset%0#0,data_up_to_item%0#0,next_item_offset%0#0,data_beyond_item%0#0 + l-load data_up_to_item%0#0 2 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,data_up_to_item%0#0 + byte 0x000741415252474821 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,data_up_to_item%0#0,0x000741415252474821 + concat (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,data_beyond_item%0#0,updated_data%0#0 + l-load data_beyond_item%0#0 1 (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,updated_data%0#0,data_beyond_item%0#0 + concat (𝕡) array#0,struct#0 | item_offset%0#0,next_item_offset%0#0,updated_data%1#0 + l-load next_item_offset%0#0 1 (𝕡) array#0,struct#0 | item_offset%0#0,updated_data%1#0,next_item_offset%0#0 + l-load item_offset%0#0 2 (𝕡) array#0,struct#0 | updated_data%1#0,next_item_offset%0#0,item_offset%0#0 + - (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0 + l-load-copy updated_data%1#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,updated_data%1#0 (copy) + int 4 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,updated_data%1#0 (copy),4 + extract_uint16 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%0#0 + int 9 (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%0#0,9 + + (𝕡) array#0,struct#0 | updated_data%1#0,item_length%0#0,tail_offset%1#0 + l-load item_length%0#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset%1#0,item_length%0#0 + - (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset%2#0 + itob (𝕡) array#0,struct#0 | updated_data%1#0,as_bytes%1#0 + extract 6 2 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset_bytes%0#0 + l-load updated_data%1#0 1 (𝕡) array#0,struct#0 | tail_offset_bytes%0#0,updated_data%1#0 + l-load tail_offset_bytes%0#0 1 (𝕡) array#0,struct#0 | updated_data%1#0,tail_offset_bytes%0#0 + replace2 4 (𝕡) array#0,struct#0 | struct#0 + p-store struct#0 (𝕡) array#0,struct#0 | + // arc4_types/mutable_params.py:122 // return True, False - int 1 (𝕡) array#0,struct#0 | 1 - int 0 (𝕡) array#0,struct#0 | 1,0 - p-load array#0 (𝕡) array#0,struct#0 | 1,0,array#0 (copy) - p-load struct#0 (𝕡) array#0,struct#0 | 1,0,array#0 (copy),struct#0 (copy) - retsub 1,0,array#0 (copy),struct#0 (copy) + int 1 (𝕡) array#0,struct#0 | 1 + int 0 (𝕡) array#0,struct#0 | 1,0 + p-load array#0 (𝕡) array#0,struct#0 | 1,0,array#0 (copy) + p-load struct#0 (𝕡) array#0,struct#0 | 1,0,array#0 (copy),struct#0 (copy) + retsub 1,0,array#0 (copy),struct#0 (copy) // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> bytes, bytes: -other_routine_2: (𝕡) array#0 | - // arc4_types/mutable_params.py:95-96 +other_routine_2: (𝕡) array#0 | + // arc4_types/mutable_params.py:124-125 // @subroutine // def other_routine_2(self, array: TestArray) -> TestArray: - proto 1 2 (𝕡) array#0 | + proto 1 2 (𝕡) array#0 | -other_routine_2_block@0: (𝕡) array#0 | - // arc4_types/mutable_params.py:98 +other_routine_2_block@0: (𝕡) array#0 | + // arc4_types/mutable_params.py:127 // array[0] = UInt8(10) - p-load array#0 (𝕡) array#0 | array#0 (copy) - byte 0x0a (𝕡) array#0 | array#0 (copy),0x0a - replace2 0 (𝕡) array#0 | array#1 - // arc4_types/mutable_params.py:99 + p-load array#0 (𝕡) array#0 | array#0 (copy) + byte 0x0a (𝕡) array#0 | array#0 (copy),0x0a + replace2 0 (𝕡) array#0 | array#1 + // arc4_types/mutable_params.py:128 // return copy - p-load array#0 (𝕡) array#0 | array#1,array#0 (copy) - l-load array#1 1 (𝕡) array#0 | array#0 (copy),array#1 - retsub array#0 (copy),array#1 + p-load array#0 (𝕡) array#0 | array#1,array#0 (copy) + l-load array#1 1 (𝕡) array#0 | array#0 (copy),array#1 + retsub array#0 (copy),array#1 -// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> bytes, bytes, bytes: -other_routine_3: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - // arc4_types/mutable_params.py:101-102 +// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: uint64) -> bytes, bytes, bytes: +mutate_tuple_items_and_reassign: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | + // arc4_types/mutable_params.py:130-133 // @subroutine - // def other_routine_3(self, arrays: tuple[TestArray, TestArray, TestArray]) -> None: - proto 3 3 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | + // def mutate_tuple_items_and_reassign( + // self, arrays: tuple[TestArray, TestArray, TestArray], *, start: UInt64, reassign: bool + // ) -> None: + proto 5 3 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | + allocate 6 to stack (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0 | -other_routine_3_block@0: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - int 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | loop_counter%0#0 - x-store loop_counter%0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | - // Implicit fall through to other_routine_3_for_body@1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | +mutate_tuple_items_and_reassign_block@0: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0 | + int 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0 | arrays.0%is_original#0 + f-store arrays.0%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0 | + int 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0 | arrays.1%is_original#0 + f-store arrays.1%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0 | + int 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0 | arrays.2%is_original#0 + f-store arrays.2%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | + // arc4_types/mutable_params.py:134 + // arrays[0][0] = UInt8(start) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy) + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0 + l-load-copy val_as_bytes%0#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%0#0 (copy) + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,assigned_value%0#0 + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,assigned_value%0#0,arrays.0#0 (copy) + l-load assigned_value%0#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,arrays.0#0 (copy),assigned_value%0#0 + replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,arrays.0#0 + p-store arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0 + // arc4_types/mutable_params.py:135 + // arrays[1][0] = UInt8(start + 1) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,start#0 (copy) + int 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,start#0 (copy),1 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,to_encode%0#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0 + l-load-copy val_as_bytes%1#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%1#0 (copy) + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,assigned_value%1#0 + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,assigned_value%1#0,arrays.1#0 (copy) + l-load assigned_value%1#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,arrays.1#0 (copy),assigned_value%1#0 + replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,arrays.1#0 + p-store arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0 + // arc4_types/mutable_params.py:136 + // arrays[2][0] = UInt8(start + 2) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,start#0 (copy) + int 2 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,start#0 (copy),2 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,to_encode%1#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0 + l-load-copy val_as_bytes%2#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,val_as_bytes%2#0 (copy) + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,assigned_value%2#0 + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,assigned_value%2#0,arrays.2#0 (copy) + l-load assigned_value%2#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,arrays.2#0 (copy),assigned_value%2#0 + replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,arrays.2#0 + p-store arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0 + // arc4_types/mutable_params.py:138 + // assert arrays[0][0] == start + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,arrays.0#0 (copy) + extract 0 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%0#0,val_as_bytes%1#0,val_as_bytes%2#0,reinterpret_biguint%0#0 + l-load val_as_bytes%0#0 3 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%1#0,val_as_bytes%2#0,reinterpret_biguint%0#0,val_as_bytes%0#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%1#0,val_as_bytes%2#0,tmp%1#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%1#0,val_as_bytes%2#0 + // arc4_types/mutable_params.py:139 + // assert arrays[1][0] == start + 1 + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%1#0,val_as_bytes%2#0,arrays.1#0 (copy) + extract 0 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%1#0,val_as_bytes%2#0,reinterpret_biguint%1#0 + l-load val_as_bytes%1#0 2 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%2#0,reinterpret_biguint%1#0,val_as_bytes%1#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%2#0,tmp%4#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%2#0 + // arc4_types/mutable_params.py:140 + // assert arrays[2][0] == start + 2 + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%2#0,arrays.2#0 (copy) + extract 0 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%2#0,reinterpret_biguint%2#0 + l-load val_as_bytes%2#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | reinterpret_biguint%2#0,val_as_bytes%2#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | tmp%7#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | + // arc4_types/mutable_params.py:142 + // arrays[0][1] = UInt8(start + 3) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy) + int 3 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy),3 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | to_encode%2#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%3#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%3#0 + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%3#0,arrays.0#0 (copy) + l-load assigned_value%3#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.0#0 (copy),assigned_value%3#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.0#0 + p-store arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | + // arc4_types/mutable_params.py:143 + // arrays[1][1] = UInt8(start + 4) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy) + int 4 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy),4 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | to_encode%3#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%4#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%4#0 + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%4#0,arrays.1#0 (copy) + l-load assigned_value%4#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.1#0 (copy),assigned_value%4#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.1#0 + p-store arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | + // arc4_types/mutable_params.py:144 + // arrays[2][1] = UInt8(start + 5) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy) + int 5 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | start#0 (copy),5 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | to_encode%4#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | val_as_bytes%5#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%5#0 + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | assigned_value%5#0,arrays.2#0 (copy) + l-load assigned_value%5#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.2#0 (copy),assigned_value%5#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.2#0 + p-store arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0 | arrays.2#12 + f-store arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12 | + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12 | arrays.1#11 + f-store arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11 | + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11 | arrays.0#10 + f-store arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:147 + // if reassign: + p-load reassign#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reassign#0 (copy) + bz mutate_tuple_items_and_reassign_after_if_else@20 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_if_body@13 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | -other_routine_3_for_body@1: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | - // arc4_types/mutable_params.py:104 - // for array in arrays: - x-load loop_counter%0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | loop_counter%0#0 - switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - b other_routine_3_after_for@5 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | +mutate_tuple_items_and_reassign_if_body@13: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + int 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%is_original#0 + f-store arrays.0%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + int 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1%is_original#0 + f-store arrays.1%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + int 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2%is_original#0 + f-store arrays.2%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2#12 + f-store arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1#11 + f-store arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0#10 + f-store arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_after_if_else@20 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | -other_routine_3_for_header_1@3: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - int 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | loop_counter%0#0 - x-store loop_counter%0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | - b other_routine_3_for_body@1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | +mutate_tuple_items_and_reassign_after_if_else@20: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:150 + // arrays[0][1] = UInt8(start + 6) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy) + int 6 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy),6 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | to_encode%5#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%6#0 + l-store-copy val_as_bytes%6#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%6#0,val_as_bytes%6#0 + f-store val_as_bytes%6#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%6#0 + l-load val_as_bytes%6#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%6#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%6#0 + f-load arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%6#0,arrays.0#10 + l-load assigned_value%6#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0#10,assigned_value%6#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0#10 + f-store arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%out#7 + f-store arrays.0%out#7 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.0%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%is_original#0 + bz mutate_tuple_items_and_reassign_after_if_else@22 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_if_body@21 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | -other_routine_3_for_header_2@4: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - int 2 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | loop_counter%0#0 - x-store loop_counter%0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | - b other_routine_3_for_body@1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | (𝕏) loop_counter%0#0 | +mutate_tuple_items_and_reassign_if_body@21: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%out#7 + f-store arrays.0%out#7 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_after_if_else@22 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | -other_routine_3_after_for@5: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - // arc4_types/mutable_params.py:107 - // arrays[0][0] = UInt8(99) - p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 (copy) - byte 0x63 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 (copy),0x63 - replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 - p-store arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - // arc4_types/mutable_params.py:108 - // arrays[1][0] = UInt8(99) - p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.1#0 (copy) - byte 0x63 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.1#0 (copy),0x63 - replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.1#0 - p-store arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - // arc4_types/mutable_params.py:109 - // arrays[2][0] = UInt8(99) - p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.2#0 (copy) - byte 0x63 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.2#0 (copy),0x63 - replace2 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.2#0 - p-store arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | - p-load arrays.0#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 (copy) - p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 (copy),arrays.1#0 (copy) - p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0 | arrays.0#0 (copy),arrays.1#0 (copy),arrays.2#0 (copy) - retsub arrays.0#0 (copy),arrays.1#0 (copy),arrays.2#0 (copy) +mutate_tuple_items_and_reassign_after_if_else@22: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:151 + // arrays[1][1] = UInt8(start + 7) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy) + int 7 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy),7 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | to_encode%6#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%7#0 + l-store-copy val_as_bytes%7#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%7#0,val_as_bytes%7#0 + f-store val_as_bytes%7#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%7#0 + l-load val_as_bytes%7#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%7#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%7#0 + f-load arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%7#0,arrays.1#11 + l-load assigned_value%7#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1#11,assigned_value%7#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1#11 + f-store arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.1#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1%out#6 + f-store arrays.1%out#6 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.1%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1%is_original#0 + bz mutate_tuple_items_and_reassign_after_if_else@24 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_if_body@23 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + +mutate_tuple_items_and_reassign_if_body@23: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1%out#6 + f-store arrays.1%out#6 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_after_if_else@24 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + +mutate_tuple_items_and_reassign_after_if_else@24: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:152 + // arrays[2][1] = UInt8(start + 8) + p-load start#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy) + int 8 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | start#0 (copy),8 + + (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | to_encode%7#0 + itob (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%8#0 + l-store-copy val_as_bytes%8#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%8#0,val_as_bytes%8#0 + f-store val_as_bytes%8#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%8#0 + l-load val_as_bytes%8#0 0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | val_as_bytes%8#0 + extract 7 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%8#0 + f-load arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | assigned_value%8#0,arrays.2#12 + l-load assigned_value%8#0 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2#12,assigned_value%8#0 + replace2 1 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2#12 + f-store arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + p-load arrays.2#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2%out#5 + f-store arrays.2%out#5 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.2%is_original#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2%is_original#0 + bz mutate_tuple_items_and_reassign_after_if_else@26 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_if_body@25 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + +mutate_tuple_items_and_reassign_if_body@25: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2%out#5 + f-store arrays.2%out#5 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // Implicit fall through to mutate_tuple_items_and_reassign_after_if_else@26 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + +mutate_tuple_items_and_reassign_after_if_else@26: (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:154 + // assert arrays[0][1] == start + 6 + f-load arrays.0#10 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0#10 + extract 1 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%3#0 + f-load val_as_bytes%6#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%3#0,val_as_bytes%6#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | tmp%10#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:155 + // assert arrays[1][1] == start + 7 + f-load arrays.1#11 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.1#11 + extract 1 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%4#0 + f-load val_as_bytes%7#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%4#0,val_as_bytes%7#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | tmp%13#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + // arc4_types/mutable_params.py:156 + // assert arrays[2][1] == start + 8 + f-load arrays.2#12 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.2#12 + extract 1 1 // on error: Index access is out of bounds (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%5#0 + f-load val_as_bytes%8#0 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | reinterpret_biguint%5#0,val_as_bytes%8#0 + b== (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | tmp%16#0 + assert (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | + f-load arrays.0%out#7 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%out#7 + f-load arrays.1%out#6 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%out#7,arrays.1%out#6 + f-load arrays.2%out#5 (𝕡) arrays.0#0,arrays.1#0,arrays.2#0,start#0,reassign#0 | (𝕗) arrays.0%out#7,arrays.1%out#6,arrays.2%out#5,val_as_bytes%6#0,val_as_bytes%7#0,val_as_bytes%8#0,arrays.0%is_original#0,arrays.1%is_original#0,arrays.2%is_original#0,arrays.2#12,arrays.1#11,arrays.0#10 | arrays.0%out#7,arrays.1%out#6,arrays.2%out#5 + retsub arrays.0%out#7,arrays.1%out#6,arrays.2%out#5 diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.teal b/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.teal index f88998052e..b124712312 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.teal +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.approval.teal @@ -1,14 +1,14 @@ #pragma version 10 test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program: - intcblock 1 2 4 0 - bytecblock 0x05 0x01020304 0x63 0x80320006000d00054861707079000444617973 0x000741415252474821 + intcblock 0 1 4 2 + bytecblock 0x01020304 0x05 0x80320006000d00054861707079000444617973 0x000741415252474821 // arc4_types/mutable_params.py:29 // self.mutating_copies() callsub mutating_copies // arc4_types/mutable_params.py:31 // return True - intc_0 // 1 + intc_1 // 1 return @@ -20,16 +20,16 @@ mutating_copies: proto 0 0 // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - bytec_1 // 0x01020304 + bytec_0 // 0x01020304 // arc4_types/mutable_params.py:46 // my_array[2] = UInt8(5) - bytec_0 // 0x05 + bytec_1 // 0x05 replace2 2 // arc4_types/mutable_params.py:49 // assert my_array[2] == UInt8(5), "my_array should be mutated" dup extract 2 1 // on error: Index access is out of bounds - bytec_0 // 0x05 + bytec_1 // 0x05 b== assert // my_array should be mutated // arc4_types/mutable_params.py:36-41 @@ -39,7 +39,7 @@ mutating_copies: // s_val_1=String("Happy"), // s_val_2=String("Days"), // ) - bytec_3 // 0x80320006000d00054861707079000444617973 + bytec_2 // 0x80320006000d00054861707079000444617973 // arc4_types/mutable_params.py:51-52 // # Pass to subroutine without a copy // t, f = self.other_routine(my_array, my_struct) @@ -57,13 +57,13 @@ mutating_copies: // assert my_array[1] == UInt8(5), "my_array has been mutated by the subroutine" dig 1 extract 1 1 // on error: Index access is out of bounds - bytec_0 // 0x05 + bytec_1 // 0x05 b== assert // my_array has been mutated by the subroutine // arc4_types/mutable_params.py:58 // assert my_struct.s_val_1 == String( dup - intc_1 // 2 + intc_3 // 2 extract_uint16 dig 1 intc_2 // 4 @@ -73,12 +73,12 @@ mutating_copies: // assert my_struct.s_val_1 == String( // "AARRGH!" // ), "my_struct has been mutated by the subroutine" - bytec 4 // 0x000741415252474821 + bytec_3 // 0x000741415252474821 == assert // my_struct has been mutated by the subroutine // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - bytec_1 // 0x01020304 + bytec_0 // 0x01020304 // arc4_types/mutable_params.py:36-41 // my_struct = TestStruct( // b_val=Bool(True), @@ -86,7 +86,7 @@ mutating_copies: // s_val_1=String("Happy"), // s_val_2=String("Days"), // ) - bytec_3 // 0x80320006000d00054861707079000444617973 + bytec_2 // 0x80320006000d00054861707079000444617973 // arc4_types/mutable_params.py:62-63 // # Pass to subroutine with copy // self.other_routine(my_array_copy.copy(), my_struct_copy.copy()) @@ -94,7 +94,7 @@ mutating_copies: popn 4 // arc4_types/mutable_params.py:35 // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) - bytec_1 // 0x01020304 + bytec_0 // 0x01020304 // arc4_types/mutable_params.py:75 // my_array_copy_2 = self.other_routine_2(my_array_copy_2) callsub other_routine_2 @@ -117,14 +117,135 @@ mutating_copies: pushbytes 0x0a b== assert // my_array_copy_2 should have mutated value - // arc4_types/mutable_params.py:82-83 - // # tuples of mutable types only work with a .copy() - // self.other_routine_3((my_array.copy(), my_array_copy_2.copy(), my_array_copy_2.copy())) + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) dup2 - uncover 2 - callsub other_routine_3 - popn 3 + // arc4_types/mutable_params.py:35 + // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) + bytec_0 // 0x01020304 // arc4_types/mutable_params.py:87 + // start=UInt64(0), + intc_0 // 0 + // arc4_types/mutable_params.py:88 + // reassign=True, + intc_1 // 1 + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) + callsub mutate_tuple_items_and_reassign + popn 3 + // arc4_types/mutable_params.py:35 + // my_array = StaticArray(UInt8(1), UInt8(2), UInt8(3), UInt8(4)) + bytec_0 // 0x01020304 + // arc4_types/mutable_params.py:93 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + pushint 100 // 100 + intc_1 // 1 + // arc4_types/mutable_params.py:92-94 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + // ) + callsub mutate_tuple_items_and_reassign + // arc4_types/mutable_params.py:96 + // assert my_array[0] == 100 + dig 2 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x64 + b== + assert + // arc4_types/mutable_params.py:97 + // assert my_array_copy_2[0] == 101 + dig 1 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x65 + b== + assert + // arc4_types/mutable_params.py:98 + // assert my_array_copy_3[0] == 102 + dup + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x66 + b== + assert + // arc4_types/mutable_params.py:99 + // assert my_array[1] == 103 + dig 2 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x67 + b== + assert + // arc4_types/mutable_params.py:100 + // assert my_array_copy_2[1] == 104 + dig 1 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x68 + b== + assert + // arc4_types/mutable_params.py:101 + // assert my_array_copy_3[1] == 105 + dup + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x69 + b== + assert + // arc4_types/mutable_params.py:104 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + pushint 200 // 200 + intc_0 // 0 + // arc4_types/mutable_params.py:103-105 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + // ) + callsub mutate_tuple_items_and_reassign + // arc4_types/mutable_params.py:107 + // assert my_array[0] == 200 + dig 2 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xc8 + b== + assert + // arc4_types/mutable_params.py:108 + // assert my_array_copy_2[0] == 201 + dig 1 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xc9 + b== + assert + // arc4_types/mutable_params.py:109 + // assert my_array_copy_3[0] == 202 + dup + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xca + b== + assert + // arc4_types/mutable_params.py:110 + // assert my_array[1] == 206 + dig 2 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xce + b== + assert + // arc4_types/mutable_params.py:111 + // assert my_array_copy_2[1] == 207 + swap + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xcf + b== + assert + // arc4_types/mutable_params.py:112 + // assert my_array_copy_3[1] == 208 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xd0 + b== + assert + // arc4_types/mutable_params.py:116 // self.other_routine_2(nested.test_array.copy()) extract 0 4 // on error: Index access is out of bounds callsub other_routine_2 @@ -134,23 +255,23 @@ mutating_copies: // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> uint64, uint64, bytes, bytes: other_routine: - // arc4_types/mutable_params.py:89-90 + // arc4_types/mutable_params.py:118-119 // @subroutine // def other_routine(self, array: TestArray, struct: TestStruct) -> tuple[bool, bool]: proto 2 4 - // arc4_types/mutable_params.py:91 + // arc4_types/mutable_params.py:120 // array[1] = UInt8(5) frame_dig -2 - bytec_0 // 0x05 + bytec_1 // 0x05 replace2 1 frame_bury -2 - // arc4_types/mutable_params.py:92 + // arc4_types/mutable_params.py:121 // struct.s_val_1 = String("AARRGH!") frame_dig -1 - intc_1 // 2 + intc_3 // 2 extract_uint16 frame_dig -1 - intc_3 // 0 + intc_0 // 0 dig 2 extract3 frame_dig -1 @@ -163,7 +284,7 @@ other_routine: uncover 2 substring3 uncover 2 - bytec 4 // 0x000741415252474821 + bytec_3 // 0x000741415252474821 concat swap concat @@ -181,10 +302,10 @@ other_routine: extract 6 2 replace2 4 frame_bury -1 - // arc4_types/mutable_params.py:93 + // arc4_types/mutable_params.py:122 // return True, False - intc_0 // 1 - intc_3 // 0 + intc_1 // 1 + intc_0 // 0 frame_dig -2 frame_dig -1 retsub @@ -192,65 +313,225 @@ other_routine: // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> bytes, bytes: other_routine_2: - // arc4_types/mutable_params.py:95-96 + // arc4_types/mutable_params.py:124-125 // @subroutine // def other_routine_2(self, array: TestArray) -> TestArray: proto 1 2 - // arc4_types/mutable_params.py:98 + // arc4_types/mutable_params.py:127 // array[0] = UInt8(10) frame_dig -1 pushbytes 0x0a replace2 0 - // arc4_types/mutable_params.py:99 + // arc4_types/mutable_params.py:128 // return copy frame_dig -1 swap retsub -// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> bytes, bytes, bytes: -other_routine_3: - // arc4_types/mutable_params.py:101-102 +// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: uint64) -> bytes, bytes, bytes: +mutate_tuple_items_and_reassign: + // arc4_types/mutable_params.py:130-133 // @subroutine - // def other_routine_3(self, arrays: tuple[TestArray, TestArray, TestArray]) -> None: - proto 3 3 - intc_3 // 0 - -other_routine_3_for_body@1: - // arc4_types/mutable_params.py:103-104 - // # this modifies the local copy - // for array in arrays: - switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 - b other_routine_3_after_for@5 - -other_routine_3_for_header_1@3: - intc_0 // 1 - b other_routine_3_for_body@1 - -other_routine_3_for_header_2@4: - intc_1 // 2 - b other_routine_3_for_body@1 - -other_routine_3_after_for@5: - // arc4_types/mutable_params.py:107 - // arrays[0][0] = UInt8(99) - frame_dig -3 - bytec_2 // 0x63 + // def mutate_tuple_items_and_reassign( + // self, arrays: tuple[TestArray, TestArray, TestArray], *, start: UInt64, reassign: bool + // ) -> None: + proto 5 3 + intc_0 // 0 + dupn 5 + intc_1 // 1 + dupn 2 + // arc4_types/mutable_params.py:134 + // arrays[0][0] = UInt8(start) + frame_dig -2 + itob + dup + extract 7 1 + frame_dig -5 + swap replace2 0 - frame_bury -3 - // arc4_types/mutable_params.py:108 - // arrays[1][0] = UInt8(99) + frame_bury -5 + // arc4_types/mutable_params.py:135 + // arrays[1][0] = UInt8(start + 1) frame_dig -2 - bytec_2 // 0x63 + intc_1 // 1 + + + itob + dup + extract 7 1 + frame_dig -4 + swap replace2 0 - frame_bury -2 - // arc4_types/mutable_params.py:109 - // arrays[2][0] = UInt8(99) - frame_dig -1 - bytec_2 // 0x63 + frame_bury -4 + // arc4_types/mutable_params.py:136 + // arrays[2][0] = UInt8(start + 2) + frame_dig -2 + intc_3 // 2 + + + itob + dup + extract 7 1 + frame_dig -3 + swap replace2 0 - frame_bury -1 + frame_bury -3 + // arc4_types/mutable_params.py:138 + // assert arrays[0][0] == start + frame_dig -5 + extract 0 1 // on error: Index access is out of bounds + uncover 3 + b== + assert + // arc4_types/mutable_params.py:139 + // assert arrays[1][0] == start + 1 + frame_dig -4 + extract 0 1 // on error: Index access is out of bounds + uncover 2 + b== + assert + // arc4_types/mutable_params.py:140 + // assert arrays[2][0] == start + 2 frame_dig -3 + extract 0 1 // on error: Index access is out of bounds + b== + assert + // arc4_types/mutable_params.py:142 + // arrays[0][1] = UInt8(start + 3) frame_dig -2 + pushint 3 // 3 + + + itob + extract 7 1 + frame_dig -5 + swap + replace2 1 + frame_bury -5 + // arc4_types/mutable_params.py:143 + // arrays[1][1] = UInt8(start + 4) + frame_dig -2 + intc_2 // 4 + + + itob + extract 7 1 + frame_dig -4 + swap + replace2 1 + frame_bury -4 + // arc4_types/mutable_params.py:144 + // arrays[2][1] = UInt8(start + 5) + frame_dig -2 + pushint 5 // 5 + + + itob + extract 7 1 + frame_dig -3 + swap + replace2 1 + dup + frame_bury -3 + frame_dig -4 + frame_dig -5 + // arc4_types/mutable_params.py:146-147 + // # overwrite params + // if reassign: frame_dig -1 + bz mutate_tuple_items_and_reassign_after_if_else@20 + intc_0 // 0 + frame_bury 6 + intc_0 // 0 + frame_bury 7 + intc_0 // 0 + frame_bury 8 + frame_dig -3 + frame_bury 9 + frame_dig -4 + frame_bury 10 + frame_dig -5 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@20: + // arc4_types/mutable_params.py:150 + // arrays[0][1] = UInt8(start + 6) + frame_dig -2 + pushint 6 // 6 + + + itob + dup + frame_bury 3 + extract 7 1 + frame_dig 11 + swap + replace2 1 + frame_bury 11 + frame_dig -5 + frame_bury 0 + frame_dig 6 + bz mutate_tuple_items_and_reassign_after_if_else@22 + frame_dig 11 + frame_bury 0 + +mutate_tuple_items_and_reassign_after_if_else@22: + // arc4_types/mutable_params.py:151 + // arrays[1][1] = UInt8(start + 7) + frame_dig -2 + pushint 7 // 7 + + + itob + dup + frame_bury 4 + extract 7 1 + frame_dig 10 + swap + replace2 1 + frame_bury 10 + frame_dig -4 + frame_bury 1 + frame_dig 7 + bz mutate_tuple_items_and_reassign_after_if_else@24 + frame_dig 10 + frame_bury 1 + +mutate_tuple_items_and_reassign_after_if_else@24: + // arc4_types/mutable_params.py:152 + // arrays[2][1] = UInt8(start + 8) + frame_dig -2 + pushint 8 // 8 + + + itob + dup + frame_bury 5 + extract 7 1 + frame_dig 9 + swap + replace2 1 + frame_bury 9 + frame_dig -3 + frame_bury 2 + frame_dig 8 + bz mutate_tuple_items_and_reassign_after_if_else@26 + frame_dig 9 + frame_bury 2 + +mutate_tuple_items_and_reassign_after_if_else@26: + // arc4_types/mutable_params.py:154 + // assert arrays[0][1] == start + 6 + frame_dig 11 + extract 1 1 // on error: Index access is out of bounds + frame_dig 3 + b== + assert + // arc4_types/mutable_params.py:155 + // assert arrays[1][1] == start + 7 + frame_dig 10 + extract 1 1 // on error: Index access is out of bounds + frame_dig 4 + b== + assert + // arc4_types/mutable_params.py:156 + // assert arrays[2][1] == start + 8 + frame_dig 9 + extract 1 1 // on error: Index access is out of bounds + frame_dig 5 + b== + assert retsub diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.mir b/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.mir index a8326530f6..23eb0a2edd 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.mir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.mir @@ -1,7 +1,7 @@ // Op Stack (out) // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> uint64: main_block@0: - // arc4_types/mutable_params.py:112 + // arc4_types/mutable_params.py:159 // return True int 1 1 return diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.teal b/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.teal index 533fc84667..825e67715f 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.teal +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program: - // arc4_types/mutable_params.py:112 + // arc4_types/mutable_params.py:159 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.destructured.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.destructured.ir index b5846911c8..4e6b90e337 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.destructured.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.destructured.ir @@ -32,13 +32,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#1, my_array_copy_2#2, my_array_copy_2#2) - let tmp%11#0: bytes = ((extract 0 4) my_array#1) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, 0x01020304, 0u, 1u) + let (my_array#1: bytes, my_array_copy_2#2: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#1) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#1) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#1: bytes, my_array_copy_2#2: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#1) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#1) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#1) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#0: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -57,29 +95,102 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: return 1u 0u array#0 struct#0 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - goto_nth [block@3, block@4][loop_counter%0#0] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#0: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#0: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#0: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#0: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#0: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#0 arrays.1#0 arrays.2#0 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#0: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#0: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#0: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#0) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#0) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#0) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#0: bytes = ((replace2 1) arrays.0#0 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#0: bytes = ((replace2 1) arrays.1#0 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#0: bytes = ((replace2 1) arrays.2#0 assigned_value%5#0) + let arrays.2#12: bytes = arrays.2#0 + let arrays.1#11: bytes = arrays.1#0 + let arrays.0#10: bytes = arrays.0#0 + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#0: bool = 0u + let arrays.1%is_original#0: bool = 0u + let arrays.2%is_original#0: bool = 0u + let arrays.2#12: bytes = arrays.2#0 + let arrays.1#11: bytes = arrays.1#0 + let arrays.0#10: bytes = arrays.0#0 + goto block@20 + block@20: // after_if_else_L147 + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#10: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + let arrays.0%out#7: bytes = arrays.0#0 + goto arrays.0%is_original#0 ? block@21 : block@22 + block@21: // if_body_L1 + let arrays.0%out#7: bytes = arrays.0#10 + goto block@22 + block@22: // after_if_else_L1 + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#11: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + let arrays.1%out#6: bytes = arrays.1#0 + goto arrays.1%is_original#0 ? block@23 : block@24 + block@23: // if_body_L1 + let arrays.1%out#6: bytes = arrays.1#11 + goto block@24 + block@24: // after_if_else_L1 + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#12: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + let arrays.2%out#5: bytes = arrays.2#0 + goto arrays.2%is_original#0 ? block@25 : block@26 + block@25: // if_body_L1 + let arrays.2%out#5: bytes = arrays.2#12 + goto block@26 + block@26: // after_if_else_L1 + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#10) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#11) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#12) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.ir index 1ca762d43c..6ac750409b 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.ir @@ -120,29 +120,130 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%11#0: biguint = 0x0a let tmp%10#0: bool = (b== reinterpret_biguint%10#0 reinterpret_biguint%11#0) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let copy%5#0: bytes = my_array#2 - let copy%6#0: bytes = my_array_copy_2#3 + let copy%5#0: bytes = my_array_copy#0 + let my_array_copy_3#0: bytes = copy%5#0 + let copy%6#0: bytes = my_array#2 let copy%7#0: bytes = my_array_copy_2#3 - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(copy%5#0, copy%6#0, copy%7#0) - let copy%7#1: bytes = other_routine_3%2#0 - let copy%6#1: bytes = other_routine_3%1#0 - let copy%5#1: bytes = other_routine_3%0#0 - let copy%8#0: bytes = my_array#2 + let copy%8#0: bytes = my_array_copy_3#0 + let (originals.0#0: bytes, originals.1#0: bytes, originals.2#0: bytes) = (copy%6#0, copy%7#0, copy%8#0) + let copy%9#0: bytes = my_array#2 + let copy%10#0: bytes = my_array_copy_2#3 + let copy%11#0: bytes = my_array_copy_3#0 + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(copy%9#0, copy%10#0, copy%11#0, 0u, 1u) + let copy%11#1: bytes = mutate_tuple_items_and_reassign%2#0 + let copy%10#1: bytes = mutate_tuple_items_and_reassign%1#0 + let copy%9#1: bytes = mutate_tuple_items_and_reassign%0#0 + let tmp%11#0: bool = (== originals.0#0 my_array#2) + let tmp%12#0: bool = (== originals.1#0 my_array_copy_2#3) + let tmp%13#0: bool = (&& tmp%11#0 tmp%12#0) + let tmp%14#0: bool = (== originals.2#0 my_array_copy_3#0) + let tmp%15#0: bool = (&& tmp%13#0 tmp%14#0) + (assert tmp%15#0) + let (mutate_tuple_items_and_reassign%3#0: bytes, mutate_tuple_items_and_reassign%4#0: bytes, mutate_tuple_items_and_reassign%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array_copy_3#0, 100u, 1u) + let my_array_copy_3#1: bytes = mutate_tuple_items_and_reassign%5#0 + let my_array_copy_2#4: bytes = mutate_tuple_items_and_reassign%4#0 + let my_array#3: bytes = mutate_tuple_items_and_reassign%3#0 + let array_head_and_tail%6#0: bytes = my_array#3 + let item_offset%6#0: uint64 = (* 0u 1u) + let reinterpret_biguint%12#0: biguint = (extract3 array_head_and_tail%6#0 item_offset%6#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%13#0: biguint = 0x64 + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 reinterpret_biguint%13#0) + (assert tmp%16#0) + let array_head_and_tail%7#0: bytes = my_array_copy_2#4 + let item_offset%7#0: uint64 = (* 0u 1u) + let reinterpret_biguint%14#0: biguint = (extract3 array_head_and_tail%7#0 item_offset%7#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%15#0: biguint = 0x65 + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 reinterpret_biguint%15#0) + (assert tmp%17#0) + let array_head_and_tail%8#0: bytes = my_array_copy_3#1 + let item_offset%8#0: uint64 = (* 0u 1u) + let reinterpret_biguint%16#0: biguint = (extract3 array_head_and_tail%8#0 item_offset%8#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%17#0: biguint = 0x66 + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 reinterpret_biguint%17#0) + (assert tmp%18#0) + let array_head_and_tail%9#0: bytes = my_array#3 + let item_offset%9#0: uint64 = (* 1u 1u) + let reinterpret_biguint%18#0: biguint = (extract3 array_head_and_tail%9#0 item_offset%9#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%19#0: biguint = 0x67 + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 reinterpret_biguint%19#0) + (assert tmp%19#0) + let array_head_and_tail%10#0: bytes = my_array_copy_2#4 + let item_offset%10#0: uint64 = (* 1u 1u) + let reinterpret_biguint%20#0: biguint = (extract3 array_head_and_tail%10#0 item_offset%10#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%21#0: biguint = 0x68 + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 reinterpret_biguint%21#0) + (assert tmp%20#0) + let array_head_and_tail%11#0: bytes = my_array_copy_3#1 + let item_offset%11#0: uint64 = (* 1u 1u) + let reinterpret_biguint%22#0: biguint = (extract3 array_head_and_tail%11#0 item_offset%11#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%23#0: biguint = 0x69 + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 reinterpret_biguint%23#0) + (assert tmp%21#0) + let (mutate_tuple_items_and_reassign%6#0: bytes, mutate_tuple_items_and_reassign%7#0: bytes, mutate_tuple_items_and_reassign%8#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let my_array_copy_3#2: bytes = mutate_tuple_items_and_reassign%8#0 + let my_array_copy_2#5: bytes = mutate_tuple_items_and_reassign%7#0 + let my_array#4: bytes = mutate_tuple_items_and_reassign%6#0 + let array_head_and_tail%12#0: bytes = my_array#4 + let item_offset%12#0: uint64 = (* 0u 1u) + let reinterpret_biguint%24#0: biguint = (extract3 array_head_and_tail%12#0 item_offset%12#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%25#0: biguint = 0xc8 + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 reinterpret_biguint%25#0) + (assert tmp%22#0) + let array_head_and_tail%13#0: bytes = my_array_copy_2#5 + let item_offset%13#0: uint64 = (* 0u 1u) + let reinterpret_biguint%26#0: biguint = (extract3 array_head_and_tail%13#0 item_offset%13#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%27#0: biguint = 0xc9 + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 reinterpret_biguint%27#0) + (assert tmp%23#0) + let array_head_and_tail%14#0: bytes = my_array_copy_3#2 + let item_offset%14#0: uint64 = (* 0u 1u) + let reinterpret_biguint%28#0: biguint = (extract3 array_head_and_tail%14#0 item_offset%14#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%29#0: biguint = 0xca + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 reinterpret_biguint%29#0) + (assert tmp%24#0) + let array_head_and_tail%15#0: bytes = my_array#4 + let item_offset%15#0: uint64 = (* 1u 1u) + let reinterpret_biguint%30#0: biguint = (extract3 array_head_and_tail%15#0 item_offset%15#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%31#0: biguint = 0xce + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 reinterpret_biguint%31#0) + (assert tmp%25#0) + let array_head_and_tail%16#0: bytes = my_array_copy_2#5 + let item_offset%16#0: uint64 = (* 1u 1u) + let reinterpret_biguint%32#0: biguint = (extract3 array_head_and_tail%16#0 item_offset%16#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%33#0: biguint = 0xcf + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 reinterpret_biguint%33#0) + (assert tmp%26#0) + let array_head_and_tail%17#0: bytes = my_array_copy_3#2 + let item_offset%17#0: uint64 = (* 1u 1u) + let reinterpret_biguint%34#0: biguint = (extract3 array_head_and_tail%17#0 item_offset%17#0 1u) // on error: Index access is out of bounds + let reinterpret_biguint%35#0: biguint = 0xd0 + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 reinterpret_biguint%35#0) + (assert tmp%27#0) + let copy%12#0: bytes = my_array#4 let current_tail_offset%3#0: uint64 = 4u let encoded_tuple_buffer%7#0: bytes = 0x - let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 copy%8#0) + let encoded_tuple_buffer%8#0: bytes = (concat encoded_tuple_buffer%7#0 copy%12#0) let nested#0: bytes = encoded_tuple_buffer%8#0 - let tmp%11#0: bytes = (extract3 nested#0 0u 4u) // on error: Index access is out of bounds - let copy%9#0: bytes = tmp%11#0 - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(copy%9#0) - let copy%9#1: bytes = other_routine_2%5#0 + let tmp%28#0: bytes = (extract3 nested#0 0u 4u) // on error: Index access is out of bounds + let copy%13#0: bytes = tmp%28#0 + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(copy%13#0) + let copy%13#1: bytes = other_routine_2%5#0 return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 + let array%is_original#0: bool = 1u + let array%out#0: bytes = array#0 + let struct%is_original#0: bool = 1u + let struct%out#0: bytes = struct#0 let assigned_value%0#0: bytes = 0x05 let updated_target%0#0: bytes = (replace3 array#0 1u assigned_value%0#0) let array#1: bytes = updated_target%0#0 + goto array%is_original#0 ? block@1 : block@2 + block@1: // if_body_L1 + let array%out#1: bytes = array#1 + goto block@2 + block@2: // after_if_else_L1 let length%0#0: uint64 = (len "AARRGH!") let as_bytes%0#0: bytes = (itob length%0#0) let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) @@ -163,53 +264,218 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) let updated_data%2#0: bytes = (replace3 updated_data%1#0 4u tail_offset_bytes%0#0) - let struct#1: bytes = updated_data%2#0 - return 1u 0u array#1 struct#1 + let struct#2: bytes = updated_data%2#0 + goto struct%is_original#0 ? block@3 : block@4 + block@3: // if_body_L1 + let struct%out#1: bytes = struct#2 + goto block@4 + block@4: // after_if_else_L1 + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 + let array%is_original#0: bool = 1u + let array%out#0: bytes = array#0 let copy%0#0: bytes = array#0 let copy#0: bytes = copy%0#0 let assigned_value%0#0: bytes = 0x0a let updated_target%0#0: bytes = (replace3 array#0 0u assigned_value%0#0) let array#1: bytes = updated_target%0#0 + goto array%is_original#0 ? block@1 : block@2 + block@1: // if_body_L1 + let array%out#1: bytes = array#1 + goto block@2 + block@2: // after_if_else_L1 return copy#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - let array#0: bytes = arrays.0#0 - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - let array#1: bytes = φ(array#0 <- block@0, array#3 <- block@3, array#4 <- block@4) - let assigned_value%0#0: bytes = 0x63 - let updated_target%0#0: bytes = (replace3 array#1 0u assigned_value%0#0) - let array#2: bytes = updated_target%0#0 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.0%out#0: bytes = arrays.0#0 + let arrays.1%is_original#0: bool = 1u + let arrays.1%out#0: bytes = arrays.1#0 + let arrays.2%is_original#0: bool = 1u + let arrays.2%out#0: bytes = arrays.2#0 + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let updated_target%0#0: bytes = (replace3 arrays.0#0 0u assigned_value%0#0) + let arrays.0#1: bytes = updated_target%0#0 + goto arrays.0%is_original#0 ? block@1 : block@2 + block@1: // if_body_L1 + let arrays.0%out#1: bytes = arrays.0#1 goto block@2 - block@2: // for_footer_L104 - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - let array#3: bytes = arrays.1#0 - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - let array#4: bytes = arrays.2#0 - goto block@1 - block@5: // after_for_L104 - let assigned_value%1#0: bytes = 0x63 - let updated_target%1#0: bytes = (replace3 arrays.0#0 0u assigned_value%1#0) - let arrays.0#2: bytes = updated_target%1#0 - let assigned_value%2#0: bytes = 0x63 - let updated_target%2#0: bytes = (replace3 arrays.1#0 0u assigned_value%2#0) - let arrays.1#2: bytes = updated_target%2#0 - let assigned_value%3#0: bytes = 0x63 - let updated_target%3#0: bytes = (replace3 arrays.2#0 0u assigned_value%3#0) - let arrays.2#2: bytes = updated_target%3#0 - return arrays.0#2 arrays.1#2 arrays.2#2 + block@2: // after_if_else_L1 + let arrays.0%out#14: bytes = φ(arrays.0%out#0 <- block@0, arrays.0%out#1 <- block@1) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let updated_target%1#0: bytes = (replace3 arrays.1#0 0u assigned_value%1#0) + let arrays.1#2: bytes = updated_target%1#0 + goto arrays.1%is_original#0 ? block@3 : block@4 + block@3: // if_body_L1 + let arrays.1%out#1: bytes = arrays.1#2 + goto block@4 + block@4: // after_if_else_L1 + let arrays.1%out#13: bytes = φ(arrays.1%out#0 <- block@2, arrays.1%out#1 <- block@3) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let updated_target%2#0: bytes = (replace3 arrays.2#0 0u assigned_value%2#0) + let arrays.2#3: bytes = updated_target%2#0 + goto arrays.2%is_original#0 ? block@5 : block@6 + block@5: // if_body_L1 + let arrays.2%out#1: bytes = arrays.2#3 + goto block@6 + block@6: // after_if_else_L1 + let arrays.2%out#12: bytes = φ(arrays.2%out#0 <- block@4, arrays.2%out#1 <- block@5) + let array_head_and_tail%0#0: bytes = arrays.0#1 + let item_offset%0#0: uint64 = (* 0u 1u) + let reinterpret_biguint%0#0: biguint = (extract3 array_head_and_tail%0#0 item_offset%0#0 1u) // on error: Index access is out of bounds + let tmp%0#0: biguint = (itob start#0) + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 tmp%0#0) + (assert tmp%1#0) + let array_head_and_tail%1#0: bytes = arrays.1#2 + let item_offset%1#0: uint64 = (* 0u 1u) + let reinterpret_biguint%1#0: biguint = (extract3 array_head_and_tail%1#0 item_offset%1#0 1u) // on error: Index access is out of bounds + let tmp%2#0: uint64 = (+ start#0 1u) + let tmp%3#0: biguint = (itob tmp%2#0) + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 tmp%3#0) + (assert tmp%4#0) + let array_head_and_tail%2#0: bytes = arrays.2#3 + let item_offset%2#0: uint64 = (* 0u 1u) + let reinterpret_biguint%2#0: biguint = (extract3 array_head_and_tail%2#0 item_offset%2#0 1u) // on error: Index access is out of bounds + let tmp%5#0: uint64 = (+ start#0 2u) + let tmp%6#0: biguint = (itob tmp%5#0) + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 tmp%6#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let updated_target%3#0: bytes = (replace3 arrays.0#1 1u assigned_value%3#0) + let arrays.0#5: bytes = updated_target%3#0 + goto arrays.0%is_original#0 ? block@7 : block@8 + block@7: // if_body_L1 + let arrays.0%out#2: bytes = arrays.0#5 + goto block@8 + block@8: // after_if_else_L1 + let arrays.0%out#11: bytes = φ(arrays.0%out#14 <- block@6, arrays.0%out#2 <- block@7) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let updated_target%4#0: bytes = (replace3 arrays.1#2 1u assigned_value%4#0) + let arrays.1#6: bytes = updated_target%4#0 + goto arrays.1%is_original#0 ? block@9 : block@10 + block@9: // if_body_L1 + let arrays.1%out#2: bytes = arrays.1#6 + goto block@10 + block@10: // after_if_else_L1 + let arrays.1%out#10: bytes = φ(arrays.1%out#13 <- block@8, arrays.1%out#2 <- block@9) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let updated_target%5#0: bytes = (replace3 arrays.2#3 1u assigned_value%5#0) + let arrays.2#7: bytes = updated_target%5#0 + goto arrays.2%is_original#0 ? block@11 : block@12 + block@11: // if_body_L1 + let arrays.2%out#2: bytes = arrays.2#7 + goto block@12 + block@12: // after_if_else_L1 + let arrays.2%out#9: bytes = φ(arrays.2%out#12 <- block@10, arrays.2%out#2 <- block@11) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let copy%0#0: bytes = arrays.0#5 + let copy%1#0: bytes = arrays.1#6 + let copy%2#0: bytes = arrays.2#7 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + let (arrays.0#9: bytes, arrays.1#9: bytes, arrays.2#9: bytes) = (copy%0#0, copy%1#0, copy%2#0) + goto arrays.0%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + let arrays.0%out#3: bytes = arrays.0#9 + goto block@15 + block@15: // after_if_else_L1 + let arrays.0%out#17: bytes = φ(arrays.0%out#11 <- block@13, arrays.0%out#3 <- block@14) + goto arrays.1%is_original#5 ? block@16 : block@17 + block@16: // if_body_L1 + let arrays.1%out#3: bytes = arrays.1#9 + goto block@17 + block@17: // after_if_else_L1 + let arrays.1%out#16: bytes = φ(arrays.1%out#10 <- block@15, arrays.1%out#3 <- block@16) + goto arrays.2%is_original#6 ? block@18 : block@19 + block@18: // if_body_L1 + let arrays.2%out#3: bytes = arrays.2#9 + goto block@19 + block@19: // after_if_else_L1 + let arrays.2%out#15: bytes = φ(arrays.2%out#9 <- block@17, arrays.2%out#3 <- block@18) + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@12, arrays.0#9 <- block@19) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@12, arrays.1#9 <- block@19) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@12, arrays.2#9 <- block@19) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@12, arrays.0%is_original#4 <- block@19) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@12, arrays.1%is_original#5 <- block@19) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@12, arrays.2%is_original#6 <- block@19) + let arrays.0%out#8: bytes = φ(arrays.0%out#11 <- block@12, arrays.0%out#17 <- block@19) + let arrays.1%out#8: bytes = φ(arrays.1%out#10 <- block@12, arrays.1%out#16 <- block@19) + let arrays.2%out#8: bytes = φ(arrays.2%out#9 <- block@12, arrays.2%out#15 <- block@19) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let updated_target%6#0: bytes = (replace3 arrays.0#10 1u assigned_value%6#0) + let arrays.0#14: bytes = updated_target%6#0 + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + let arrays.0%out#4: bytes = arrays.0#14 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0%out#8 <- block@20, arrays.0%out#4 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let updated_target%7#0: bytes = (replace3 arrays.1#11 1u assigned_value%7#0) + let arrays.1#15: bytes = updated_target%7#0 + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + let arrays.1%out#4: bytes = arrays.1#15 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1%out#8 <- block@22, arrays.1%out#4 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let updated_target%8#0: bytes = (replace3 arrays.2#12 1u assigned_value%8#0) + let arrays.2#16: bytes = updated_target%8#0 + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + let arrays.2%out#4: bytes = arrays.2#16 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2%out#8 <- block@24, arrays.2%out#4 <- block@25) + let array_head_and_tail%3#0: bytes = arrays.0#14 + let item_offset%3#0: uint64 = (* 1u 1u) + let reinterpret_biguint%3#0: biguint = (extract3 array_head_and_tail%3#0 item_offset%3#0 1u) // on error: Index access is out of bounds + let tmp%8#0: uint64 = (+ start#0 6u) + let tmp%9#0: biguint = (itob tmp%8#0) + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 tmp%9#0) + (assert tmp%10#0) + let array_head_and_tail%4#0: bytes = arrays.1#15 + let item_offset%4#0: uint64 = (* 1u 1u) + let reinterpret_biguint%4#0: biguint = (extract3 array_head_and_tail%4#0 item_offset%4#0 1u) // on error: Index access is out of bounds + let tmp%11#0: uint64 = (+ start#0 7u) + let tmp%12#0: biguint = (itob tmp%11#0) + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 tmp%12#0) + (assert tmp%13#0) + let array_head_and_tail%5#0: bytes = arrays.2#16 + let item_offset%5#0: uint64 = (* 1u 1u) + let reinterpret_biguint%5#0: biguint = (extract3 array_head_and_tail%5#0 item_offset%5#0 1u) // on error: Index access is out of bounds + let tmp%14#0: uint64 = (+ start#0 8u) + let tmp%15#0: biguint = (itob tmp%14#0) + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 tmp%15#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir index 143052bb94..ae61f2251b 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir @@ -83,14 +83,70 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = (extract3 my_array_copy_2#3 item_offset%5#0 1u) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let nested#0: bytes = my_array#2 - let tmp%11#0: bytes = ((extract 0 4) nested#0) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) + let tmp%11#0: bool = 1u + let tmp%12#0: bool = 1u + let tmp%13#0: bool = (&& tmp%11#0 tmp%12#0) + let tmp%14#0: bool = 1u + let tmp%15#0: bool = (&& tmp%13#0 tmp%14#0) + (assert tmp%15#0) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 100u, 1u) + let item_offset%6#0: uint64 = 0u + let reinterpret_biguint%12#0: biguint = (extract3 my_array#3 item_offset%6#0 1u) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let item_offset%7#0: uint64 = 0u + let reinterpret_biguint%14#0: biguint = (extract3 my_array_copy_2#4 item_offset%7#0 1u) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let item_offset%8#0: uint64 = 0u + let reinterpret_biguint%16#0: biguint = (extract3 my_array_copy_3#1 item_offset%8#0 1u) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let item_offset%9#0: uint64 = 1u + let reinterpret_biguint%18#0: biguint = (extract3 my_array#3 item_offset%9#0 1u) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let item_offset%10#0: uint64 = 1u + let reinterpret_biguint%20#0: biguint = (extract3 my_array_copy_2#4 item_offset%10#0 1u) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let item_offset%11#0: uint64 = 1u + let reinterpret_biguint%22#0: biguint = (extract3 my_array_copy_3#1 item_offset%11#0 1u) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let item_offset%12#0: uint64 = 0u + let reinterpret_biguint%24#0: biguint = (extract3 my_array#4 item_offset%12#0 1u) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let item_offset%13#0: uint64 = 0u + let reinterpret_biguint%26#0: biguint = (extract3 my_array_copy_2#5 item_offset%13#0 1u) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let item_offset%14#0: uint64 = 0u + let reinterpret_biguint%28#0: biguint = (extract3 my_array_copy_3#2 item_offset%14#0 1u) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let item_offset%15#0: uint64 = 1u + let reinterpret_biguint%30#0: biguint = (extract3 my_array#4 item_offset%15#0 1u) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let item_offset%16#0: uint64 = 1u + let reinterpret_biguint%32#0: biguint = (extract3 my_array_copy_2#5 item_offset%16#0 1u) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let item_offset%17#0: uint64 = 1u + let reinterpret_biguint%34#0: biguint = (extract3 my_array_copy_3#2 item_offset%17#0 1u) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let nested#0: bytes = my_array#4 + let tmp%28#0: bytes = ((extract 0 4) nested#0) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let length%0#0: uint64 = 7u let as_bytes%0#0: bytes = (itob length%0#0) @@ -110,35 +166,111 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - let array#1: bytes = φ(arrays.0#0 <- block@0, arrays.1#0 <- block@3, arrays.2#0 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let item_offset%0#0: uint64 = 0u + let reinterpret_biguint%0#0: biguint = (extract3 arrays.0#1 item_offset%0#0 1u) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let item_offset%1#0: uint64 = 0u + let reinterpret_biguint%1#0: biguint = (extract3 arrays.1#2 item_offset%1#0 1u) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let item_offset%2#0: uint64 = 0u + let reinterpret_biguint%2#0: biguint = (extract3 arrays.2#3 item_offset%2#0 1u) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@19 + block@19: // after_if_else_L1 + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@19) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@19) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@19) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@19) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@19) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@19) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let item_offset%3#0: uint64 = 1u + let reinterpret_biguint%3#0: biguint = (extract3 arrays.0#14 item_offset%3#0 1u) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let item_offset%4#0: uint64 = 1u + let reinterpret_biguint%4#0: biguint = (extract3 arrays.1#15 item_offset%4#0 1u) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let item_offset%5#0: uint64 = 1u + let reinterpret_biguint%5#0: biguint = (extract3 arrays.2#16 item_offset%5#0 1u) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_10.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_10.ir index 4625bf244c..dc07dd1dab 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_10.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_10.ir @@ -37,13 +37,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -58,34 +96,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_11.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_11.ir index 3aa2148f64..ac8233aa77 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_11.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_11.ir @@ -35,13 +35,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -56,34 +94,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_12.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_12.ir index bf47b04131..50d3adc132 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_12.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_12.ir @@ -34,13 +34,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -55,34 +93,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_13.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_13.ir index 5995dbdaef..38c348aba1 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_13.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_13.ir @@ -32,13 +32,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -53,34 +91,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir index 0ba003d144..44807d49ee 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir @@ -63,13 +63,54 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) + let tmp%13#0: bool = 1u + let tmp%15#0: bool = (&& tmp%13#0 1u) + (assert tmp%15#0) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let length_uint16%0#0: bytes = 0x0007 let encoded_value%0#0: bytes = (concat length_uint16%0#0 "AARRGH!") @@ -87,34 +128,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir index 7d5fae38fa..043ea26b94 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir @@ -57,13 +57,53 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) + let tmp%15#0: bool = 1u + (assert tmp%15#0) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let encoded_value%0#0: bytes = 0x000741415252474821 let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) @@ -80,34 +120,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir index ede6c017a9..105d5079c6 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir @@ -51,13 +51,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -73,34 +111,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir index 30ac0217f5..479e0e46d8 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir @@ -49,13 +49,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -70,34 +108,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_6.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_6.ir index 8ed8f1e900..bc09ee27db 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_6.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_6.ir @@ -45,13 +45,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -66,34 +104,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_7.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_7.ir index 17b67eede1..dbb69c392b 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_7.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_7.ir @@ -40,13 +40,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -61,34 +99,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_8.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_8.ir index 2b574bf998..604d94c79f 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_8.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_8.ir @@ -39,13 +39,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -60,34 +98,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_9.ir b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_9.ir index f7cc580693..35c944e865 100644 --- a/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_9.ir +++ b/test_cases/arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_9.ir @@ -38,13 +38,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) - let tmp%11#0: bytes = ((extract 0 4) my_array#2) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) + let (my_array#3: bytes, my_array_copy_2#4: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#3) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#3) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#4: bytes, my_array_copy_2#5: bytes, my_array_copy_3#2: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#3, my_array_copy_2#4, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#4) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#4) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#4) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#1: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -59,34 +97,103 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset%2#0: uint64 = (- tail_offset%1#0 item_length%0#0) let as_bytes%1#0: bytes = (itob tail_offset%2#0) let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) - let struct#1: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) - return 1u 0u array#1 struct#1 + let struct#2: bytes = ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) + return 1u 0u array#1 struct#2 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) - goto_nth [block@3, block@4][loop_counter%0#1] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#2: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#3: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#2: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#2: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#2: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#2 arrays.1#2 arrays.2#2 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#1: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#2: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#3: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#5: bytes = ((replace2 1) arrays.0#1 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#6: bytes = ((replace2 1) arrays.1#2 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#7: bytes = ((replace2 1) arrays.2#3 assigned_value%5#0) + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#4: bool = 0u + let arrays.1%is_original#5: bool = 0u + let arrays.2%is_original#6: bool = 0u + goto block@20 + block@20: // after_if_else_L147 + let arrays.0#10: bytes = φ(arrays.0#5 <- block@0, arrays.0#5 <- block@13) + let arrays.1#11: bytes = φ(arrays.1#6 <- block@0, arrays.1#6 <- block@13) + let arrays.2#12: bytes = φ(arrays.2#7 <- block@0, arrays.2#7 <- block@13) + let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#4 <- block@13) + let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#5 <- block@13) + let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#6 <- block@13) + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#14: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + goto arrays.0%is_original#5 ? block@21 : block@22 + block@21: // if_body_L1 + goto block@22 + block@22: // after_if_else_L1 + let arrays.0%out#7: bytes = φ(arrays.0#5 <- block@20, arrays.0#14 <- block@21) + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#15: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + goto arrays.1%is_original#8 ? block@23 : block@24 + block@23: // if_body_L1 + goto block@24 + block@24: // after_if_else_L1 + let arrays.1%out#6: bytes = φ(arrays.1#6 <- block@22, arrays.1#15 <- block@23) + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#16: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + goto arrays.2%is_original#11 ? block@25 : block@26 + block@25: // if_body_L1 + goto block@26 + block@26: // after_if_else_L1 + let arrays.2%out#5: bytes = φ(arrays.2#7 <- block@24, arrays.2#16 <- block@25) + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir index 5e4d1c15a4..f5454d640c 100644 --- a/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir +++ b/test_cases/arc4_types/out/Arc4StructsTypeContract.ssa.ir @@ -107,6 +107,10 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: subroutine test_cases.arc4_types.structs.add(v1: bytes, v2: bytes) -> : block@0: // L64 + let v1%is_original#0: bool = 1u + let v1%out#0: bytes = v1#0 + let v2%is_original#0: bool = 1u + let v2%out#0: bytes = v2#0 let tmp%0#0: bytes = (extract3 v1#0 0u 8u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 v2#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = test_cases.arc4_types.structs.add_decimal(tmp%0#0, tmp%1#0) @@ -129,6 +133,8 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: block@0: // L72 + let flags%is_original#0: bool = 1u + let flags%out#0: bytes = flags#0 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -147,10 +153,12 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) let tmp%5#0: bool = (! tmp%4#0) (assert tmp%5#0) - return flags#0 + return flags%out#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: block@0: // L80 + let vector_flags%is_original#0: bool = 1u + let vector_flags%out#0: bytes = vector_flags#0 let tmp%0#0: bytes = (extract3 vector_flags#0 0u 16u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 tmp%0#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -161,7 +169,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) (assert tmp%5#0) - return vector_flags#0 + return vector_flags%out#0 program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: diff --git a/test_cases/arc4_types/out/MutableParams2.approval.teal b/test_cases/arc4_types/out/MutableParams2.approval.teal new file mode 100644 index 0000000000..4be905d621 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.approval.teal @@ -0,0 +1,158 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.approval_program: + intcblock 0 1 + callsub __puya_arc4_router__ + return + + +// test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> uint64: +__puya_arc4_router__: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + proto 0 1 + txn NumAppArgs + bz __puya_arc4_router___bare_routing@5 + pushbytes 0x6ac4a557 // method "test_array_rebinding()void" + txna ApplicationArgs 0 + match __puya_arc4_router___test_array_rebinding_route@2 + intc_0 // 0 + retsub + +__puya_arc4_router___test_array_rebinding_route@2: + // arc4_types/mutable_params2.py:5 + // @arc4.abimethod() + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + callsub test_array_rebinding + intc_1 // 1 + retsub + +__puya_arc4_router___bare_routing@5: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + txn OnCompletion + bnz __puya_arc4_router___after_if_else@9 + txn ApplicationID + ! + assert // is creating + intc_1 // 1 + retsub + +__puya_arc4_router___after_if_else@9: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + intc_0 // 0 + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: +test_array_rebinding: + // arc4_types/mutable_params2.py:5-6 + // @arc4.abimethod() + // def test_array_rebinding(self) -> None: + proto 0 0 + // arc4_types/mutable_params2.py:7 + // a = arc4.DynamicBytes(0) + pushbytes 0x000100 + // arc4_types/mutable_params2.py:8 + // self.maybe_modify_array(a, assign_local=True) + intc_1 // 1 + callsub maybe_modify_array + // arc4_types/mutable_params2.py:9 + // assert a == arc4.DynamicBytes(0, 1) + pushbytes 0x00020001 + == + assert + // arc4_types/mutable_params2.py:11 + // a = arc4.DynamicBytes(1) + pushbytes 0x000101 + // arc4_types/mutable_params2.py:12 + // self.maybe_modify_array(a, assign_local=False) + intc_0 // 0 + callsub maybe_modify_array + // arc4_types/mutable_params2.py:13 + // assert a == arc4.DynamicBytes(1, 42, 4) + pushbytes 0x0003012a04 + == + assert + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: uint64) -> bytes: +maybe_modify_array: + // arc4_types/mutable_params2.py:15-16 + // @subroutine + // def maybe_modify_array(self, a: arc4.DynamicBytes, *, assign_local: bool) -> None: # v0 + proto 2 1 + intc_0 // 0 + intc_1 // 1 + // arc4_types/mutable_params2.py:17 + // if assign_local: + frame_dig -1 + bz maybe_modify_array_else_body@10 + // arc4_types/mutable_params2.py:18 + // a.append(arc4.Byte(1)) # v1: modify out + frame_dig -2 + extract 2 0 + pushbytes 0x01 + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + // arc4_types/mutable_params2.py:21 + // a = arc4.DynamicBytes(1, 2, 4) # v4: local only + pushbytes 0x0003010204 + intc_0 // 0 + frame_bury 1 + frame_dig -2 + frame_bury 0 + frame_bury -2 + b maybe_modify_array_after_if_else@13 + +maybe_modify_array_else_body@10: + // arc4_types/mutable_params2.py:23 + // a.append(arc4.Byte(42)) # v5: modify out + frame_dig -2 + extract 2 0 + pushbytes 0x2a + concat + dup + len + itob + extract 6 2 + swap + concat + dupn 2 + frame_bury -2 + frame_bury 0 + frame_bury -2 + +maybe_modify_array_after_if_else@13: + // arc4_types/mutable_params2.py:25 + // a.append(arc4.Byte(4)) # v6: modify out IF not b ELSE local only + frame_dig -2 + extract 2 0 + pushbytes 0x04 + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + frame_dig 1 + bz maybe_modify_array_after_if_else@15 + frame_dig -2 + frame_bury 0 + +maybe_modify_array_after_if_else@15: + retsub diff --git a/test_cases/arc4_types/out/MutableParams2.arc32.json b/test_cases/arc4_types/out/MutableParams2.arc32.json new file mode 100644 index 0000000000..1514d314eb --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.arc32.json @@ -0,0 +1,50 @@ +{ + "hints": { + "test_array_rebinding()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmFyYzRfdHlwZXMubXV0YWJsZV9wYXJhbXMyLk11dGFibGVQYXJhbXMyLmFwcHJvdmFsX3Byb2dyYW06CiAgICBpbnRjYmxvY2sgMCAxCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdHlwZXMubXV0YWJsZV9wYXJhbXMyLk11dGFibGVQYXJhbXMyLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjQKICAgIC8vIGNsYXNzIE11dGFibGVQYXJhbXMyKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1CiAgICBwdXNoYnl0ZXMgMHg2YWM0YTU1NyAvLyBtZXRob2QgInRlc3RfYXJyYXlfcmViaW5kaW5nKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9hcnJheV9yZWJpbmRpbmdfcm91dGVAMgogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdGVzdF9hcnJheV9yZWJpbmRpbmdfcm91dGVAMjoKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHRlc3RfYXJyYXlfcmViaW5kaW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANToKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjQKICAgIC8vIGNsYXNzIE11dGFibGVQYXJhbXMyKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjQKICAgIC8vIGNsYXNzIE11dGFibGVQYXJhbXMyKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdHlwZXMubXV0YWJsZV9wYXJhbXMyLk11dGFibGVQYXJhbXMyLnRlc3RfYXJyYXlfcmViaW5kaW5nKCkgLT4gdm9pZDoKdGVzdF9hcnJheV9yZWJpbmRpbmc6CiAgICAvLyBhcmM0X3R5cGVzL211dGFibGVfcGFyYW1zMi5weTo1LTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9hcnJheV9yZWJpbmRpbmcoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6NwogICAgLy8gYSA9IGFyYzQuRHluYW1pY0J5dGVzKDApCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDAKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjgKICAgIC8vIHNlbGYubWF5YmVfbW9kaWZ5X2FycmF5KGEsIGFzc2lnbl9sb2NhbD1UcnVlKQogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgbWF5YmVfbW9kaWZ5X2FycmF5CiAgICAvLyBhcmM0X3R5cGVzL211dGFibGVfcGFyYW1zMi5weTo5CiAgICAvLyBhc3NlcnQgYSA9PSBhcmM0LkR5bmFtaWNCeXRlcygwLCAxKQogICAgcHVzaGJ5dGVzIDB4MDAwMjAwMDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjExCiAgICAvLyBhID0gYXJjNC5EeW5hbWljQnl0ZXMoMSkKICAgIHB1c2hieXRlcyAweDAwMDEwMQogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6MTIKICAgIC8vIHNlbGYubWF5YmVfbW9kaWZ5X2FycmF5KGEsIGFzc2lnbl9sb2NhbD1GYWxzZSkKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIG1heWJlX21vZGlmeV9hcnJheQogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6MTMKICAgIC8vIGFzc2VydCBhID09IGFyYzQuRHluYW1pY0J5dGVzKDEsIDQyLCA0KQogICAgcHVzaGJ5dGVzIDB4MDAwMzAxMmEwNAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3R5cGVzLm11dGFibGVfcGFyYW1zMi5NdXRhYmxlUGFyYW1zMi5tYXliZV9tb2RpZnlfYXJyYXkoYTogYnl0ZXMsIGFzc2lnbl9sb2NhbDogdWludDY0KSAtPiBieXRlczoKbWF5YmVfbW9kaWZ5X2FycmF5OgogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6MTUtMTYKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgbWF5YmVfbW9kaWZ5X2FycmF5KHNlbGYsIGE6IGFyYzQuRHluYW1pY0J5dGVzLCAqLCBhc3NpZ25fbG9jYWw6IGJvb2wpIC0+IE5vbmU6ICAjIHYwCiAgICBwcm90byAyIDEKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gMQogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6MTcKICAgIC8vIGlmIGFzc2lnbl9sb2NhbDoKICAgIGZyYW1lX2RpZyAtMQogICAgYnogbWF5YmVfbW9kaWZ5X2FycmF5X2Vsc2VfYm9keUAxMAogICAgLy8gYXJjNF90eXBlcy9tdXRhYmxlX3BhcmFtczIucHk6MTgKICAgIC8vIGEuYXBwZW5kKGFyYzQuQnl0ZSgxKSkgICMgdjE6IG1vZGlmeSBvdXQKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIHB1c2hieXRlcyAweDAxCiAgICBjb25jYXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyBhcmM0X3R5cGVzL211dGFibGVfcGFyYW1zMi5weToyMQogICAgLy8gYSA9IGFyYzQuRHluYW1pY0J5dGVzKDEsIDIsIDQpICAjIHY0OiBsb2NhbCBvbmx5CiAgICBwdXNoYnl0ZXMgMHgwMDAzMDEwMjA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2J1cnkgMAogICAgZnJhbWVfYnVyeSAtMgogICAgYiBtYXliZV9tb2RpZnlfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxMwoKbWF5YmVfbW9kaWZ5X2FycmF5X2Vsc2VfYm9keUAxMDoKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjIzCiAgICAvLyBhLmFwcGVuZChhcmM0LkJ5dGUoNDIpKSAgIyB2NTogbW9kaWZ5IG91dAogICAgZnJhbWVfZGlnIC0yCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzIDB4MmEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgZnJhbWVfYnVyeSAtMgogICAgZnJhbWVfYnVyeSAwCiAgICBmcmFtZV9idXJ5IC0yCgptYXliZV9tb2RpZnlfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIGFyYzRfdHlwZXMvbXV0YWJsZV9wYXJhbXMyLnB5OjI1CiAgICAvLyBhLmFwcGVuZChhcmM0LkJ5dGUoNCkpICAjIHY2OiBtb2RpZnkgb3V0IElGIG5vdCBiIEVMU0UgbG9jYWwgb25seQogICAgZnJhbWVfZGlnIC0yCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgLTIKICAgIGZyYW1lX2RpZyAxCiAgICBieiBtYXliZV9tb2RpZnlfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxNQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9idXJ5IDAKCm1heWJlX21vZGlmeV9hcnJheV9hZnRlcl9pZl9lbHNlQDE1OgogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmFyYzRfdHlwZXMubXV0YWJsZV9wYXJhbXMyLk11dGFibGVQYXJhbXMyLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "MutableParams2", + "methods": [ + { + "name": "test_array_rebinding", + "args": [], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.clear.teal b/test_cases/arc4_types/out/MutableParams2.clear.teal new file mode 100644 index 0000000000..e138fea62e --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.clear.teal @@ -0,0 +1,5 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.clear_state_program: + pushint 1 // 1 + return diff --git a/test_cases/arc4_types/out/MutableParams2.destructured.ir b/test_cases/arc4_types/out/MutableParams2.destructured.ir new file mode 100644 index 0000000000..e39aa56ece --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.destructured.ir @@ -0,0 +1,87 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let tmp%0#0: bool = (== a#1 0x00020001) + (assert tmp%0#0) + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let tmp%1#0: bool = (== a#1 0x0003012a04) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#5: bytes = 0x0003010204 + let a%is_original#0: bool = 0u + let a%out#7: bytes = a#0 + let a#0: bytes = a#5 + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#0: bytes = (concat len_16_bit%2#0 concatenated%2#0) + let a%out#7: bytes = a#0 + let a#0: bytes = a%out#7 + goto block@13 + block@13: // after_if_else_L17 + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#0) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#0: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#0 ? block@14 : block@15 + block@14: // if_body_L1 + let a%out#7: bytes = a#0 + goto block@15 + block@15: // after_if_else_L1 + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.ir b/test_cases/arc4_types/out/MutableParams2.ssa.ir new file mode 100644 index 0000000000..e9b1880586 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.ir @@ -0,0 +1,172 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@3} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + switch tmp%7#0 {0u => block@6, * => block@7} + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (== tmp%8#0 0u) + (assert tmp%9#0) // is creating + test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let result%0#0: bytes = (concat 0x 0x00) + let array_data%0#0: bytes = (concat 0x0001 result%0#0) + let a#0: bytes = array_data%0#0 + let maybe_modify_array%0#0: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#0, 1u) + let a#1: bytes = maybe_modify_array%0#0 + let result%1#0: bytes = (concat 0x 0x00) + let result%2#0: bytes = (concat result%1#0 0x01) + let array_data%1#0: bytes = (concat 0x0002 result%2#0) + let tmp%0#0: bool = (== a#1 array_data%1#0) + (assert tmp%0#0) + let result%3#0: bytes = (concat 0x 0x01) + let array_data%2#0: bytes = (concat 0x0001 result%3#0) + let a#2: bytes = array_data%2#0 + let maybe_modify_array%1#0: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#2, 0u) + let a#3: bytes = maybe_modify_array%1#0 + let result%4#0: bytes = (concat 0x 0x01) + let result%5#0: bytes = (concat result%4#0 0x2a) + let result%6#0: bytes = (concat result%5#0 0x04) + let array_data%3#0: bytes = (concat 0x0003 result%6#0) + let tmp%1#0: bool = (== a#3 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + let a%out#0: bytes = a#0 + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let data%0#0: bytes = (concat 0x 0x01) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#1: bytes = concat_result%0#0 + goto a%is_original#0 ? block@2 : block@3 + block@2: // if_body_L1 + let a%out#1: bytes = a#1 + goto block@3 + block@3: // after_if_else_L1 + let a%out#12: bytes = φ(a%out#0 <- block@1, a%out#1 <- block@2) + let result%0#0: bytes = (concat 0x 0x01) + let result%1#0: bytes = (concat result%0#0 0x02) + let result%2#0: bytes = (concat result%1#0 0x03) + let array_data%0#0: bytes = (concat 0x0003 result%2#0) + let a%is_original#1: bool = 0u + let a#2: bytes = array_data%0#0 + goto a%is_original#1 ? block@4 : block@5 + block@4: // if_body_L1 + let a%out#2: bytes = a#2 + goto block@5 + block@5: // after_if_else_L1 + let a%out#11: bytes = φ(a%out#12 <- block@3, a%out#2 <- block@4) + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#2) + let data%1#0: bytes = (concat 0x 0x04) + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 data%1#0) + let len_%1#0: uint64 = (len concatenated%1#0) + let as_bytes%1#0: bytes = (itob len_%1#0) + let len_16_bit%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let concat_result%1#0: bytes = (concat len_16_bit%1#0 concatenated%1#0) + let a#4: bytes = concat_result%1#0 + goto a%is_original#1 ? block@6 : block@7 + block@6: // if_body_L1 + let a%out#3: bytes = a#4 + goto block@7 + block@7: // after_if_else_L1 + let a%out#10: bytes = φ(a%out#11 <- block@5, a%out#3 <- block@6) + let result%3#0: bytes = (concat 0x 0x01) + let result%4#0: bytes = (concat result%3#0 0x02) + let result%5#0: bytes = (concat result%4#0 0x04) + let array_data%1#0: bytes = (concat 0x0003 result%5#0) + let a%is_original#3: bool = 0u + let a#5: bytes = array_data%1#0 + goto a%is_original#3 ? block@8 : block@9 + block@8: // if_body_L1 + let a%out#4: bytes = a#5 + goto block@9 + block@9: // after_if_else_L1 + let a%out#9: bytes = φ(a%out#10 <- block@7, a%out#4 <- block@8) + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let data%2#0: bytes = (concat 0x 0x2a) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 data%2#0) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%2#0: bytes = (concat len_16_bit%2#0 concatenated%2#0) + let a#6: bytes = concat_result%2#0 + goto a%is_original#0 ? block@11 : block@12 + block@11: // if_body_L1 + let a%out#5: bytes = a#6 + goto block@12 + block@12: // after_if_else_L1 + let a%out#13: bytes = φ(a%out#0 <- block@10, a%out#5 <- block@11) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@9, a#6 <- block@12) + let a%is_original#4: bool = φ(a%is_original#3 <- block@9, a%is_original#0 <- block@12) + let a%out#8: bytes = φ(a%out#9 <- block@9, a%out#13 <- block@12) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let data%3#0: bytes = (concat 0x 0x04) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 data%3#0) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let concat_result%3#0: bytes = (concat len_16_bit%3#0 concatenated%3#0) + let a#10: bytes = concat_result%3#0 + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + let a%out#6: bytes = a#10 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a%out#6 <- block@14) + return a%out#7 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create() -> void: + block@0: // L1 + return + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_1.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_1.ir new file mode 100644 index 0000000000..962e5bb1a6 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_1.ir @@ -0,0 +1,120 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let result%0#0: bytes = 0x00 + let a#0: bytes = (concat 0x0001 result%0#0) + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#0, 1u) + let result%1#0: bytes = 0x00 + let result%2#0: bytes = (concat result%1#0 0x01) + let array_data%1#0: bytes = (concat 0x0002 result%2#0) + let tmp%0#0: bool = (== a#1 array_data%1#0) + (assert tmp%0#0) + let result%3#0: bytes = 0x01 + let a#2: bytes = (concat 0x0001 result%3#0) + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#2, 0u) + let result%4#0: bytes = 0x01 + let result%5#0: bytes = (concat result%4#0 0x2a) + let result%6#0: bytes = (concat result%5#0 0x04) + let array_data%3#0: bytes = (concat 0x0003 result%6#0) + let tmp%1#0: bool = (== a#3 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let data%0#0: bytes = 0x01 + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let result%0#0: bytes = 0x01 + let result%1#0: bytes = (concat result%0#0 0x02) + let result%2#0: bytes = (concat result%1#0 0x03) + let a#2: bytes = (concat 0x0003 result%2#0) + goto block@5 + block@5: // after_if_else_L1 + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#2) + let data%1#0: bytes = 0x04 + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 data%1#0) + let len_%1#0: uint64 = (len concatenated%1#0) + let as_bytes%1#0: bytes = (itob len_%1#0) + let len_16_bit%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let a#4: bytes = (concat len_16_bit%1#0 concatenated%1#0) + goto block@7 + block@7: // after_if_else_L1 + let result%3#0: bytes = 0x01 + let result%4#0: bytes = (concat result%3#0 0x02) + let result%5#0: bytes = (concat result%4#0 0x04) + let a#5: bytes = (concat 0x0003 result%5#0) + let a%is_original#3: bool = 0u + goto block@9 + block@9: // after_if_else_L1 + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let data%2#0: bytes = 0x2a + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 data%2#0) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@9, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@9, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@9, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let data%3#0: bytes = 0x04 + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 data%3#0) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_2.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_2.ir new file mode 100644 index 0000000000..60427fa195 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_2.ir @@ -0,0 +1,103 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#0: bytes = 0x000100 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#0, 1u) + let result%2#0: bytes = 0x0001 + let array_data%1#0: bytes = (concat 0x0002 result%2#0) + let tmp%0#0: bool = (== a#1 array_data%1#0) + (assert tmp%0#0) + let a#2: bytes = 0x000101 + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#2, 0u) + let result%5#0: bytes = 0x012a + let result%6#0: bytes = (concat result%5#0 0x04) + let array_data%3#0: bytes = (concat 0x0003 result%6#0) + let tmp%1#0: bool = (== a#3 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let result%1#0: bytes = 0x0102 + let result%2#0: bytes = (concat result%1#0 0x03) + let a#2: bytes = (concat 0x0003 result%2#0) + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#2) + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 0x04) + let len_%1#0: uint64 = (len concatenated%1#0) + let as_bytes%1#0: bytes = (itob len_%1#0) + let len_16_bit%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let result%4#0: bytes = 0x0102 + let result%5#0: bytes = (concat result%4#0 0x04) + let a#5: bytes = (concat 0x0003 result%5#0) + let a%is_original#3: bool = 0u + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@1, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@1, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@1, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_3.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_3.ir new file mode 100644 index 0000000000..9827062f58 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_3.ir @@ -0,0 +1,96 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let array_data%1#0: bytes = 0x00020001 + let tmp%0#0: bool = (== a#1 array_data%1#0) + (assert tmp%0#0) + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let result%6#0: bytes = 0x012a04 + let array_data%3#0: bytes = (concat 0x0003 result%6#0) + let tmp%1#0: bool = (== a#3 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let result%2#0: bytes = 0x010203 + let a#2: bytes = (concat 0x0003 result%2#0) + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#2) + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 0x04) + let len_%1#0: uint64 = (len concatenated%1#0) + let as_bytes%1#0: bytes = (itob len_%1#0) + let result%5#0: bytes = 0x010204 + let a#5: bytes = (concat 0x0003 result%5#0) + let a%is_original#3: bool = 0u + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@1, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@1, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@1, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_4.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_4.ir new file mode 100644 index 0000000000..8567cf917e --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_4.ir @@ -0,0 +1,91 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let tmp%0#0: bool = (== a#1 0x00020001) + (assert tmp%0#0) + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let array_data%3#0: bytes = 0x0003012a04 + let tmp%1#0: bool = (== a#3 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#2: bytes = 0x0003010203 + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#2) + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 0x04) + let len_%1#0: uint64 = (len concatenated%1#0) + let a#5: bytes = 0x0003010204 + let a%is_original#3: bool = 0u + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@1, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@1, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@1, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_5.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_5.ir new file mode 100644 index 0000000000..7a6e5a4609 --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_5.ir @@ -0,0 +1,88 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let tmp%0#0: bool = (== a#1 0x00020001) + (assert tmp%0#0) + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let tmp%1#0: bool = (== a#3 0x0003012a04) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let expr_value_trimmed%1#0: bytes = 0x010203 + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 0x04) + let a#5: bytes = 0x0003010204 + let a%is_original#3: bool = 0u + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@1, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@1, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@1, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_6.ir b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_6.ir new file mode 100644 index 0000000000..5116c57fed --- /dev/null +++ b/test_cases/arc4_types/out/MutableParams2.ssa.opt_pass_6.ir @@ -0,0 +1,86 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let tmp%0#0: bool = (== a#1 0x00020001) + (assert tmp%0#0) + let a#3: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let tmp%1#0: bool = (== a#3 0x0003012a04) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#1: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#5: bytes = 0x0003010204 + let a%is_original#3: bool = 0u + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#6: bytes = (concat len_16_bit%2#0 concatenated%2#0) + goto block@13 + block@13: // after_if_else_L17 + let a#7: bytes = φ(a#5 <- block@1, a#6 <- block@10) + let a%is_original#4: bool = φ(a%is_original#3 <- block@1, a%is_original#0 <- block@10) + let a%out#8: bytes = φ(a#1 <- block@1, a#6 <- block@10) + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#7) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#10: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#4 ? block@14 : block@15 + block@14: // if_body_L1 + goto block@15 + block@15: // after_if_else_L1 + let a%out#7: bytes = φ(a%out#8 <- block@13, a#10 <- block@14) + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out/client_MutableParams2.py b/test_cases/arc4_types/out/client_MutableParams2.py new file mode 100644 index 0000000000..c141762528 --- /dev/null +++ b/test_cases/arc4_types/out/client_MutableParams2.py @@ -0,0 +1,13 @@ +# This file is auto-generated, do not modify +# flake8: noqa +# fmt: off +import typing + +import algopy + + +class MutableParams2(algopy.arc4.ARC4Client, typing.Protocol): + @algopy.arc4.abimethod + def test_array_rebinding( + self, + ) -> None: ... diff --git a/test_cases/arc4_types/out/module.awst b/test_cases/arc4_types/out/module.awst index 61dbaa8a04..595ae56932 100644 --- a/test_cases/arc4_types/out/module.awst +++ b/test_cases/arc4_types/out/module.awst @@ -366,6 +366,50 @@ contract Arc4MutationContract } } +contract MutableParams2 +{ + method_resolution_order: ( + algopy.arc4.ARC4Contract, + ) + + subroutine algopy.arc4.ARC4Contract.approval_program(): bool + { + return arc4_router() + } + + subroutine algopy.arc4.ARC4Contract.clear_state_program(): bool + { + return true + } + + abimethod test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding(): void + { + a: arc4.dynamic_array = new arc4.dynamic_array(0_arc4u8) + this::maybe_modify_array(a, assign_local=true) + assert(a == new arc4.dynamic_array(0_arc4u8, 1_arc4u8)) + a: arc4.dynamic_array = new arc4.dynamic_array(1_arc4u8) + this::maybe_modify_array(a, assign_local=false) + assert(a == new arc4.dynamic_array(1_arc4u8, 42_arc4u8, 4_arc4u8)) + } + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: arc4.dynamic_array, assign_local: bool): void + { + if (assign_local) { + a.extend((1_arc4u8)) + a: arc4.dynamic_array = new arc4.dynamic_array(1_arc4u8, 2_arc4u8, 3_arc4u8) + a.extend((4_arc4u8)) + a: arc4.dynamic_array = new arc4.dynamic_array(1_arc4u8, 2_arc4u8, 4_arc4u8) + } else { + a.extend((42_arc4u8)) + } + a.extend((4_arc4u8)) + } + + baremethod test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create(): void + { + } +} + contract Arc4MutableParamsContract { method_resolution_order: ( @@ -404,7 +448,24 @@ contract Arc4MutableParamsContract assert(reinterpret_cast(my_array_copy_2[0u]) == reinterpret_cast(1_arc4u8), comment="my_array_copy_2 should have original value") this::other_routine_2(my_array_copy_2) assert(reinterpret_cast(my_array_copy_2[0u]) == reinterpret_cast(10_arc4u8), comment="my_array_copy_2 should have mutated value") - this::other_routine_3((my_array.copy(), my_array_copy_2.copy(), my_array_copy_2.copy())) + my_array_copy_3: arc4.static_array = my_array_copy.copy() + originals: tuple,arc4.static_array,arc4.static_array> = (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()) + this::mutate_tuple_items_and_reassign((my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), start=0u, reassign=true) + assert(&&(&&(originals[0] == my_array, originals[1] == my_array_copy_2), originals[2] == my_array_copy_3)) + this::mutate_tuple_items_and_reassign((my_array, my_array_copy_2, my_array_copy_3), start=100u, reassign=true) + assert(reinterpret_cast(my_array[0u]) == reinterpret_cast(100_arc4u8)) + assert(reinterpret_cast(my_array_copy_2[0u]) == reinterpret_cast(101_arc4u8)) + assert(reinterpret_cast(my_array_copy_3[0u]) == reinterpret_cast(102_arc4u8)) + assert(reinterpret_cast(my_array[1u]) == reinterpret_cast(103_arc4u8)) + assert(reinterpret_cast(my_array_copy_2[1u]) == reinterpret_cast(104_arc4u8)) + assert(reinterpret_cast(my_array_copy_3[1u]) == reinterpret_cast(105_arc4u8)) + this::mutate_tuple_items_and_reassign((my_array, my_array_copy_2, my_array_copy_3), start=200u, reassign=false) + assert(reinterpret_cast(my_array[0u]) == reinterpret_cast(200_arc4u8)) + assert(reinterpret_cast(my_array_copy_2[0u]) == reinterpret_cast(201_arc4u8)) + assert(reinterpret_cast(my_array_copy_3[0u]) == reinterpret_cast(202_arc4u8)) + assert(reinterpret_cast(my_array[1u]) == reinterpret_cast(206_arc4u8)) + assert(reinterpret_cast(my_array_copy_2[1u]) == reinterpret_cast(207_arc4u8)) + assert(reinterpret_cast(my_array_copy_3[1u]) == reinterpret_cast(208_arc4u8)) nested: test_cases.arc4_types.mutable_params.StructWithArray = new test_cases.arc4_types.mutable_params.StructWithArray(test_array=my_array.copy()) this::other_routine_2(nested.test_array.copy()) } @@ -423,14 +484,26 @@ contract Arc4MutableParamsContract return copy } - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays: tuple,arc4.static_array,arc4.static_array>): void + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays: tuple,arc4.static_array,arc4.static_array>, start: uint64, reassign: bool): void { - for array in arrays { - array[0u]: arc4.uint8 = 99_arc4u8 + arrays[0][0u]: arc4.uint8 = arc4_encode(start, arc4.uint8) + arrays[1][0u]: arc4.uint8 = arc4_encode(start + 1u, arc4.uint8) + arrays[2][0u]: arc4.uint8 = arc4_encode(start + 2u, arc4.uint8) + assert(reinterpret_cast(arrays[0][0u]) == itob(start)) + assert(reinterpret_cast(arrays[1][0u]) == itob(start + 1u)) + assert(reinterpret_cast(arrays[2][0u]) == itob(start + 2u)) + arrays[0][1u]: arc4.uint8 = arc4_encode(start + 3u, arc4.uint8) + arrays[1][1u]: arc4.uint8 = arc4_encode(start + 4u, arc4.uint8) + arrays[2][1u]: arc4.uint8 = arc4_encode(start + 5u, arc4.uint8) + if (reassign) { + arrays: tuple,arc4.static_array,arc4.static_array> = (arrays[0].copy(), arrays[1].copy(), arrays[2].copy()) } - arrays[0][0u]: arc4.uint8 = 99_arc4u8 - arrays[1][0u]: arc4.uint8 = 99_arc4u8 - arrays[2][0u]: arc4.uint8 = 99_arc4u8 + arrays[0][1u]: arc4.uint8 = arc4_encode(start + 6u, arc4.uint8) + arrays[1][1u]: arc4.uint8 = arc4_encode(start + 7u, arc4.uint8) + arrays[2][1u]: arc4.uint8 = arc4_encode(start + 8u, arc4.uint8) + assert(reinterpret_cast(arrays[0][1u]) == itob(start + 6u)) + assert(reinterpret_cast(arrays[1][1u]) == itob(start + 7u)) + assert(reinterpret_cast(arrays[2][1u]) == itob(start + 8u)) } } diff --git a/test_cases/arc4_types/out/mutable_params.O0.log b/test_cases/arc4_types/out/mutable_params.O0.log index 854beb51bc..82c1cb6f9d 100644 --- a/test_cases/arc4_types/out/mutable_params.O0.log +++ b/test_cases/arc4_types/out/mutable_params.O0.log @@ -1,370 +1,1271 @@ -PC Teal Stack -1 intcblock 1 0 2 4 -7 bytecblock 0x "Happy" 0x05 "AARRGH!" 0x63 "Days" -33 callsub mutating_copies -38 proto 0 0 -41 bytec_0 0x -42 pushbytes 0x01 0x, 0x01 -45 concat 0x01 -46 pushbytes 0x02 0x01, 0x02 -49 concat 0x0102 -50 pushbytes 0x03 0x0102, 0x03 -53 concat 0x010203 -54 pushbytes 0x04 0x010203, 0x04 -57 concat 0x01020304 -58 bytec_0 0x01020304, 0x -59 swap 0x, 0x01020304 -60 concat 0x01020304 -61 pushbytes 0x00 0x01020304, 0x00 -64 intc_1 0x01020304, 0x00, 0 -65 intc_0 0x01020304, 0x00, 0, 1 -66 setbit 0x01020304, 0x80 -67 bytec_1 0x01020304, 0x80, "Happy" -68 len 0x01020304, 0x80, 5 -69 itob 0x01020304, 0x80, 0x0000000000000005 -70 extract 6 2 0x01020304, 0x80, 0x0005 -73 bytec_1 0x01020304, 0x80, 0x0005, "Happy" -74 concat 0x01020304, 0x80, 0x00054861707079 -75 swap 0x01020304, 0x00054861707079, 0x80 -76 bytec 5 0x01020304, 0x00054861707079, 0x80, "Days" -78 len 0x01020304, 0x00054861707079, 0x80, 4 -79 itob 0x01020304, 0x00054861707079, 0x80, 0x0000000000000004 -80 extract 6 2 0x01020304, 0x00054861707079, 0x80, 0x0004 -83 bytec 5 0x01020304, 0x00054861707079, 0x80, 0x0004, "Days" -85 concat 0x01020304, 0x00054861707079, 0x80, 0x000444617973 -86 cover 2 0x01020304, 0x000444617973, 0x00054861707079, 0x80 -88 bytec_0 0x01020304, 0x000444617973, 0x00054861707079, 0x80, 0x -89 swap 0x01020304, 0x000444617973, 0x00054861707079, 0x, 0x80 -90 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80 -91 pushbytes 0x32 0x01020304, 0x000444617973, 0x00054861707079, 0x80, "2" -94 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x8032 -95 pushint 6 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 6 -97 itob 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 0x0000000000000006 -98 extract 6 2 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 0x0006 -101 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006 -102 dig 1 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x00054861707079 -104 len 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 7 -105 pushint 6 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 7, 6 -107 + 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 13 -108 itob 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x000000000000000D -109 extract 6 2 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x000D -112 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006000D -113 swap 0x01020304, 0x000444617973, 0x80320006000D, 0x00054861707079 -114 concat 0x01020304, 0x000444617973, 0x80320006000D00054861707079 -115 swap 0x01020304, 0x80320006000D00054861707079, 0x000444617973 -116 concat 0x01020304, 0x80320006000D00054861707079000444617973 -117 dig 1 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 -119 cover 2 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973 -121 dup 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 -122 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973 -124 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 -125 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 2 -126 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 0x05 -127 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020504 -128 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 -129 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304 -131 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2 -132 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 1 -133 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2 -134 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 1 -135 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x03 -136 pushbytes 0x03 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x03, 0x03 -139 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 1 -140 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 -141 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 -143 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2 -144 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2, 1 -145 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2 -146 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2, 1 -147 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x05 -148 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x05, 0x05 -149 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 1 -150 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 -151 callsub other_routine 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 -309 proto 2 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 -312 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 -314 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 1 -315 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 1, 0x05 -316 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 -317 frame_bury -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973 -319 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, "AARRGH!" -320 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7 -321 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0000000000000007 -322 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0007 -325 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0007, "AARRGH!" -326 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821 -327 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973 -329 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973, 2 -330 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6 -331 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973 -333 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0 -334 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0, 6 -336 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D -337 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -339 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -340 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13 -341 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -343 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19 -344 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -346 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -348 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -350 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x000444617973 -351 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D -353 dig 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -355 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -356 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -357 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821000444617973 -358 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D000741415252474821000444617973, 13 -359 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 13, 6 -361 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 7 -362 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x000741415252474821, 0x80320006000D000741415252474821000444617973 -364 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 0x000741415252474821 -365 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9 -366 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973 -368 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973, 4 -369 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 13 -370 + 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 22 -371 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -373 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -374 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -375 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -378 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973 -379 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973, 4 -380 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 4, 0x000F -382 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -383 frame_bury -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973 -385 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -386 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 -387 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 -389 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -391 retsub 0x80320006000D00054861707079000444617973, 0x01020304, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -154 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 -156 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 -158 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -160 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0, 1, 0x01050504, 0x80320006000F000741415252474821000444617973 -162 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0, 1, 0x01050504 -164 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0, 1 -166 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0 -167 ! 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 1 -168 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504 -169 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504 -170 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1 -171 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1, 1 -172 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1 -173 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1, 1 -174 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x05 -175 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x05, 0x05 -176 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 1 -177 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504 -178 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x80320006000F000741415252474821000444617973 -180 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x80320006000F000741415252474821000444617973, 2 -181 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 6 -182 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504 -183 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 0x80320006000F000741415252474821000444617973 -185 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 0x80320006000F000741415252474821000444617973, 4 -186 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 15 -187 uncover 3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 15, 0x80320006000F000741415252474821000444617973 -189 uncover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 15, 0x80320006000F000741415252474821000444617973, 6 -191 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 -193 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821 -194 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, "AARRGH!" -195 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 7 -196 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0000000000000007 -197 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0007 -200 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0007, "AARRGH!" -201 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x000741415252474821 -202 == 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1 -203 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 -204 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304 -206 dig 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -208 callsub other_routine 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -309 proto 2 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -312 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 -314 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 1 -315 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 1, 0x05 -316 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 -317 frame_bury -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 -319 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, "AARRGH!" -320 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7 -321 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0000000000000007 -322 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0007 -325 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0007, "AARRGH!" -326 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821 -327 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973 -329 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973, 2 -330 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6 -331 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973 -333 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0 -334 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0, 6 -336 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D -337 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -339 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -340 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13 -341 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -343 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19 -344 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -346 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -348 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -350 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x000444617973 -351 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D -353 dig 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -355 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -356 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -357 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821000444617973 -358 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D000741415252474821000444617973, 13 -359 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 13, 6 -361 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 7 -362 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x000741415252474821, 0x80320006000D000741415252474821000444617973 -364 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 0x000741415252474821 -365 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9 -366 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973 -368 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973, 4 -369 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 13 -370 + 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 22 -371 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -373 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -374 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -375 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -378 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973 -379 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973, 4 -380 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 4, 0x000F -382 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -383 frame_bury -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 -385 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 -386 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 -387 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 -389 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -391 retsub 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -211 popn 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 -213 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304 -215 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1 -216 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1, 1 -217 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1 -218 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1, 1 -219 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x02 -220 pushbytes 0x02 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x02, 0x02 -223 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1 -224 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 -225 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973 -227 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 2 -228 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 6 -229 swap 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504 -230 dig 3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 0x80320006000D00054861707079000444617973 -232 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 0x80320006000D00054861707079000444617973, 4 -233 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 13 -234 uncover 4 0x01020304, 6, 0x01050504, 13, 0x80320006000D00054861707079000444617973 -236 uncover 3 0x01020304, 0x01050504, 13, 0x80320006000D00054861707079000444617973, 6 -238 uncover 2 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13 -240 substring3 0x01020304, 0x01050504, 0x00054861707079 -241 bytec_1 0x01020304, 0x01050504, 0x00054861707079, "Happy" -242 len 0x01020304, 0x01050504, 0x00054861707079, 5 -243 itob 0x01020304, 0x01050504, 0x00054861707079, 0x0000000000000005 -244 extract 6 2 0x01020304, 0x01050504, 0x00054861707079, 0x0005 -247 bytec_1 0x01020304, 0x01050504, 0x00054861707079, 0x0005, "Happy" -248 concat 0x01020304, 0x01050504, 0x00054861707079, 0x00054861707079 -249 == 0x01020304, 0x01050504, 1 -250 assert 0x01020304, 0x01050504 -251 swap 0x01050504, 0x01020304 -252 callsub other_routine_2 0x01050504, 0x01020304 -392 proto 1 2 0x01050504, 0x01020304 -395 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -397 dup 0x01050504, 0x01020304, 0x01020304, 0x01020304 -398 intc_1 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0 -399 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0, 0x0A -402 replace3 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -403 dup 0x01050504, 0x01020304, 0x01020304, 0x0A020304, 0x0A020304 -404 frame_bury -1 0x01050504, 0x0A020304, 0x01020304, 0x0A020304 -406 retsub 0x01050504, 0x01020304, 0x0A020304 -255 pop 0x01050504, 0x01020304 -256 dup 0x01050504, 0x01020304, 0x01020304 -257 intc_1 0x01050504, 0x01020304, 0x01020304, 0 -258 intc_0 0x01050504, 0x01020304, 0x01020304, 0, 1 -259 * 0x01050504, 0x01020304, 0x01020304, 0 -260 intc_0 0x01050504, 0x01020304, 0x01020304, 0, 1 -261 extract3 0x01050504, 0x01020304, 0x01 -262 pushbytes 0x01 0x01050504, 0x01020304, 0x01, 0x01 -265 b== 0x01050504, 0x01020304, 1 -266 assert 0x01050504, 0x01020304 -267 callsub other_routine_2 0x01050504, 0x01020304 -392 proto 1 2 0x01050504, 0x01020304 -395 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -397 dup 0x01050504, 0x01020304, 0x01020304, 0x01020304 -398 intc_1 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0 -399 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0, 0x0A -402 replace3 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -403 dup 0x01050504, 0x01020304, 0x01020304, 0x0A020304, 0x0A020304 -404 frame_bury -1 0x01050504, 0x0A020304, 0x01020304, 0x0A020304 -406 retsub 0x01050504, 0x01020304, 0x0A020304 -270 bury 1 0x01050504, 0x0A020304 -272 dup 0x01050504, 0x0A020304, 0x0A020304 -273 intc_1 0x01050504, 0x0A020304, 0x0A020304, 0 -274 intc_0 0x01050504, 0x0A020304, 0x0A020304, 0, 1 -275 * 0x01050504, 0x0A020304, 0x0A020304, 0 -276 intc_0 0x01050504, 0x0A020304, 0x0A020304, 0, 1 -277 extract3 0x01050504, 0x0A020304, 0x0A -278 pushbytes 0x0a 0x01050504, 0x0A020304, 0x0A, 0x0A -281 b== 0x01050504, 0x0A020304, 1 -282 assert 0x01050504, 0x0A020304 -283 dup2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 -284 swap 0x01050504, 0x0A020304, 0x0A020304, 0x01050504 -285 uncover 2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 -287 swap 0x01050504, 0x0A020304, 0x0A020304, 0x01050504 -288 uncover 2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 -290 uncover 2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -292 callsub other_routine_3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -407 proto 3 3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -410 intc_1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0 -411 frame_dig 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0, 0 -413 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0 -422 intc_0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0, 1 -423 frame_bury 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -425 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -411 frame_dig 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1, 1 -413 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -428 intc_2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1, 2 -429 frame_bury 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -431 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -411 frame_dig 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2, 2 -413 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -419 b other_routine_3_after_for@5 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -434 frame_dig -3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2, 0x01050504 -436 intc_1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2, 0x01050504, 0 -437 bytec 4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2, 0x01050504, 0, "c" -439 replace3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2, 0x63050504 -440 frame_bury -3 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 2 -442 frame_dig -2 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 2, 0x0A020304 -444 intc_1 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 2, 0x0A020304, 0 -445 bytec 4 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 2, 0x0A020304, 0, "c" -447 replace3 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 2, 0x63020304 -448 frame_bury -2 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 2 -450 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 2, 0x0A020304 -452 intc_1 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 2, 0x0A020304, 0 -453 bytec 4 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 2, 0x0A020304, 0, "c" -455 replace3 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 2, 0x63020304 -456 frame_bury -1 0x01050504, 0x63050504, 0x63020304, 0x63020304, 2 -458 frame_dig -3 0x01050504, 0x63050504, 0x63020304, 0x63020304, 2, 0x63050504 -460 frame_dig -2 0x01050504, 0x63050504, 0x63020304, 0x63020304, 2, 0x63050504, 0x63020304 -462 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x63020304, 2, 0x63050504, 0x63020304, 0x63020304 -464 uncover 3 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504, 0x63020304, 0x63020304, 2 -466 retsub 0x01050504, 0x63050504, 0x63020304, 0x63020304 -295 popn 3 0x01050504 -297 bytec_0 0x01050504, 0x -298 swap 0x, 0x01050504 -299 concat 0x01050504 -300 intc_1 0x01050504, 0 -301 intc_3 0x01050504, 0, 4 -302 extract3 0x01050504 -303 callsub other_routine_2 0x01050504 -392 proto 1 2 0x01050504 -395 frame_dig -1 0x01050504, 0x01050504 -397 dup 0x01050504, 0x01050504, 0x01050504 -398 intc_1 0x01050504, 0x01050504, 0x01050504, 0 -399 pushbytes 0x0a 0x01050504, 0x01050504, 0x01050504, 0, 0x0A -402 replace3 0x01050504, 0x01050504, 0x0A050504 -403 dup 0x01050504, 0x01050504, 0x0A050504, 0x0A050504 -404 frame_bury -1 0x0A050504, 0x01050504, 0x0A050504 -406 retsub 0x01050504, 0x0A050504 -306 popn 2 -308 retsub -36 intc_0 1 -37 return 1 \ No newline at end of file +PC Teal Stack +1 intcblock 1 0 2 4 +7 bytecblock 0x "Happy" 0x05 "AARRGH!" "Days" +31 callsub mutating_copies +36 proto 0 0 +39 bytec_0 0x +40 pushbytes 0x01 0x, 0x01 +43 concat 0x01 +44 pushbytes 0x02 0x01, 0x02 +47 concat 0x0102 +48 pushbytes 0x03 0x0102, 0x03 +51 concat 0x010203 +52 pushbytes 0x04 0x010203, 0x04 +55 concat 0x01020304 +56 bytec_0 0x01020304, 0x +57 swap 0x, 0x01020304 +58 concat 0x01020304 +59 pushbytes 0x00 0x01020304, 0x00 +62 intc_1 0x01020304, 0x00, 0 +63 intc_0 0x01020304, 0x00, 0, 1 +64 setbit 0x01020304, 0x80 +65 bytec_1 0x01020304, 0x80, "Happy" +66 len 0x01020304, 0x80, 5 +67 itob 0x01020304, 0x80, 0x0000000000000005 +68 extract 6 2 0x01020304, 0x80, 0x0005 +71 bytec_1 0x01020304, 0x80, 0x0005, "Happy" +72 concat 0x01020304, 0x80, 0x00054861707079 +73 swap 0x01020304, 0x00054861707079, 0x80 +74 bytec 4 0x01020304, 0x00054861707079, 0x80, "Days" +76 len 0x01020304, 0x00054861707079, 0x80, 4 +77 itob 0x01020304, 0x00054861707079, 0x80, 0x0000000000000004 +78 extract 6 2 0x01020304, 0x00054861707079, 0x80, 0x0004 +81 bytec 4 0x01020304, 0x00054861707079, 0x80, 0x0004, "Days" +83 concat 0x01020304, 0x00054861707079, 0x80, 0x000444617973 +84 cover 2 0x01020304, 0x000444617973, 0x00054861707079, 0x80 +86 bytec_0 0x01020304, 0x000444617973, 0x00054861707079, 0x80, 0x +87 swap 0x01020304, 0x000444617973, 0x00054861707079, 0x, 0x80 +88 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80 +89 pushbytes 0x32 0x01020304, 0x000444617973, 0x00054861707079, 0x80, "2" +92 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x8032 +93 pushint 6 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 6 +95 itob 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 0x0000000000000006 +96 extract 6 2 0x01020304, 0x000444617973, 0x00054861707079, 0x8032, 0x0006 +99 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006 +100 dig 1 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x00054861707079 +102 len 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 7 +103 pushint 6 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 7, 6 +105 + 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 13 +106 itob 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x000000000000000D +107 extract 6 2 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006, 0x000D +110 concat 0x01020304, 0x000444617973, 0x00054861707079, 0x80320006000D +111 swap 0x01020304, 0x000444617973, 0x80320006000D, 0x00054861707079 +112 concat 0x01020304, 0x000444617973, 0x80320006000D00054861707079 +113 swap 0x01020304, 0x80320006000D00054861707079, 0x000444617973 +114 concat 0x01020304, 0x80320006000D00054861707079000444617973 +115 dig 1 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 +117 cover 2 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973 +119 dup 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 +120 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020304, 0x80320006000D00054861707079000444617973 +122 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 +123 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 2 +124 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 0x05 +125 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020504 +126 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 +127 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304 +129 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2 +130 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 1 +131 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2 +132 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020304, 2, 1 +133 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x03 +134 pushbytes 0x03 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x03, 0x03 +137 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 1 +138 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 +139 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 +141 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2 +142 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2, 1 +143 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2 +144 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 2, 1 +145 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x05 +146 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x05, 0x05 +147 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 1 +148 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 +149 callsub other_routine 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 +531 proto 2 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973 +534 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 +536 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 1 +537 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 1, 0x05 +538 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 +539 frame_bury -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973 +541 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 1 +542 bz other_routine_after_if_else@2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973 +545 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, "AARRGH!" +546 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7 +547 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0000000000000007 +548 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0007 +551 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x0007, "AARRGH!" +552 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821 +553 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973 +555 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973, 2 +556 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6 +557 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973 +559 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0 +560 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0, 6 +562 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D +563 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +565 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +566 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13 +567 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +569 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19 +570 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +572 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +574 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +576 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x000444617973 +577 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D +579 dig 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +581 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +582 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +583 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821000444617973 +584 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D000741415252474821000444617973, 13 +585 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 13, 6 +587 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 7 +588 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x000741415252474821, 0x80320006000D000741415252474821000444617973 +590 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 0x000741415252474821 +591 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9 +592 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973 +594 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973, 4 +595 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 13 +596 + 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 22 +597 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +599 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +600 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +601 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +604 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973 +605 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973, 4 +606 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 4, 0x000F +608 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +609 frame_bury -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973 +611 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +612 bz other_routine_after_if_else@4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973 +615 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +616 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 +617 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 +619 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +621 retsub 0x80320006000D00054861707079000444617973, 0x01020304, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +152 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 +154 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 +156 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +158 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0, 1, 0x01050504, 0x80320006000F000741415252474821000444617973 +160 cover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0, 1, 0x01050504 +162 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0, 1 +164 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0 +165 ! 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 1 +166 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504 +167 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504 +168 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1 +169 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1, 1 +170 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1 +171 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x01050504, 1, 1 +172 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x05 +173 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x05, 0x05 +174 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 1 +175 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504 +176 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x80320006000F000741415252474821000444617973 +178 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 0x80320006000F000741415252474821000444617973, 2 +179 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 0x01050504, 6 +180 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504 +181 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 0x80320006000F000741415252474821000444617973 +183 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 0x80320006000F000741415252474821000444617973, 4 +184 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x80320006000F000741415252474821000444617973, 6, 0x01050504, 15 +185 uncover 3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 15, 0x80320006000F000741415252474821000444617973 +187 uncover 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 15, 0x80320006000F000741415252474821000444617973, 6 +189 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 +191 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821 +192 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, "AARRGH!" +193 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 7 +194 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0000000000000007 +195 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0007 +198 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x0007, "AARRGH!" +199 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x000741415252474821, 0x000741415252474821 +200 == 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1 +201 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 +202 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304 +204 dig 3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +206 callsub other_routine 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +531 proto 2 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +534 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 +536 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 1 +537 bytec_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 1, 0x05 +538 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 +539 frame_bury -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 +541 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 1 +542 bz other_routine_after_if_else@2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 +545 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, "AARRGH!" +546 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7 +547 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0000000000000007 +548 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0007 +551 bytec_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x0007, "AARRGH!" +552 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821 +553 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973 +555 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D00054861707079000444617973, 2 +556 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6 +557 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973 +559 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0 +560 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D00054861707079000444617973, 0, 6 +562 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D +563 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +565 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +566 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13 +567 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +569 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19 +570 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +572 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +574 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +576 substring3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D, 13, 0x000444617973 +577 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D +579 dig 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +581 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +582 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +583 concat 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 13, 0x80320006000D000741415252474821000444617973 +584 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 6, 0x80320006000D000741415252474821000444617973, 13 +585 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 13, 6 +587 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000741415252474821, 0x80320006000D000741415252474821000444617973, 7 +588 cover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x000741415252474821, 0x80320006000D000741415252474821000444617973 +590 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 0x000741415252474821 +591 len 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9 +592 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973 +594 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 0x80320006000D000741415252474821000444617973, 4 +595 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 9, 13 +596 + 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 7, 0x80320006000D000741415252474821000444617973, 22 +597 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +599 - 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +600 itob 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +601 extract 6 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +604 swap 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973 +605 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x000F, 0x80320006000D000741415252474821000444617973, 4 +606 uncover 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 4, 0x000F +608 replace3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +609 frame_bury -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 +611 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 +612 bz other_routine_after_if_else@4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 +615 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 +616 intc_1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 +617 frame_dig -2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 +619 frame_dig -1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +621 retsub 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +209 popn 4 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 +211 dig 1 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304 +213 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1 +214 dup 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1, 1 +215 * 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1 +216 intc_0 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x01020304, 1, 1 +217 extract3 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x02 +218 pushbytes 0x02 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x02, 0x02 +221 b== 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 1 +222 assert 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504 +223 dig 2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973 +225 intc_2 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 2 +226 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 0x01050504, 6 +227 swap 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504 +228 dig 3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 0x80320006000D00054861707079000444617973 +230 intc_3 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 0x80320006000D00054861707079000444617973, 4 +231 extract_uint16 0x80320006000D00054861707079000444617973, 0x01020304, 6, 0x01050504, 13 +232 uncover 4 0x01020304, 6, 0x01050504, 13, 0x80320006000D00054861707079000444617973 +234 uncover 3 0x01020304, 0x01050504, 13, 0x80320006000D00054861707079000444617973, 6 +236 uncover 2 0x01020304, 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13 +238 substring3 0x01020304, 0x01050504, 0x00054861707079 +239 bytec_1 0x01020304, 0x01050504, 0x00054861707079, "Happy" +240 len 0x01020304, 0x01050504, 0x00054861707079, 5 +241 itob 0x01020304, 0x01050504, 0x00054861707079, 0x0000000000000005 +242 extract 6 2 0x01020304, 0x01050504, 0x00054861707079, 0x0005 +245 bytec_1 0x01020304, 0x01050504, 0x00054861707079, 0x0005, "Happy" +246 concat 0x01020304, 0x01050504, 0x00054861707079, 0x00054861707079 +247 == 0x01020304, 0x01050504, 1 +248 assert 0x01020304, 0x01050504 +249 dig 1 0x01020304, 0x01050504, 0x01020304 +251 callsub other_routine_2 0x01020304, 0x01050504, 0x01020304 +622 proto 1 2 0x01020304, 0x01050504, 0x01020304 +625 frame_dig -1 0x01020304, 0x01050504, 0x01020304, 0x01020304 +627 dup 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304 +628 intc_1 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0 +629 pushbytes 0x0a 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0, 0x0A +632 replace3 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +633 frame_bury -1 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +635 intc_0 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1 +636 bz other_routine_2_after_if_else@2 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +639 frame_dig 0 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x01020304 +641 frame_dig -1 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x01020304, 0x0A020304 +643 uncover 2 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x0A020304, 0x01020304 +645 retsub 0x01020304, 0x01050504, 0x01020304, 0x0A020304 +254 pop 0x01020304, 0x01050504, 0x01020304 +255 dup 0x01020304, 0x01050504, 0x01020304, 0x01020304 +256 intc_1 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0 +257 intc_0 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0, 1 +258 * 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0 +259 intc_0 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0, 1 +260 extract3 0x01020304, 0x01050504, 0x01020304, 0x01 +261 pushbytes 0x01 0x01020304, 0x01050504, 0x01020304, 0x01, 0x01 +264 b== 0x01020304, 0x01050504, 0x01020304, 1 +265 assert 0x01020304, 0x01050504, 0x01020304 +266 callsub other_routine_2 0x01020304, 0x01050504, 0x01020304 +622 proto 1 2 0x01020304, 0x01050504, 0x01020304 +625 frame_dig -1 0x01020304, 0x01050504, 0x01020304, 0x01020304 +627 dup 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304 +628 intc_1 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0 +629 pushbytes 0x0a 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x01020304, 0, 0x0A +632 replace3 0x01020304, 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +633 frame_bury -1 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +635 intc_0 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1 +636 bz other_routine_2_after_if_else@2 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +639 frame_dig 0 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x01020304 +641 frame_dig -1 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x01020304, 0x0A020304 +643 uncover 2 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0x0A020304, 0x01020304 +645 retsub 0x01020304, 0x01050504, 0x01020304, 0x0A020304 +269 bury 1 0x01020304, 0x01050504, 0x0A020304 +271 dup 0x01020304, 0x01050504, 0x0A020304, 0x0A020304 +272 intc_1 0x01020304, 0x01050504, 0x0A020304, 0x0A020304, 0 +273 intc_0 0x01020304, 0x01050504, 0x0A020304, 0x0A020304, 0, 1 +274 * 0x01020304, 0x01050504, 0x0A020304, 0x0A020304, 0 +275 intc_0 0x01020304, 0x01050504, 0x0A020304, 0x0A020304, 0, 1 +276 extract3 0x01020304, 0x01050504, 0x0A020304, 0x0A +277 pushbytes 0x0a 0x01020304, 0x01050504, 0x0A020304, 0x0A, 0x0A +280 b== 0x01020304, 0x01050504, 0x0A020304, 1 +281 assert 0x01020304, 0x01050504, 0x0A020304 +282 uncover 2 0x01050504, 0x0A020304, 0x01020304 +284 dig 2 0x01050504, 0x0A020304, 0x01020304, 0x01050504 +286 swap 0x01050504, 0x0A020304, 0x01050504, 0x01020304 +287 dig 2 0x01050504, 0x0A020304, 0x01050504, 0x01020304, 0x0A020304 +289 cover 2 0x01050504, 0x0A020304, 0x0A020304, 0x01050504, 0x01020304 +291 dup 0x01050504, 0x0A020304, 0x0A020304, 0x01050504, 0x01020304, 0x01020304 +292 cover 2 0x01050504, 0x0A020304, 0x0A020304, 0x01020304, 0x01050504, 0x01020304 +294 swap 0x01050504, 0x0A020304, 0x0A020304, 0x01020304, 0x01020304, 0x01050504 +295 cover 5 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x01020304, 0x01020304 +297 uncover 2 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01020304, 0x0A020304 +299 cover 5 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01020304 +301 swap 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01020304 +302 cover 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304 +304 dig 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504 +306 dig 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304 +308 dig 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +310 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x0A020304, 0x01020304, 0x01050504 +312 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01020304, 0x01050504, 0x0A020304 +314 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304 +316 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0 +317 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +318 callsub mutate_tuple_items_and_reassign 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +646 proto 5 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +649 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0 +650 dupn 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0 +652 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1 +653 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504 +655 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1 +656 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304 +658 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1 +659 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +661 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0 +663 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x0000000000000000 +664 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x00 +667 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x00, 0x01050504 +669 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x00, 0x01050504, 0 +670 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x01050504, 0, 0x00 +672 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x00050504 +673 frame_bury -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +675 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 1 +676 bz mutate_tuple_items_and_reassign_after_if_else@2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +679 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x00050504 +681 frame_bury 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304 +683 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0 +685 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0, 1 +686 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 1 +687 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x0000000000000001 +688 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x01 +691 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x01, 0x0A020304 +693 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x01, 0x0A020304, 0 +694 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x0A020304, 0, 0x01 +696 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x01020304 +697 frame_bury -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304 +699 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 1 +700 bz mutate_tuple_items_and_reassign_after_if_else@4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304 +703 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x0A020304, 1, 0x01020304, 0x01020304 +705 frame_bury 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304 +707 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0 +709 intc_2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0, 2 +710 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 2 +711 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x0000000000000002 +712 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x02 +715 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x02, 0x01020304 +717 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x02, 0x01020304, 0 +718 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x01020304, 0, 0x02 +720 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x02020304 +721 frame_bury -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304 +723 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 1 +724 bz mutate_tuple_items_and_reassign_after_if_else@6 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304 +727 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x01020304, 0x02020304 +729 frame_bury 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +731 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504 +733 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504, 0 +734 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504, 0, 1 +735 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504, 0 +736 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504, 0, 1 +737 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00 +738 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00, 0 +740 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00, 0x0000000000000000 +741 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 1 +742 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +743 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01020304 +745 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01020304, 0 +746 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01020304, 0, 1 +747 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01020304, 0 +748 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01020304, 0, 1 +749 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01 +750 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01, 0 +752 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01, 0, 1 +753 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01, 1 +754 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x01, 0x0000000000000001 +755 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 1 +756 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +757 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02020304 +759 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02020304, 0 +760 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02020304, 0, 1 +761 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02020304, 0 +762 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02020304, 0, 1 +763 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02 +764 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02, 0 +766 intc_2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02, 0, 2 +767 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02, 2 +768 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x02, 0x0000000000000002 +769 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 1 +770 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +771 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0 +773 pushint 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0, 3 +775 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 3 +776 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x0000000000000003 +777 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x03 +780 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x03, 0x00050504 +782 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x03, 0x00050504, 1 +783 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00050504, 1, 0x03 +785 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00030504 +786 frame_bury -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +788 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 1 +789 bz mutate_tuple_items_and_reassign_after_if_else@8 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304 +792 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00050504, 1, 0x01020304, 1, 0x02020304, 0x00030504 +794 frame_bury 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304 +796 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0 +798 intc_3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0, 4 +799 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 4 +800 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x0000000000000004 +801 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x04 +804 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x04, 0x01020304 +806 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x04, 0x01020304, 1 +807 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x01020304, 1, 0x04 +809 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x01040304 +810 frame_bury -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304 +812 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 1 +813 bz mutate_tuple_items_and_reassign_after_if_else@10 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304 +816 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01020304, 1, 0x02020304, 0x01040304 +818 frame_bury 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304 +820 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0 +822 pushint 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0, 5 +824 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 5 +825 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x0000000000000005 +826 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x05 +829 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x05, 0x02020304 +831 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x05, 0x02020304, 1 +832 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x02020304, 1, 0x05 +834 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x02050304 +835 frame_bury -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304 +837 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 1 +838 bz mutate_tuple_items_and_reassign_after_if_else@12 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304 +841 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02020304, 0x02050304 +843 frame_bury 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +845 frame_dig 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304 +847 frame_bury 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +849 frame_dig 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x01040304 +851 frame_bury 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x01040304, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +853 frame_dig 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x01040304, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x00030504 +855 frame_bury 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +857 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304 +859 frame_bury 4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +861 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x01040304 +863 frame_bury 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +865 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x00030504 +867 frame_bury 0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +869 frame_dig -1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 1 +871 bz mutate_tuple_items_and_reassign_after_if_else@20 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304 +874 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x00030504 +876 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x00030504, 0x01040304 +878 swap 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x01040304, 0x00030504 +879 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x01040304, 0x00030504, 0x02050304 +881 cover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504 +883 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 1, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504, 0 +884 frame_bury 6 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504 +886 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 1, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504, 0 +887 frame_bury 8 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504 +889 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 1, 0x02050304, 0x02050304, 0x01040304, 0x00030504, 0 +890 frame_bury 10 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304, 0x01040304, 0x00030504 +892 frame_bury -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304, 0x01040304 +894 frame_bury -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304 +896 frame_bury -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +898 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +899 bz mutate_tuple_items_and_reassign_after_if_else@15 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +906 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +907 bz mutate_tuple_items_and_reassign_after_if_else@17 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +914 intc_1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +915 bz mutate_tuple_items_and_reassign_after_if_else@19 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +922 frame_dig 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304 +924 frame_bury 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +926 frame_dig 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01040304 +928 frame_bury 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +930 frame_dig 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +932 frame_bury 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +934 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304 +936 frame_bury 4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +938 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01040304 +940 frame_bury 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +942 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +944 frame_bury 0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +946 frame_dig 5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304 +948 frame_bury 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +950 frame_dig 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01040304 +952 frame_bury 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +954 frame_dig 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +956 frame_bury 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +958 frame_dig 4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304 +960 frame_bury -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +962 frame_dig 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01040304 +964 frame_bury -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +966 frame_dig 0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +968 frame_bury -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +970 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +972 pushint 6 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0, 6 +974 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 6 +975 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x0000000000000006 +976 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06 +979 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 0x00030504 +981 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 0x00030504, 1 +982 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504, 1, 0x06 +984 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504 +985 frame_bury -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +987 frame_dig 6 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +989 bz mutate_tuple_items_and_reassign_after_if_else@22 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +996 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +998 pushint 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0, 7 +1000 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 7 +1001 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x0000000000000007 +1002 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07 +1005 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 0x01040304 +1007 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 0x01040304, 1 +1008 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01040304, 1, 0x07 +1010 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304 +1011 frame_bury -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1013 frame_dig 8 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +1015 bz mutate_tuple_items_and_reassign_after_if_else@24 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1022 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +1024 pushint 8 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0, 8 +1026 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 8 +1027 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x0000000000000008 +1028 extract 7 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08 +1031 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 0x02050304 +1033 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 0x02050304, 1 +1034 uncover 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02050304, 1, 0x08 +1036 replace3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02050304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304 +1037 frame_bury -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1039 frame_dig 10 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0 +1041 bz mutate_tuple_items_and_reassign_after_if_else@26 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1048 frame_dig -5 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504 +1050 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504, 1 +1051 dup 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504, 1, 1 +1052 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504, 1 +1053 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00060504, 1, 1 +1054 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06 +1055 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 0 +1057 pushint 6 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 0, 6 +1059 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 6 +1060 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x06, 0x0000000000000006 +1061 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 1 +1062 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1063 frame_dig -4 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304 +1065 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304, 1 +1066 dup 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304, 1, 1 +1067 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304, 1 +1068 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x01070304, 1, 1 +1069 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07 +1070 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 0 +1072 pushint 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 0, 7 +1074 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 7 +1075 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x07, 0x0000000000000007 +1076 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 1 +1077 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1078 frame_dig -3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304 +1080 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304, 1 +1081 dup 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304, 1, 1 +1082 * 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304, 1 +1083 intc_0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x02080304, 1, 1 +1084 extract3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08 +1085 frame_dig -2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 0 +1087 pushint 8 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 0, 8 +1089 + 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 8 +1090 itob 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x08, 0x0000000000000008 +1091 b== 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 1 +1092 assert 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1093 frame_dig 7 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +1095 frame_dig 9 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504, 0x01040304 +1097 frame_dig 11 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x01040304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504, 0x01040304, 0x02050304 +1099 frame_bury 2 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x00030504, 0x02050304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504, 0x01040304 +1101 frame_bury 1 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304, 0x00030504 +1103 frame_bury 0 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00060504, 0x01070304, 0x02080304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x01040304, 0x02050304, 0x02050304, 0, 0x00030504, 0, 0x01040304, 0, 0x02050304 +1105 retsub 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304, 0x00030504, 0x01040304, 0x02050304 +321 popn 3 0x01020304, 0x0A020304, 0x01050504, 0x01050504, 0x0A020304, 0x01020304 +323 uncover 3 0x01020304, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0x01050504 +325 dig 3 0x01020304, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0x01050504, 0x01050504 +327 == 0x01020304, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 1 +328 uncover 4 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1, 0x0A020304 +330 dig 3 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1, 0x0A020304, 0x0A020304 +332 == 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1, 1 +333 && 0x01020304, 0x01050504, 0x0A020304, 0x01020304, 1 +334 uncover 4 0x01050504, 0x0A020304, 0x01020304, 1, 0x01020304 +336 dig 2 0x01050504, 0x0A020304, 0x01020304, 1, 0x01020304, 0x01020304 +338 == 0x01050504, 0x0A020304, 0x01020304, 1, 1 +339 && 0x01050504, 0x0A020304, 0x01020304, 1 +340 assert 0x01050504, 0x0A020304, 0x01020304 +341 uncover 2 0x0A020304, 0x01020304, 0x01050504 +343 uncover 2 0x01020304, 0x01050504, 0x0A020304 +345 uncover 2 0x01050504, 0x0A020304, 0x01020304 +347 pushint 100 0x01050504, 0x0A020304, 0x01020304, 100 +349 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1 +350 callsub mutate_tuple_items_and_reassign 0x01050504, 0x0A020304, 0x01020304, 100, 1 +646 proto 5 3 0x01050504, 0x0A020304, 0x01020304, 100, 1 +649 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0 +650 dupn 5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0 +652 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1 +653 frame_dig -5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504 +655 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1 +656 frame_dig -4 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304 +658 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1 +659 frame_dig -3 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +661 frame_dig -2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 100 +663 itob 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x0000000000000064 +664 extract 7 1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, "d" +667 frame_dig -5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, "d", 0x01050504 +669 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, "d", 0x01050504, 0 +670 uncover 2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x01050504, 0, "d" +672 replace3 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x64050504 +673 frame_bury -5 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +675 intc_0 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 1 +676 bz mutate_tuple_items_and_reassign_after_if_else@2 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304 +679 frame_dig -5 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x01050504, 1, 0x0A020304, 1, 0x01020304, 0x64050504 +681 frame_bury 7 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304 +683 frame_dig -2 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 100 +685 intc_0 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 100, 1 +686 + 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 101 +687 itob 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 0x0000000000000065 +688 extract 7 1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, "e" +691 frame_dig -4 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, "e", 0x0A020304 +693 intc_1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, "e", 0x0A020304, 0 +694 uncover 2 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 0x0A020304, 0, "e" +696 replace3 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 0x65020304 +697 frame_bury -4 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304 +699 intc_0 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 1 +700 bz mutate_tuple_items_and_reassign_after_if_else@4 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304 +703 frame_dig -4 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x0A020304, 1, 0x01020304, 0x65020304 +705 frame_bury 9 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304 +707 frame_dig -2 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 100 +709 intc_2 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 100, 2 +710 + 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 102 +711 itob 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 0x0000000000000066 +712 extract 7 1 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, "f" +715 frame_dig -3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, "f", 0x01020304 +717 intc_1 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, "f", 0x01020304, 0 +718 uncover 2 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 0x01020304, 0, "f" +720 replace3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 0x66020304 +721 frame_bury -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304 +723 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 1 +724 bz mutate_tuple_items_and_reassign_after_if_else@6 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304 +727 frame_dig -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x01020304, 0x66020304 +729 frame_bury 11 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +731 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504 +733 intc_1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504, 0 +734 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504, 0, 1 +735 * 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504, 0 +736 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504, 0, 1 +737 extract3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "d" +738 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "d", 100 +740 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "d", 0x0000000000000064 +741 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 1 +742 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +743 frame_dig -4 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x65020304 +745 intc_1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x65020304, 0 +746 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x65020304, 0, 1 +747 * 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x65020304, 0 +748 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x65020304, 0, 1 +749 extract3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "e" +750 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "e", 100 +752 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "e", 100, 1 +753 + 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "e", 101 +754 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "e", 0x0000000000000065 +755 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 1 +756 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +757 frame_dig -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x66020304 +759 intc_1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x66020304, 0 +760 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x66020304, 0, 1 +761 * 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x66020304, 0 +762 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x66020304, 0, 1 +763 extract3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "f" +764 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "f", 100 +766 intc_2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "f", 100, 2 +767 + 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "f", 102 +768 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "f", 0x0000000000000066 +769 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 1 +770 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +771 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 100 +773 pushint 3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 100, 3 +775 + 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 103 +776 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x0000000000000067 +777 extract 7 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "g" +780 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "g", 0x64050504 +782 intc_0 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, "g", 0x64050504, 1 +783 uncover 2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64050504, 1, "g" +785 replace3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64670504 +786 frame_bury -5 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +788 intc_0 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 1 +789 bz mutate_tuple_items_and_reassign_after_if_else@8 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304 +792 frame_dig -5 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64050504, 1, 0x65020304, 1, 0x66020304, 0x64670504 +794 frame_bury 7 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304 +796 frame_dig -2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 100 +798 intc_3 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 100, 4 +799 + 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 104 +800 itob 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 0x0000000000000068 +801 extract 7 1 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, "h" +804 frame_dig -4 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, "h", 0x65020304 +806 intc_0 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, "h", 0x65020304, 1 +807 uncover 2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 0x65020304, 1, "h" +809 replace3 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 0x65680304 +810 frame_bury -4 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304 +812 intc_0 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 1 +813 bz mutate_tuple_items_and_reassign_after_if_else@10 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304 +816 frame_dig -4 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65020304, 1, 0x66020304, 0x65680304 +818 frame_bury 9 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304 +820 frame_dig -2 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 100 +822 pushint 5 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 100, 5 +824 + 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 105 +825 itob 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 0x0000000000000069 +826 extract 7 1 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, "i" +829 frame_dig -3 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, "i", 0x66020304 +831 intc_0 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, "i", 0x66020304, 1 +832 uncover 2 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 0x66020304, 1, "i" +834 replace3 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 0x66690304 +835 frame_bury -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304 +837 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 1 +838 bz mutate_tuple_items_and_reassign_after_if_else@12 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304 +841 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66020304, 0x66690304 +843 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +845 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304 +847 frame_bury 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +849 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x65680304 +851 frame_bury 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x65680304, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +853 frame_dig 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x65680304, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x64670504 +855 frame_bury 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +857 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304 +859 frame_bury 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +861 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x65680304 +863 frame_bury 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +865 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x64670504 +867 frame_bury 0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +869 frame_dig -1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 1 +871 bz mutate_tuple_items_and_reassign_after_if_else@20 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +874 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x64670504 +876 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x64670504, 0x65680304 +878 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x65680304, 0x64670504 +879 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x65680304, 0x64670504, 0x66690304 +881 cover 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504 +883 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504, 0 +884 frame_bury 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504 +886 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504, 0 +887 frame_bury 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504 +889 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 1, 0x66690304, 0x66690304, 0x65680304, 0x64670504, 0 +890 frame_bury 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304, 0x65680304, 0x64670504 +892 frame_bury -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304, 0x65680304 +894 frame_bury -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304 +896 frame_bury -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +898 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +899 bz mutate_tuple_items_and_reassign_after_if_else@15 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +906 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +907 bz mutate_tuple_items_and_reassign_after_if_else@17 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +914 intc_1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +915 bz mutate_tuple_items_and_reassign_after_if_else@19 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +922 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304 +924 frame_bury 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +926 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x65680304 +928 frame_bury 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +930 frame_dig 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +932 frame_bury 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +934 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304 +936 frame_bury 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +938 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x65680304 +940 frame_bury 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +942 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +944 frame_bury 0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +946 frame_dig 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304 +948 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +950 frame_dig 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x65680304 +952 frame_bury 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +954 frame_dig 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +956 frame_bury 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +958 frame_dig 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304 +960 frame_bury -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +962 frame_dig 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x65680304 +964 frame_bury -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +966 frame_dig 0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +968 frame_bury -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +970 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100 +972 pushint 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100, 6 +974 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 106 +975 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x000000000000006A +976 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j" +979 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 0x64670504 +981 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 0x64670504, 1 +982 uncover 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504, 1, "j" +984 replace3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504 +985 frame_bury -5 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +987 frame_dig 6 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +989 bz mutate_tuple_items_and_reassign_after_if_else@22 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +996 frame_dig -2 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100 +998 pushint 7 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100, 7 +1000 + 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 107 +1001 itob 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x000000000000006B +1002 extract 7 1 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k" +1005 frame_dig -4 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 0x65680304 +1007 intc_0 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 0x65680304, 1 +1008 uncover 2 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x65680304, 1, "k" +1010 replace3 0x646A0504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304 +1011 frame_bury -4 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1013 frame_dig 8 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +1015 bz mutate_tuple_items_and_reassign_after_if_else@24 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1022 frame_dig -2 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100 +1024 pushint 8 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 100, 8 +1026 + 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 108 +1027 itob 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x000000000000006C +1028 extract 7 1 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l" +1031 frame_dig -3 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 0x66690304 +1033 intc_0 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 0x66690304, 1 +1034 uncover 2 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x66690304, 1, "l" +1036 replace3 0x646A0504, 0x656B0304, 0x66690304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304 +1037 frame_bury -3 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1039 frame_dig 10 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0 +1041 bz mutate_tuple_items_and_reassign_after_if_else@26 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1048 frame_dig -5 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504 +1050 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504, 1 +1051 dup 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504, 1, 1 +1052 * 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504, 1 +1053 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x646A0504, 1, 1 +1054 extract3 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j" +1055 frame_dig -2 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 100 +1057 pushint 6 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 100, 6 +1059 + 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 106 +1060 itob 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "j", 0x000000000000006A +1061 b== 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 1 +1062 assert 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1063 frame_dig -4 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304 +1065 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304, 1 +1066 dup 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304, 1, 1 +1067 * 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304, 1 +1068 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x656B0304, 1, 1 +1069 extract3 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k" +1070 frame_dig -2 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 100 +1072 pushint 7 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 100, 7 +1074 + 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 107 +1075 itob 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "k", 0x000000000000006B +1076 b== 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 1 +1077 assert 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1078 frame_dig -3 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304 +1080 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304, 1 +1081 dup 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304, 1, 1 +1082 * 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304, 1 +1083 intc_0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x666C0304, 1, 1 +1084 extract3 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l" +1085 frame_dig -2 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 100 +1087 pushint 8 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 100, 8 +1089 + 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 108 +1090 itob 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, "l", 0x000000000000006C +1091 b== 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 1 +1092 assert 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1093 frame_dig 7 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +1095 frame_dig 9 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504, 0x65680304 +1097 frame_dig 11 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x65680304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504, 0x65680304, 0x66690304 +1099 frame_bury 2 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x64670504, 0x66690304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504, 0x65680304 +1101 frame_bury 1 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304, 0x64670504 +1103 frame_bury 0 0x646A0504, 0x656B0304, 0x666C0304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x65680304, 0x66690304, 0x66690304, 0, 0x64670504, 0, 0x65680304, 0, 0x66690304 +1105 retsub 0x64670504, 0x65680304, 0x66690304 +353 cover 2 0x66690304, 0x64670504, 0x65680304 +355 cover 2 0x65680304, 0x66690304, 0x64670504 +357 cover 2 0x64670504, 0x65680304, 0x66690304 +359 cover 2 0x66690304, 0x64670504, 0x65680304 +361 swap 0x66690304, 0x65680304, 0x64670504 +362 dup 0x66690304, 0x65680304, 0x64670504, 0x64670504 +363 intc_1 0x66690304, 0x65680304, 0x64670504, 0x64670504, 0 +364 intc_0 0x66690304, 0x65680304, 0x64670504, 0x64670504, 0, 1 +365 * 0x66690304, 0x65680304, 0x64670504, 0x64670504, 0 +366 intc_0 0x66690304, 0x65680304, 0x64670504, 0x64670504, 0, 1 +367 extract3 0x66690304, 0x65680304, 0x64670504, "d" +368 pushbytes 0x64 0x66690304, 0x65680304, 0x64670504, "d", "d" +371 b== 0x66690304, 0x65680304, 0x64670504, 1 +372 assert 0x66690304, 0x65680304, 0x64670504 +373 dig 1 0x66690304, 0x65680304, 0x64670504, 0x65680304 +375 intc_1 0x66690304, 0x65680304, 0x64670504, 0x65680304, 0 +376 intc_0 0x66690304, 0x65680304, 0x64670504, 0x65680304, 0, 1 +377 * 0x66690304, 0x65680304, 0x64670504, 0x65680304, 0 +378 intc_0 0x66690304, 0x65680304, 0x64670504, 0x65680304, 0, 1 +379 extract3 0x66690304, 0x65680304, 0x64670504, "e" +380 pushbytes 0x65 0x66690304, 0x65680304, 0x64670504, "e", "e" +383 b== 0x66690304, 0x65680304, 0x64670504, 1 +384 assert 0x66690304, 0x65680304, 0x64670504 +385 dig 2 0x66690304, 0x65680304, 0x64670504, 0x66690304 +387 intc_1 0x66690304, 0x65680304, 0x64670504, 0x66690304, 0 +388 intc_0 0x66690304, 0x65680304, 0x64670504, 0x66690304, 0, 1 +389 * 0x66690304, 0x65680304, 0x64670504, 0x66690304, 0 +390 intc_0 0x66690304, 0x65680304, 0x64670504, 0x66690304, 0, 1 +391 extract3 0x66690304, 0x65680304, 0x64670504, "f" +392 pushbytes 0x66 0x66690304, 0x65680304, 0x64670504, "f", "f" +395 b== 0x66690304, 0x65680304, 0x64670504, 1 +396 assert 0x66690304, 0x65680304, 0x64670504 +397 dup 0x66690304, 0x65680304, 0x64670504, 0x64670504 +398 intc_0 0x66690304, 0x65680304, 0x64670504, 0x64670504, 1 +399 dup 0x66690304, 0x65680304, 0x64670504, 0x64670504, 1, 1 +400 * 0x66690304, 0x65680304, 0x64670504, 0x64670504, 1 +401 intc_0 0x66690304, 0x65680304, 0x64670504, 0x64670504, 1, 1 +402 extract3 0x66690304, 0x65680304, 0x64670504, "g" +403 pushbytes 0x67 0x66690304, 0x65680304, 0x64670504, "g", "g" +406 b== 0x66690304, 0x65680304, 0x64670504, 1 +407 assert 0x66690304, 0x65680304, 0x64670504 +408 dig 1 0x66690304, 0x65680304, 0x64670504, 0x65680304 +410 intc_0 0x66690304, 0x65680304, 0x64670504, 0x65680304, 1 +411 dup 0x66690304, 0x65680304, 0x64670504, 0x65680304, 1, 1 +412 * 0x66690304, 0x65680304, 0x64670504, 0x65680304, 1 +413 intc_0 0x66690304, 0x65680304, 0x64670504, 0x65680304, 1, 1 +414 extract3 0x66690304, 0x65680304, 0x64670504, "h" +415 pushbytes 0x68 0x66690304, 0x65680304, 0x64670504, "h", "h" +418 b== 0x66690304, 0x65680304, 0x64670504, 1 +419 assert 0x66690304, 0x65680304, 0x64670504 +420 dig 2 0x66690304, 0x65680304, 0x64670504, 0x66690304 +422 intc_0 0x66690304, 0x65680304, 0x64670504, 0x66690304, 1 +423 dup 0x66690304, 0x65680304, 0x64670504, 0x66690304, 1, 1 +424 * 0x66690304, 0x65680304, 0x64670504, 0x66690304, 1 +425 intc_0 0x66690304, 0x65680304, 0x64670504, 0x66690304, 1, 1 +426 extract3 0x66690304, 0x65680304, 0x64670504, "i" +427 pushbytes 0x69 0x66690304, 0x65680304, 0x64670504, "i", "i" +430 b== 0x66690304, 0x65680304, 0x64670504, 1 +431 assert 0x66690304, 0x65680304, 0x64670504 +432 swap 0x66690304, 0x64670504, 0x65680304 +433 uncover 2 0x64670504, 0x65680304, 0x66690304 +435 pushint 200 0x64670504, 0x65680304, 0x66690304, 200 +438 intc_1 0x64670504, 0x65680304, 0x66690304, 200, 0 +439 callsub mutate_tuple_items_and_reassign 0x64670504, 0x65680304, 0x66690304, 200, 0 +646 proto 5 3 0x64670504, 0x65680304, 0x66690304, 200, 0 +649 intc_1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0 +650 dupn 5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0 +652 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1 +653 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504 +655 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1 +656 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304 +658 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1 +659 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +661 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 200 +663 itob 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x00000000000000C8 +664 extract 7 1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0xC8 +667 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0xC8, 0x64670504 +669 intc_1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0xC8, 0x64670504, 0 +670 uncover 2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0x64670504, 0, 0xC8 +672 replace3 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0xC8670504 +673 frame_bury -5 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +675 intc_0 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 1 +676 bz mutate_tuple_items_and_reassign_after_if_else@2 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304 +679 frame_dig -5 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0x64670504, 1, 0x65680304, 1, 0x66690304, 0xC8670504 +681 frame_bury 7 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304 +683 frame_dig -2 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 200 +685 intc_0 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 200, 1 +686 + 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 201 +687 itob 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0x00000000000000C9 +688 extract 7 1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0xC9 +691 frame_dig -4 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0xC9, 0x65680304 +693 intc_1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0xC9, 0x65680304, 0 +694 uncover 2 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0x65680304, 0, 0xC9 +696 replace3 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0xC9680304 +697 frame_bury -4 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304 +699 intc_0 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 1 +700 bz mutate_tuple_items_and_reassign_after_if_else@4 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304 +703 frame_dig -4 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0x65680304, 1, 0x66690304, 0xC9680304 +705 frame_bury 9 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304 +707 frame_dig -2 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 200 +709 intc_2 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 200, 2 +710 + 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 202 +711 itob 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0x00000000000000CA +712 extract 7 1 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0xCA +715 frame_dig -3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0xCA, 0x66690304 +717 intc_1 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0xCA, 0x66690304, 0 +718 uncover 2 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0x66690304, 0, 0xCA +720 replace3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0xCA690304 +721 frame_bury -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304 +723 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 1 +724 bz mutate_tuple_items_and_reassign_after_if_else@6 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304 +727 frame_dig -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0x66690304, 0xCA690304 +729 frame_bury 11 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +731 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504 +733 intc_1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504, 0 +734 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504, 0, 1 +735 * 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504, 0 +736 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504, 0, 1 +737 extract3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8 +738 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8, 200 +740 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8, 0x00000000000000C8 +741 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 1 +742 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +743 frame_dig -4 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304 +745 intc_1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304, 0 +746 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304, 0, 1 +747 * 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304, 0 +748 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304, 0, 1 +749 extract3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9 +750 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9, 200 +752 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9, 200, 1 +753 + 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9, 201 +754 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC9, 0x00000000000000C9 +755 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 1 +756 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +757 frame_dig -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA690304 +759 intc_1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA690304, 0 +760 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA690304, 0, 1 +761 * 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA690304, 0 +762 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA690304, 0, 1 +763 extract3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA +764 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA, 200 +766 intc_2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA, 200, 2 +767 + 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA, 202 +768 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCA, 0x00000000000000CA +769 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 1 +770 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +771 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 200 +773 pushint 3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 200, 3 +775 + 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 203 +776 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0x00000000000000CB +777 extract 7 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCB +780 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCB, 0xC8670504 +782 intc_0 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xCB, 0xC8670504, 1 +783 uncover 2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8670504, 1, 0xCB +785 replace3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8CB0504 +786 frame_bury -5 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +788 intc_0 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 1 +789 bz mutate_tuple_items_and_reassign_after_if_else@8 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304 +792 frame_dig -5 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8670504, 1, 0xC9680304, 1, 0xCA690304, 0xC8CB0504 +794 frame_bury 7 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304 +796 frame_dig -2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 200 +798 intc_3 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 200, 4 +799 + 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 204 +800 itob 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0x00000000000000CC +801 extract 7 1 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xCC +804 frame_dig -4 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xCC, 0xC9680304 +806 intc_0 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xCC, 0xC9680304, 1 +807 uncover 2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xC9680304, 1, 0xCC +809 replace3 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xC9CC0304 +810 frame_bury -4 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304 +812 intc_0 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 1 +813 bz mutate_tuple_items_and_reassign_after_if_else@10 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304 +816 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9680304, 1, 0xCA690304, 0xC9CC0304 +818 frame_bury 9 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304 +820 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 200 +822 pushint 5 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 200, 5 +824 + 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 205 +825 itob 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0x00000000000000CD +826 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCD +829 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCD, 0xCA690304 +831 intc_0 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCD, 0xCA690304, 1 +832 uncover 2 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCA690304, 1, 0xCD +834 replace3 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCACD0304 +835 frame_bury -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304 +837 intc_0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 1 +838 bz mutate_tuple_items_and_reassign_after_if_else@12 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304 +841 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCA690304, 0xCACD0304 +843 frame_bury 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +845 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCACD0304 +847 frame_bury 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +849 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CC0304 +851 frame_bury 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0xC9CC0304, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +853 frame_dig 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0xC9CC0304, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CB0504 +855 frame_bury 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0, 0xC9CC0304, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +857 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0, 0xC9CC0304, 0, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCACD0304 +859 frame_bury 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +861 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CC0304 +863 frame_bury 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +865 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CB0504 +867 frame_bury 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +869 frame_dig -1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0 +871 bz mutate_tuple_items_and_reassign_after_if_else@20 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +946 frame_dig 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCACD0304 +948 frame_bury 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +950 frame_dig 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CC0304 +952 frame_bury 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +954 frame_dig 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CB0504 +956 frame_bury 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +958 frame_dig 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCACD0304 +960 frame_bury -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +962 frame_dig 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CC0304 +964 frame_bury -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +966 frame_dig 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CB0504 +968 frame_bury -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +970 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 200 +972 pushint 6 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 200, 6 +974 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 206 +975 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0x00000000000000CE +976 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCE +979 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCE, 0xC8CB0504 +981 intc_0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCE, 0xC8CB0504, 1 +982 uncover 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CB0504, 1, 0xCE +984 replace3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CE0504 +985 frame_bury -5 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +987 frame_dig 6 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 1 +989 bz mutate_tuple_items_and_reassign_after_if_else@22 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304 +992 frame_dig -5 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CB0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC8CE0504 +994 frame_bury 7 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304 +996 frame_dig -2 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 200 +998 pushint 7 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 200, 7 +1000 + 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 207 +1001 itob 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0x00000000000000CF +1002 extract 7 1 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCF +1005 frame_dig -4 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCF, 0xC9CC0304 +1007 intc_0 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xCF, 0xC9CC0304, 1 +1008 uncover 2 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CC0304, 1, 0xCF +1010 replace3 0xC8CE0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CF0304 +1011 frame_bury -4 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304 +1013 frame_dig 8 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 1 +1015 bz mutate_tuple_items_and_reassign_after_if_else@24 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304 +1018 frame_dig -4 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CC0304, 1, 0xCACD0304, 0xC9CF0304 +1020 frame_bury 9 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304 +1022 frame_dig -2 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 200 +1024 pushint 8 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 200, 8 +1026 + 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 208 +1027 itob 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0x00000000000000D0 +1028 extract 7 1 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xD0 +1031 frame_dig -3 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xD0, 0xCACD0304 +1033 intc_0 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xD0, 0xCACD0304, 1 +1034 uncover 2 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xCACD0304, 1, 0xD0 +1036 replace3 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xCAD00304 +1037 frame_bury -3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304 +1039 frame_dig 10 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 1 +1041 bz mutate_tuple_items_and_reassign_after_if_else@26 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304 +1044 frame_dig -3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCACD0304, 0xCAD00304 +1046 frame_bury 11 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304 +1048 frame_dig -5 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504 +1050 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 1 +1051 dup 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 1, 1 +1052 * 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 1 +1053 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 1, 1 +1054 extract3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCE +1055 frame_dig -2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCE, 200 +1057 pushint 6 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCE, 200, 6 +1059 + 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCE, 206 +1060 itob 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCE, 0x00000000000000CE +1061 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 1 +1062 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304 +1063 frame_dig -4 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC9CF0304 +1065 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC9CF0304, 1 +1066 dup 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC9CF0304, 1, 1 +1067 * 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC9CF0304, 1 +1068 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC9CF0304, 1, 1 +1069 extract3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCF +1070 frame_dig -2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCF, 200 +1072 pushint 7 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCF, 200, 7 +1074 + 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCF, 207 +1075 itob 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCF, 0x00000000000000CF +1076 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 1 +1077 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304 +1078 frame_dig -3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCAD00304 +1080 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCAD00304, 1 +1081 dup 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCAD00304, 1, 1 +1082 * 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCAD00304, 1 +1083 intc_0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xCAD00304, 1, 1 +1084 extract3 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xD0 +1085 frame_dig -2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xD0, 200 +1087 pushint 8 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xD0, 200, 8 +1089 + 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xD0, 208 +1090 itob 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xD0, 0x00000000000000D0 +1091 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 1 +1092 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304 +1093 frame_dig 7 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504 +1095 frame_dig 9 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 0xC9CF0304 +1097 frame_dig 11 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xC9CC0304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +1099 frame_bury 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC8CB0504, 0xCAD00304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504, 0xC9CF0304 +1101 frame_bury 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CB0504, 0xC9CF0304, 0xCAD00304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304, 0xC8CE0504 +1103 frame_bury 0 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9CC0304, 0xCACD0304, 0xCACD0304, 1, 0xC8CE0504, 1, 0xC9CF0304, 1, 0xCAD00304 +1105 retsub 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +442 cover 2 0xCAD00304, 0xC8CE0504, 0xC9CF0304 +444 cover 2 0xC9CF0304, 0xCAD00304, 0xC8CE0504 +446 cover 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +448 cover 2 0xCAD00304, 0xC8CE0504, 0xC9CF0304 +450 swap 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +451 dup 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504 +452 intc_1 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 0 +453 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 0, 1 +454 * 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 0 +455 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 0, 1 +456 extract3 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8 +457 pushbytes 0xc8 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8, 0xC8 +460 b== 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +461 assert 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +462 dig 1 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304 +464 intc_1 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304, 0 +465 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304, 0, 1 +466 * 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304, 0 +467 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304, 0, 1 +468 extract3 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9 +469 pushbytes 0xc9 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9, 0xC9 +472 b== 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +473 assert 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +474 dig 2 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +476 intc_1 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304, 0 +477 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304, 0, 1 +478 * 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304, 0 +479 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304, 0, 1 +480 extract3 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCA +481 pushbytes 0xca 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCA, 0xCA +484 b== 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +485 assert 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +486 dup 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504 +487 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 1 +488 dup 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 1, 1 +489 * 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 1 +490 intc_0 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504, 1, 1 +491 extract3 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE +492 pushbytes 0xce 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE, 0xCE +495 b== 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +496 assert 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +497 swap 0xCAD00304, 0xC8CE0504, 0xC9CF0304 +498 intc_0 0xCAD00304, 0xC8CE0504, 0xC9CF0304, 1 +499 dup 0xCAD00304, 0xC8CE0504, 0xC9CF0304, 1, 1 +500 * 0xCAD00304, 0xC8CE0504, 0xC9CF0304, 1 +501 intc_0 0xCAD00304, 0xC8CE0504, 0xC9CF0304, 1, 1 +502 extract3 0xCAD00304, 0xC8CE0504, 0xCF +503 pushbytes 0xcf 0xCAD00304, 0xC8CE0504, 0xCF, 0xCF +506 b== 0xCAD00304, 0xC8CE0504, 1 +507 assert 0xCAD00304, 0xC8CE0504 +508 swap 0xC8CE0504, 0xCAD00304 +509 intc_0 0xC8CE0504, 0xCAD00304, 1 +510 dup 0xC8CE0504, 0xCAD00304, 1, 1 +511 * 0xC8CE0504, 0xCAD00304, 1 +512 intc_0 0xC8CE0504, 0xCAD00304, 1, 1 +513 extract3 0xC8CE0504, 0xD0 +514 pushbytes 0xd0 0xC8CE0504, 0xD0, 0xD0 +517 b== 0xC8CE0504, 1 +518 assert 0xC8CE0504 +519 bytec_0 0xC8CE0504, 0x +520 swap 0x, 0xC8CE0504 +521 concat 0xC8CE0504 +522 intc_1 0xC8CE0504, 0 +523 intc_3 0xC8CE0504, 0, 4 +524 extract3 0xC8CE0504 +525 callsub other_routine_2 0xC8CE0504 +622 proto 1 2 0xC8CE0504 +625 frame_dig -1 0xC8CE0504, 0xC8CE0504 +627 dup 0xC8CE0504, 0xC8CE0504, 0xC8CE0504 +628 intc_1 0xC8CE0504, 0xC8CE0504, 0xC8CE0504, 0 +629 pushbytes 0x0a 0xC8CE0504, 0xC8CE0504, 0xC8CE0504, 0, 0x0A +632 replace3 0xC8CE0504, 0xC8CE0504, 0x0ACE0504 +633 frame_bury -1 0x0ACE0504, 0xC8CE0504 +635 intc_0 0x0ACE0504, 0xC8CE0504, 1 +636 bz other_routine_2_after_if_else@2 0x0ACE0504, 0xC8CE0504 +639 frame_dig 0 0x0ACE0504, 0xC8CE0504, 0xC8CE0504 +641 frame_dig -1 0x0ACE0504, 0xC8CE0504, 0xC8CE0504, 0x0ACE0504 +643 uncover 2 0x0ACE0504, 0xC8CE0504, 0x0ACE0504, 0xC8CE0504 +645 retsub 0xC8CE0504, 0x0ACE0504 +528 popn 2 +530 retsub +34 intc_0 1 +35 return 1 \ No newline at end of file diff --git a/test_cases/arc4_types/out/mutable_params.O1.log b/test_cases/arc4_types/out/mutable_params.O1.log index de953cd79e..45bd537877 100644 --- a/test_cases/arc4_types/out/mutable_params.O1.log +++ b/test_cases/arc4_types/out/mutable_params.O1.log @@ -1,201 +1,693 @@ -PC Teal Stack -1 intcblock 1 2 4 0 -7 bytecblock 0x05 0x01020304 0x63 0x80320006000d00054861707079000444617973 0x000741415252474821 -48 callsub mutating_copies -53 proto 0 0 -56 bytec_1 0x01020304 -57 bytec_0 0x01020304, 0x05 -58 replace2 2 0x01020504 -60 dup 0x01020504, 0x01020504 -61 extract 2 1 0x01020504, 0x05 -64 bytec_0 0x01020504, 0x05, 0x05 -65 b== 0x01020504, 1 -66 assert 0x01020504 -67 bytec_3 0x01020504, 0x80320006000D00054861707079000444617973 -68 callsub other_routine 0x01020504, 0x80320006000D00054861707079000444617973 -150 proto 2 4 0x01020504, 0x80320006000D00054861707079000444617973 -153 frame_dig -2 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 -155 bytec_0 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 0x05 -156 replace2 1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 -158 frame_bury -2 0x01050504, 0x80320006000D00054861707079000444617973 -160 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 -162 intc_1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 -163 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6 -164 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 -166 intc_3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 -167 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 -169 extract3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D -170 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -172 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -173 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 -174 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -176 len 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 -177 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -179 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -181 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -183 substring3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 -184 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D -186 bytec 4 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -188 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -189 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -190 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 -191 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 -192 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 -194 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 -195 dig 1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 -197 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 -198 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 -199 pushint 9 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 -201 + 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 -202 swap 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -203 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -204 itob 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -205 extract 6 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -208 replace2 4 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -210 frame_bury -1 0x01050504, 0x80320006000F000741415252474821000444617973 -212 intc_0 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -213 intc_3 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 -214 frame_dig -2 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 -216 frame_dig -1 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -218 retsub 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -71 uncover 3 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -73 assert 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -74 uncover 2 0x01050504, 0x80320006000F000741415252474821000444617973, 0 -76 ! 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -77 assert 0x01050504, 0x80320006000F000741415252474821000444617973 -78 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x01050504 -80 extract 1 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05 -83 bytec_0 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05, 0x05 -84 b== 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -85 assert 0x01050504, 0x80320006000F000741415252474821000444617973 -86 dup 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973 -87 intc_1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973, 2 -88 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6 -89 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973 -91 intc_2 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973, 4 -92 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 -93 substring3 0x01050504, 0x000741415252474821 -94 bytec 4 0x01050504, 0x000741415252474821, 0x000741415252474821 -96 == 0x01050504, 1 -97 assert 0x01050504 -98 bytec_1 0x01050504, 0x01020304 -99 bytec_3 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -100 callsub other_routine 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -150 proto 2 4 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -153 frame_dig -2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 -155 bytec_0 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 0x05 -156 replace2 1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 -158 frame_bury -2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 -160 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 -162 intc_1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 -163 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6 -164 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 -166 intc_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 -167 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 -169 extract3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D -170 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -172 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -173 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 -174 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -176 len 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 -177 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -179 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -181 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -183 substring3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 -184 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D -186 bytec 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -188 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -189 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -190 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 -191 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 -192 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 -194 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 -195 dig 1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 -197 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 -198 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 -199 pushint 9 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 -201 + 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 -202 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -203 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -204 itob 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -205 extract 6 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -208 replace2 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -210 frame_bury -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 -212 intc_0 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 -213 intc_3 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 -214 frame_dig -2 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 -216 frame_dig -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -218 retsub 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -103 popn 4 0x01050504 -105 bytec_1 0x01050504, 0x01020304 -106 callsub other_routine_2 0x01050504, 0x01020304 -219 proto 1 2 0x01050504, 0x01020304 -222 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -224 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A -227 replace2 0 0x01050504, 0x01020304, 0x0A020304 -229 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 -231 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -232 retsub 0x01050504, 0x01020304, 0x0A020304 -109 pop 0x01050504, 0x01020304 -110 dup 0x01050504, 0x01020304, 0x01020304 -111 extract 0 1 0x01050504, 0x01020304, 0x01 -114 pushbytes 0x01 0x01050504, 0x01020304, 0x01, 0x01 -117 b== 0x01050504, 0x01020304, 1 -118 assert 0x01050504, 0x01020304 -119 callsub other_routine_2 0x01050504, 0x01020304 -219 proto 1 2 0x01050504, 0x01020304 -222 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -224 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A -227 replace2 0 0x01050504, 0x01020304, 0x0A020304 -229 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 -231 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -232 retsub 0x01050504, 0x01020304, 0x0A020304 -122 bury 1 0x01050504, 0x0A020304 -124 dup 0x01050504, 0x0A020304, 0x0A020304 -125 extract 0 1 0x01050504, 0x0A020304, 0x0A -128 pushbytes 0x0a 0x01050504, 0x0A020304, 0x0A, 0x0A -131 b== 0x01050504, 0x0A020304, 1 -132 assert 0x01050504, 0x0A020304 -133 dup2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 -134 uncover 2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -136 callsub other_routine_3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -233 proto 3 3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -236 intc_3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -246 intc_0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -247 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -250 intc_1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -251 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -243 b other_routine_3_after_for@5 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -254 frame_dig -3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x01050504 -256 bytec_2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x01050504, "c" -257 replace2 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x63050504 -259 frame_bury -3 0x01050504, 0x63050504, 0x0A020304, 0x0A020304 -261 frame_dig -2 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x0A020304 -263 bytec_2 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x0A020304, "c" -264 replace2 0 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x63020304 -266 frame_bury -2 0x01050504, 0x63050504, 0x63020304, 0x0A020304 -268 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x0A020304 -270 bytec_2 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x0A020304, "c" -271 replace2 0 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x63020304 -273 frame_bury -1 0x01050504, 0x63050504, 0x63020304, 0x63020304 -275 frame_dig -3 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504 -277 frame_dig -2 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504, 0x63020304 -279 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504, 0x63020304, 0x63020304 -281 retsub 0x01050504, 0x63050504, 0x63020304, 0x63020304 -139 popn 3 0x01050504 -141 extract 0 4 0x01050504 -144 callsub other_routine_2 0x01050504 -219 proto 1 2 0x01050504 -222 frame_dig -1 0x01050504, 0x01050504 -224 pushbytes 0x0a 0x01050504, 0x01050504, 0x0A -227 replace2 0 0x01050504, 0x0A050504 -229 frame_dig -1 0x01050504, 0x0A050504, 0x01050504 -231 swap 0x01050504, 0x01050504, 0x0A050504 -232 retsub 0x01050504, 0x0A050504 -147 popn 2 -149 retsub -51 intc_0 1 -52 return 1 \ No newline at end of file +PC Teal Stack +1 intcblock 0 1 4 2 +7 bytecblock 0x01020304 0x05 0x80320006000d00054861707079000444617973 0x000741415252474821 +46 callsub mutating_copies +51 proto 0 0 +54 bytec_0 0x01020304 +55 bytec_1 0x01020304, 0x05 +56 replace2 2 0x01020504 +58 dup 0x01020504, 0x01020504 +59 extract 2 1 0x01020504, 0x05 +62 bytec_1 0x01020504, 0x05, 0x05 +63 b== 0x01020504, 1 +64 assert 0x01020504 +65 bytec_2 0x01020504, 0x80320006000D00054861707079000444617973 +66 callsub other_routine 0x01020504, 0x80320006000D00054861707079000444617973 +276 proto 2 4 0x01020504, 0x80320006000D00054861707079000444617973 +279 frame_dig -2 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 +281 bytec_1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 0x05 +282 replace2 1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 +284 frame_bury -2 0x01050504, 0x80320006000D00054861707079000444617973 +286 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 +288 intc_3 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 +289 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6 +290 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 +292 intc_0 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 +293 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 +295 extract3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D +296 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +298 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +299 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 +300 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +302 len 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 +303 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +305 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +307 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +309 substring3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 +310 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D +312 bytec_3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +313 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +314 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +315 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 +316 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 +317 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 +319 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 +320 dig 1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 +322 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 +323 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 +324 pushint 9 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 +326 + 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 +327 swap 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +328 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +329 itob 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +330 extract 6 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +333 replace2 4 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +335 frame_bury -1 0x01050504, 0x80320006000F000741415252474821000444617973 +337 intc_1 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +338 intc_0 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 +339 frame_dig -2 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 +341 frame_dig -1 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +343 retsub 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +69 uncover 3 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +71 assert 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +72 uncover 2 0x01050504, 0x80320006000F000741415252474821000444617973, 0 +74 ! 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +75 assert 0x01050504, 0x80320006000F000741415252474821000444617973 +76 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x01050504 +78 extract 1 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05 +81 bytec_1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05, 0x05 +82 b== 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +83 assert 0x01050504, 0x80320006000F000741415252474821000444617973 +84 dup 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973 +85 intc_3 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973, 2 +86 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6 +87 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973 +89 intc_2 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973, 4 +90 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 +91 substring3 0x01050504, 0x000741415252474821 +92 bytec_3 0x01050504, 0x000741415252474821, 0x000741415252474821 +93 == 0x01050504, 1 +94 assert 0x01050504 +95 bytec_0 0x01050504, 0x01020304 +96 bytec_2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +97 callsub other_routine 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +276 proto 2 4 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +279 frame_dig -2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 +281 bytec_1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 0x05 +282 replace2 1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 +284 frame_bury -2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 +286 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 +288 intc_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 +289 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6 +290 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 +292 intc_0 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 +293 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 +295 extract3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D +296 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +298 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +299 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 +300 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +302 len 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 +303 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +305 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +307 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +309 substring3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 +310 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D +312 bytec_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +313 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +314 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +315 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 +316 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 +317 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 +319 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 +320 dig 1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 +322 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 +323 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 +324 pushint 9 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 +326 + 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 +327 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +328 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +329 itob 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +330 extract 6 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +333 replace2 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +335 frame_bury -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 +337 intc_1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 +338 intc_0 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 +339 frame_dig -2 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 +341 frame_dig -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +343 retsub 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +100 popn 4 0x01050504 +102 bytec_0 0x01050504, 0x01020304 +103 callsub other_routine_2 0x01050504, 0x01020304 +344 proto 1 2 0x01050504, 0x01020304 +347 frame_dig -1 0x01050504, 0x01020304, 0x01020304 +349 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A +352 replace2 0 0x01050504, 0x01020304, 0x0A020304 +354 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 +356 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +357 retsub 0x01050504, 0x01020304, 0x0A020304 +106 pop 0x01050504, 0x01020304 +107 dup 0x01050504, 0x01020304, 0x01020304 +108 extract 0 1 0x01050504, 0x01020304, 0x01 +111 pushbytes 0x01 0x01050504, 0x01020304, 0x01, 0x01 +114 b== 0x01050504, 0x01020304, 1 +115 assert 0x01050504, 0x01020304 +116 callsub other_routine_2 0x01050504, 0x01020304 +344 proto 1 2 0x01050504, 0x01020304 +347 frame_dig -1 0x01050504, 0x01020304, 0x01020304 +349 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A +352 replace2 0 0x01050504, 0x01020304, 0x0A020304 +354 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 +356 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +357 retsub 0x01050504, 0x01020304, 0x0A020304 +119 bury 1 0x01050504, 0x0A020304 +121 dup 0x01050504, 0x0A020304, 0x0A020304 +122 extract 0 1 0x01050504, 0x0A020304, 0x0A +125 pushbytes 0x0a 0x01050504, 0x0A020304, 0x0A, 0x0A +128 b== 0x01050504, 0x0A020304, 1 +129 assert 0x01050504, 0x0A020304 +130 dup2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 +131 bytec_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304 +132 intc_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0 +133 intc_1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +134 callsub mutate_tuple_items_and_reassign 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +358 proto 5 3 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +361 intc_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0 +362 dupn 5 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0 +364 intc_1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +369 itob 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000 +370 dup 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000000 +371 extract 7 1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00 +374 frame_dig -5 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00, 0x01050504 +376 swap 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x01050504, 0x00 +377 replace2 0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00050504 +379 frame_bury -5 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000 +381 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0 +383 intc_1 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0, 1 +384 + 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 1 +385 itob 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001 +386 dup 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000001 +387 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01 +390 frame_dig -4 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01, 0x0A020304 +392 swap 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0A020304, 0x01 +393 replace2 0 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01020304 +395 frame_bury -4 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001 +397 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0 +399 intc_3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0, 2 +400 + 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 2 +401 itob 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002 +402 dup 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x0000000000000002 +403 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02 +406 frame_dig -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02, 0x01020304 +408 swap 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x01020304, 0x02 +409 replace2 0 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02020304 +411 frame_bury -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002 +413 frame_dig -5 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x00050504 +415 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x00 +418 uncover 3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x00, 0x0000000000000000 +420 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 1 +421 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002 +422 frame_dig -4 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x01020304 +424 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x01 +427 uncover 2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x01, 0x0000000000000001 +429 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 1 +430 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002 +431 frame_dig -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x02020304 +433 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x02 +436 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +440 pushint 3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 3 +442 + 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3 +443 itob 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000003 +444 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x03 +447 frame_dig -5 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x03, 0x00050504 +449 swap 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00050504, 0x03 +450 replace2 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00030504 +452 frame_bury -5 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +456 intc_2 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 4 +457 + 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 4 +458 itob 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000004 +459 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x04 +462 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x04, 0x01020304 +464 swap 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x01020304, 0x04 +465 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x01040304 +467 frame_bury -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +471 pushint 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 5 +473 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5 +474 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000005 +475 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x05 +478 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x05, 0x02020304 +480 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02020304, 0x05 +481 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304 +483 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x02050304 +484 frame_bury -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304 +486 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304 +488 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504 +490 frame_dig -1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504, 1 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504 +495 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504, 0 +496 frame_bury 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x02050304, 0x01040304, 0x00030504 +498 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x02050304, 0x01040304, 0x00030504, 0 +499 frame_bury 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x02050304, 0x01040304, 0x00030504 +501 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x02050304, 0x01040304, 0x00030504, 0 +502 frame_bury 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +504 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x02050304 +506 frame_bury 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +508 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x01040304 +510 frame_bury 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +512 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00030504 +514 frame_bury 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +516 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0 +518 pushint 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0, 6 +520 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 6 +521 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006 +522 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006, 0x0000000000000006 +523 frame_bury 3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006 +525 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x06 +528 frame_dig 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x06, 0x00030504 +530 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00030504, 0x06 +531 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00060504 +533 frame_bury 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +535 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x00030504 +537 frame_bury 0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +539 frame_dig 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +548 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0 +550 pushint 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0, 7 +552 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 7 +553 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007 +554 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007, 0x0000000000000007 +555 frame_bury 4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007 +557 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x07 +560 frame_dig 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x07, 0x01040304 +562 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x01040304, 0x07 +563 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x01070304 +565 frame_bury 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +567 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x01040304 +569 frame_bury 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +571 frame_dig 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +580 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0 +582 pushint 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0, 8 +584 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 8 +585 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008 +586 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008, 0x0000000000000008 +587 frame_bury 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008 +589 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x08 +592 frame_dig 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x08, 0x02050304 +594 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x02050304, 0x08 +595 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x02080304 +597 frame_bury 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +599 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x02050304 +601 frame_bury 2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +603 frame_dig 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +612 frame_dig 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x00060504 +614 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x06 +617 frame_dig 3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x06, 0x0000000000000006 +619 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +620 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +621 frame_dig 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x01070304 +623 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x07 +626 frame_dig 4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x07, 0x0000000000000007 +628 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +629 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +630 frame_dig 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x02080304 +632 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x08 +635 frame_dig 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x08, 0x0000000000000008 +637 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +638 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +639 retsub 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304 +137 popn 3 0x01050504, 0x0A020304 +139 bytec_0 0x01050504, 0x0A020304, 0x01020304 +140 pushint 100 0x01050504, 0x0A020304, 0x01020304, 100 +142 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1 +143 callsub mutate_tuple_items_and_reassign 0x01050504, 0x0A020304, 0x01020304, 100, 1 +358 proto 5 3 0x01050504, 0x0A020304, 0x01020304, 100, 1 +361 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0 +362 dupn 5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0 +364 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +369 itob 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064 +370 dup 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000064 +371 extract 7 1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, "d" +374 frame_dig -5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, "d", 0x01050504 +376 swap 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x01050504, "d" +377 replace2 0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x64050504 +379 frame_bury -5 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064 +381 frame_dig -2 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 100 +383 intc_1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 100, 1 +384 + 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 101 +385 itob 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065 +386 dup 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000065 +387 extract 7 1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, "e" +390 frame_dig -4 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, "e", 0x0A020304 +392 swap 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0A020304, "e" +393 replace2 0 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x65020304 +395 frame_bury -4 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065 +397 frame_dig -2 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 100 +399 intc_3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 100, 2 +400 + 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 102 +401 itob 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066 +402 dup 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x0000000000000066 +403 extract 7 1 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "f" +406 frame_dig -3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "f", 0x01020304 +408 swap 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x01020304, "f" +409 replace2 0 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x66020304 +411 frame_bury -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066 +413 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x64050504 +415 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "d" +418 uncover 3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, "d", 0x0000000000000064 +420 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, 1 +421 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066 +422 frame_dig -4 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, 0x65020304 +424 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, "e" +427 uncover 2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, "e", 0x0000000000000065 +429 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, 1 +430 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066 +431 frame_dig -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, 0x66020304 +433 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, "f" +436 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +440 pushint 3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 3 +442 + 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 103 +443 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000067 +444 extract 7 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "g" +447 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "g", 0x64050504 +449 swap 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x64050504, "g" +450 replace2 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x64670504 +452 frame_bury -5 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +456 intc_2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 4 +457 + 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 104 +458 itob 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000068 +459 extract 7 1 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "h" +462 frame_dig -4 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "h", 0x65020304 +464 swap 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x65020304, "h" +465 replace2 1 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x65680304 +467 frame_bury -4 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +471 pushint 5 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 5 +473 + 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 105 +474 itob 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000069 +475 extract 7 1 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "i" +478 frame_dig -3 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "i", 0x66020304 +480 swap 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66020304, "i" +481 replace2 1 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304 +483 dup 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x66690304 +484 frame_bury -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304 +486 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304 +488 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504 +490 frame_dig -1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504, 1 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504 +495 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504, 0 +496 frame_bury 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x66690304, 0x65680304, 0x64670504 +498 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x66690304, 0x65680304, 0x64670504, 0 +499 frame_bury 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x66690304, 0x65680304, 0x64670504 +501 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x66690304, 0x65680304, 0x64670504, 0 +502 frame_bury 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +504 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x66690304 +506 frame_bury 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +508 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x65680304 +510 frame_bury 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +512 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x64670504 +514 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +516 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 100 +518 pushint 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 100, 6 +520 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 106 +521 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A +522 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A, 0x000000000000006A +523 frame_bury 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A +525 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, "j" +528 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, "j", 0x64670504 +530 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x64670504, "j" +531 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x646A0504 +533 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +535 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x64670504 +537 frame_bury 0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +539 frame_dig 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +548 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 100 +550 pushint 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 100, 7 +552 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 107 +553 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B +554 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B, 0x000000000000006B +555 frame_bury 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B +557 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, "k" +560 frame_dig 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, "k", 0x65680304 +562 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x65680304, "k" +563 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x656B0304 +565 frame_bury 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +567 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x65680304 +569 frame_bury 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +571 frame_dig 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +580 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 100 +582 pushint 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 100, 8 +584 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 108 +585 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C +586 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C, 0x000000000000006C +587 frame_bury 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C +589 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, "l" +592 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, "l", 0x66690304 +594 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x66690304, "l" +595 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x666C0304 +597 frame_bury 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +599 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x66690304 +601 frame_bury 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +603 frame_dig 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +612 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x646A0504 +614 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "j" +617 frame_dig 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "j", 0x000000000000006A +619 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +620 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +621 frame_dig 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x656B0304 +623 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "k" +626 frame_dig 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "k", 0x000000000000006B +628 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +629 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +630 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x666C0304 +632 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "l" +635 frame_dig 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "l", 0x000000000000006C +637 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +638 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +639 retsub 0x64670504, 0x65680304, 0x66690304 +146 dig 2 0x64670504, 0x65680304, 0x66690304, 0x64670504 +148 extract 0 1 0x64670504, 0x65680304, 0x66690304, "d" +151 pushbytes 0x64 0x64670504, 0x65680304, 0x66690304, "d", "d" +154 b== 0x64670504, 0x65680304, 0x66690304, 1 +155 assert 0x64670504, 0x65680304, 0x66690304 +156 dig 1 0x64670504, 0x65680304, 0x66690304, 0x65680304 +158 extract 0 1 0x64670504, 0x65680304, 0x66690304, "e" +161 pushbytes 0x65 0x64670504, 0x65680304, 0x66690304, "e", "e" +164 b== 0x64670504, 0x65680304, 0x66690304, 1 +165 assert 0x64670504, 0x65680304, 0x66690304 +166 dup 0x64670504, 0x65680304, 0x66690304, 0x66690304 +167 extract 0 1 0x64670504, 0x65680304, 0x66690304, "f" +170 pushbytes 0x66 0x64670504, 0x65680304, 0x66690304, "f", "f" +173 b== 0x64670504, 0x65680304, 0x66690304, 1 +174 assert 0x64670504, 0x65680304, 0x66690304 +175 dig 2 0x64670504, 0x65680304, 0x66690304, 0x64670504 +177 extract 1 1 0x64670504, 0x65680304, 0x66690304, "g" +180 pushbytes 0x67 0x64670504, 0x65680304, 0x66690304, "g", "g" +183 b== 0x64670504, 0x65680304, 0x66690304, 1 +184 assert 0x64670504, 0x65680304, 0x66690304 +185 dig 1 0x64670504, 0x65680304, 0x66690304, 0x65680304 +187 extract 1 1 0x64670504, 0x65680304, 0x66690304, "h" +190 pushbytes 0x68 0x64670504, 0x65680304, 0x66690304, "h", "h" +193 b== 0x64670504, 0x65680304, 0x66690304, 1 +194 assert 0x64670504, 0x65680304, 0x66690304 +195 dup 0x64670504, 0x65680304, 0x66690304, 0x66690304 +196 extract 1 1 0x64670504, 0x65680304, 0x66690304, "i" +199 pushbytes 0x69 0x64670504, 0x65680304, 0x66690304, "i", "i" +202 b== 0x64670504, 0x65680304, 0x66690304, 1 +203 assert 0x64670504, 0x65680304, 0x66690304 +204 pushint 200 0x64670504, 0x65680304, 0x66690304, 200 +207 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0 +208 callsub mutate_tuple_items_and_reassign 0x64670504, 0x65680304, 0x66690304, 200, 0 +358 proto 5 3 0x64670504, 0x65680304, 0x66690304, 200, 0 +361 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0 +362 dupn 5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0 +364 intc_1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +369 itob 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8 +370 dup 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C8 +371 extract 7 1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8 +374 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8, 0x64670504 +376 swap 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x64670504, 0xC8 +377 replace2 0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8670504 +379 frame_bury -5 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8 +381 frame_dig -2 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 200 +383 intc_1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 200, 1 +384 + 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 201 +385 itob 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9 +386 dup 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000C9 +387 extract 7 1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9 +390 frame_dig -4 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9, 0x65680304 +392 swap 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x65680304, 0xC9 +393 replace2 0 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9680304 +395 frame_bury -4 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9 +397 frame_dig -2 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 200 +399 intc_3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 200, 2 +400 + 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 202 +401 itob 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA +402 dup 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0x00000000000000CA +403 extract 7 1 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA +406 frame_dig -3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA, 0x66690304 +408 swap 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0x66690304, 0xCA +409 replace2 0 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA690304 +411 frame_bury -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA +413 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xC8670504 +415 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xC8 +418 uncover 3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC8, 0x00000000000000C8 +420 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 1 +421 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA +422 frame_dig -4 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC9680304 +424 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC9 +427 uncover 2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xC9, 0x00000000000000C9 +429 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 1 +430 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA +431 frame_dig -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xCA690304 +433 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xCA +436 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +440 pushint 3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 3 +442 + 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 203 +443 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CB +444 extract 7 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCB +447 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCB, 0xC8670504 +449 swap 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC8670504, 0xCB +450 replace2 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC8CB0504 +452 frame_bury -5 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +456 intc_2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 4 +457 + 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 204 +458 itob 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CC +459 extract 7 1 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCC +462 frame_dig -4 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCC, 0xC9680304 +464 swap 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC9680304, 0xCC +465 replace2 1 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC9CC0304 +467 frame_bury -4 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +471 pushint 5 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 5 +473 + 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 205 +474 itob 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CD +475 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCD +478 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCD, 0xCA690304 +480 swap 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCA690304, 0xCD +481 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304 +483 dup 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xCACD0304 +484 frame_bury -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304 +486 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304 +488 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504 +490 frame_dig -1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504 +516 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 200 +518 pushint 6 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 200, 6 +520 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 206 +521 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE +522 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE, 0x00000000000000CE +523 frame_bury 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE +525 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xCE +528 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xCE, 0xC8CB0504 +530 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xC8CB0504, 0xCE +531 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xC8CE0504 +533 frame_bury 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +535 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC8CB0504 +537 frame_bury 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +539 frame_dig 6 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 1 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +544 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC8CE0504 +546 frame_bury 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +548 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 200 +550 pushint 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 200, 7 +552 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 207 +553 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF +554 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF, 0x00000000000000CF +555 frame_bury 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF +557 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xCF +560 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xCF, 0xC9CC0304 +562 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC9CC0304, 0xCF +563 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC9CF0304 +565 frame_bury 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +567 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xC9CC0304 +569 frame_bury 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +571 frame_dig 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 1 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +576 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304 +578 frame_bury 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +580 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 200 +582 pushint 8 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 200, 8 +584 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 208 +585 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0 +586 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0, 0x00000000000000D0 +587 frame_bury 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0 +589 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xD0 +592 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xD0, 0xCACD0304 +594 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xCACD0304, 0xD0 +595 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +597 frame_bury 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +599 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCACD0304 +601 frame_bury 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +603 frame_dig 8 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +608 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +610 frame_bury 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +612 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504 +614 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE +617 frame_dig 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE, 0x00000000000000CE +619 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +620 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +621 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304 +623 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCF +626 frame_dig 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCF, 0x00000000000000CF +628 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +629 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +630 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +632 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xD0 +635 frame_dig 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xD0, 0x00000000000000D0 +637 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +638 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +639 retsub 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +211 dig 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8CE0504 +213 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8 +216 pushbytes 0xc8 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8, 0xC8 +219 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +220 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +221 dig 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9CF0304 +223 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9 +226 pushbytes 0xc9 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9, 0xC9 +229 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +230 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +231 dup 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCAD00304 +232 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCA +235 pushbytes 0xca 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCA, 0xCA +238 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +239 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +240 dig 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8CE0504 +242 extract 1 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCE +245 pushbytes 0xce 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCE, 0xCE +248 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +249 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +250 swap 0xC8CE0504, 0xCAD00304, 0xC9CF0304 +251 extract 1 1 0xC8CE0504, 0xCAD00304, 0xCF +254 pushbytes 0xcf 0xC8CE0504, 0xCAD00304, 0xCF, 0xCF +257 b== 0xC8CE0504, 0xCAD00304, 1 +258 assert 0xC8CE0504, 0xCAD00304 +259 extract 1 1 0xC8CE0504, 0xD0 +262 pushbytes 0xd0 0xC8CE0504, 0xD0, 0xD0 +265 b== 0xC8CE0504, 1 +266 assert 0xC8CE0504 +267 extract 0 4 0xC8CE0504 +270 callsub other_routine_2 0xC8CE0504 +344 proto 1 2 0xC8CE0504 +347 frame_dig -1 0xC8CE0504, 0xC8CE0504 +349 pushbytes 0x0a 0xC8CE0504, 0xC8CE0504, 0x0A +352 replace2 0 0xC8CE0504, 0x0ACE0504 +354 frame_dig -1 0xC8CE0504, 0x0ACE0504, 0xC8CE0504 +356 swap 0xC8CE0504, 0xC8CE0504, 0x0ACE0504 +357 retsub 0xC8CE0504, 0x0ACE0504 +273 popn 2 +275 retsub +49 intc_1 1 +50 return 1 \ No newline at end of file diff --git a/test_cases/arc4_types/out/mutable_params.O2.log b/test_cases/arc4_types/out/mutable_params.O2.log index de953cd79e..45bd537877 100644 --- a/test_cases/arc4_types/out/mutable_params.O2.log +++ b/test_cases/arc4_types/out/mutable_params.O2.log @@ -1,201 +1,693 @@ -PC Teal Stack -1 intcblock 1 2 4 0 -7 bytecblock 0x05 0x01020304 0x63 0x80320006000d00054861707079000444617973 0x000741415252474821 -48 callsub mutating_copies -53 proto 0 0 -56 bytec_1 0x01020304 -57 bytec_0 0x01020304, 0x05 -58 replace2 2 0x01020504 -60 dup 0x01020504, 0x01020504 -61 extract 2 1 0x01020504, 0x05 -64 bytec_0 0x01020504, 0x05, 0x05 -65 b== 0x01020504, 1 -66 assert 0x01020504 -67 bytec_3 0x01020504, 0x80320006000D00054861707079000444617973 -68 callsub other_routine 0x01020504, 0x80320006000D00054861707079000444617973 -150 proto 2 4 0x01020504, 0x80320006000D00054861707079000444617973 -153 frame_dig -2 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 -155 bytec_0 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 0x05 -156 replace2 1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 -158 frame_bury -2 0x01050504, 0x80320006000D00054861707079000444617973 -160 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 -162 intc_1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 -163 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6 -164 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 -166 intc_3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 -167 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 -169 extract3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D -170 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -172 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -173 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 -174 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -176 len 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 -177 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -179 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -181 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -183 substring3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 -184 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D -186 bytec 4 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -188 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -189 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -190 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 -191 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 -192 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 -194 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 -195 dig 1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 -197 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 -198 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 -199 pushint 9 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 -201 + 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 -202 swap 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -203 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -204 itob 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -205 extract 6 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -208 replace2 4 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -210 frame_bury -1 0x01050504, 0x80320006000F000741415252474821000444617973 -212 intc_0 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -213 intc_3 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 -214 frame_dig -2 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 -216 frame_dig -1 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -218 retsub 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -71 uncover 3 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -73 assert 0, 0x01050504, 0x80320006000F000741415252474821000444617973 -74 uncover 2 0x01050504, 0x80320006000F000741415252474821000444617973, 0 -76 ! 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -77 assert 0x01050504, 0x80320006000F000741415252474821000444617973 -78 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x01050504 -80 extract 1 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05 -83 bytec_0 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05, 0x05 -84 b== 0x01050504, 0x80320006000F000741415252474821000444617973, 1 -85 assert 0x01050504, 0x80320006000F000741415252474821000444617973 -86 dup 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973 -87 intc_1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973, 2 -88 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6 -89 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973 -91 intc_2 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973, 4 -92 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 -93 substring3 0x01050504, 0x000741415252474821 -94 bytec 4 0x01050504, 0x000741415252474821, 0x000741415252474821 -96 == 0x01050504, 1 -97 assert 0x01050504 -98 bytec_1 0x01050504, 0x01020304 -99 bytec_3 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -100 callsub other_routine 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -150 proto 2 4 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 -153 frame_dig -2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 -155 bytec_0 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 0x05 -156 replace2 1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 -158 frame_bury -2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 -160 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 -162 intc_1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 -163 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6 -164 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 -166 intc_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 -167 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 -169 extract3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D -170 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 -172 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 -173 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 -174 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 -176 len 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 -177 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 -179 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 -181 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 -183 substring3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 -184 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D -186 bytec 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 -188 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 -189 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 -190 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 -191 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 -192 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 -194 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 -195 dig 1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 -197 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 -198 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 -199 pushint 9 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 -201 + 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 -202 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 -203 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 -204 itob 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F -205 extract 6 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F -208 replace2 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 -210 frame_bury -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 -212 intc_0 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 -213 intc_3 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 -214 frame_dig -2 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 -216 frame_dig -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -218 retsub 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 -103 popn 4 0x01050504 -105 bytec_1 0x01050504, 0x01020304 -106 callsub other_routine_2 0x01050504, 0x01020304 -219 proto 1 2 0x01050504, 0x01020304 -222 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -224 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A -227 replace2 0 0x01050504, 0x01020304, 0x0A020304 -229 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 -231 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -232 retsub 0x01050504, 0x01020304, 0x0A020304 -109 pop 0x01050504, 0x01020304 -110 dup 0x01050504, 0x01020304, 0x01020304 -111 extract 0 1 0x01050504, 0x01020304, 0x01 -114 pushbytes 0x01 0x01050504, 0x01020304, 0x01, 0x01 -117 b== 0x01050504, 0x01020304, 1 -118 assert 0x01050504, 0x01020304 -119 callsub other_routine_2 0x01050504, 0x01020304 -219 proto 1 2 0x01050504, 0x01020304 -222 frame_dig -1 0x01050504, 0x01020304, 0x01020304 -224 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A -227 replace2 0 0x01050504, 0x01020304, 0x0A020304 -229 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 -231 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 -232 retsub 0x01050504, 0x01020304, 0x0A020304 -122 bury 1 0x01050504, 0x0A020304 -124 dup 0x01050504, 0x0A020304, 0x0A020304 -125 extract 0 1 0x01050504, 0x0A020304, 0x0A -128 pushbytes 0x0a 0x01050504, 0x0A020304, 0x0A, 0x0A -131 b== 0x01050504, 0x0A020304, 1 -132 assert 0x01050504, 0x0A020304 -133 dup2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 -134 uncover 2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -136 callsub other_routine_3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -233 proto 3 3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -236 intc_3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -246 intc_0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -247 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 1 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -250 intc_1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -251 b other_routine_3_for_body@1 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 2 -237 switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -243 b other_routine_3_after_for@5 0x01050504, 0x01050504, 0x0A020304, 0x0A020304 -254 frame_dig -3 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x01050504 -256 bytec_2 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x01050504, "c" -257 replace2 0 0x01050504, 0x01050504, 0x0A020304, 0x0A020304, 0x63050504 -259 frame_bury -3 0x01050504, 0x63050504, 0x0A020304, 0x0A020304 -261 frame_dig -2 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x0A020304 -263 bytec_2 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x0A020304, "c" -264 replace2 0 0x01050504, 0x63050504, 0x0A020304, 0x0A020304, 0x63020304 -266 frame_bury -2 0x01050504, 0x63050504, 0x63020304, 0x0A020304 -268 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x0A020304 -270 bytec_2 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x0A020304, "c" -271 replace2 0 0x01050504, 0x63050504, 0x63020304, 0x0A020304, 0x63020304 -273 frame_bury -1 0x01050504, 0x63050504, 0x63020304, 0x63020304 -275 frame_dig -3 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504 -277 frame_dig -2 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504, 0x63020304 -279 frame_dig -1 0x01050504, 0x63050504, 0x63020304, 0x63020304, 0x63050504, 0x63020304, 0x63020304 -281 retsub 0x01050504, 0x63050504, 0x63020304, 0x63020304 -139 popn 3 0x01050504 -141 extract 0 4 0x01050504 -144 callsub other_routine_2 0x01050504 -219 proto 1 2 0x01050504 -222 frame_dig -1 0x01050504, 0x01050504 -224 pushbytes 0x0a 0x01050504, 0x01050504, 0x0A -227 replace2 0 0x01050504, 0x0A050504 -229 frame_dig -1 0x01050504, 0x0A050504, 0x01050504 -231 swap 0x01050504, 0x01050504, 0x0A050504 -232 retsub 0x01050504, 0x0A050504 -147 popn 2 -149 retsub -51 intc_0 1 -52 return 1 \ No newline at end of file +PC Teal Stack +1 intcblock 0 1 4 2 +7 bytecblock 0x01020304 0x05 0x80320006000d00054861707079000444617973 0x000741415252474821 +46 callsub mutating_copies +51 proto 0 0 +54 bytec_0 0x01020304 +55 bytec_1 0x01020304, 0x05 +56 replace2 2 0x01020504 +58 dup 0x01020504, 0x01020504 +59 extract 2 1 0x01020504, 0x05 +62 bytec_1 0x01020504, 0x05, 0x05 +63 b== 0x01020504, 1 +64 assert 0x01020504 +65 bytec_2 0x01020504, 0x80320006000D00054861707079000444617973 +66 callsub other_routine 0x01020504, 0x80320006000D00054861707079000444617973 +276 proto 2 4 0x01020504, 0x80320006000D00054861707079000444617973 +279 frame_dig -2 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504 +281 bytec_1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01020504, 0x05 +282 replace2 1 0x01020504, 0x80320006000D00054861707079000444617973, 0x01050504 +284 frame_bury -2 0x01050504, 0x80320006000D00054861707079000444617973 +286 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 +288 intc_3 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 +289 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6 +290 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 +292 intc_0 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 +293 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 +295 extract3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D +296 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +298 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +299 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 +300 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +302 len 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 +303 frame_dig -1 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +305 dig 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +307 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +309 substring3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 +310 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D +312 bytec_3 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +313 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +314 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +315 concat 0x01050504, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 +316 swap 0x01050504, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 +317 uncover 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 +319 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 +320 dig 1 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 +322 intc_2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 +323 extract_uint16 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 +324 pushint 9 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 +326 + 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 +327 swap 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +328 - 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +329 itob 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +330 extract 6 2 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +333 replace2 4 0x01050504, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +335 frame_bury -1 0x01050504, 0x80320006000F000741415252474821000444617973 +337 intc_1 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +338 intc_0 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0 +339 frame_dig -2 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504 +341 frame_dig -1 0x01050504, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +343 retsub 1, 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +69 uncover 3 0, 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +71 assert 0, 0x01050504, 0x80320006000F000741415252474821000444617973 +72 uncover 2 0x01050504, 0x80320006000F000741415252474821000444617973, 0 +74 ! 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +75 assert 0x01050504, 0x80320006000F000741415252474821000444617973 +76 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x01050504 +78 extract 1 1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05 +81 bytec_1 0x01050504, 0x80320006000F000741415252474821000444617973, 0x05, 0x05 +82 b== 0x01050504, 0x80320006000F000741415252474821000444617973, 1 +83 assert 0x01050504, 0x80320006000F000741415252474821000444617973 +84 dup 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973 +85 intc_3 0x01050504, 0x80320006000F000741415252474821000444617973, 0x80320006000F000741415252474821000444617973, 2 +86 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6 +87 dig 1 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973 +89 intc_2 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 0x80320006000F000741415252474821000444617973, 4 +90 extract_uint16 0x01050504, 0x80320006000F000741415252474821000444617973, 6, 15 +91 substring3 0x01050504, 0x000741415252474821 +92 bytec_3 0x01050504, 0x000741415252474821, 0x000741415252474821 +93 == 0x01050504, 1 +94 assert 0x01050504 +95 bytec_0 0x01050504, 0x01020304 +96 bytec_2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +97 callsub other_routine 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +276 proto 2 4 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973 +279 frame_dig -2 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304 +281 bytec_1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01020304, 0x05 +282 replace2 1 0x01050504, 0x01020304, 0x80320006000D00054861707079000444617973, 0x01050304 +284 frame_bury -2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973 +286 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973 +288 intc_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D00054861707079000444617973, 2 +289 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6 +290 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973 +292 intc_0 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0 +293 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D00054861707079000444617973, 0, 6 +295 extract3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D +296 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973 +298 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 0x80320006000D00054861707079000444617973, 4 +299 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13 +300 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973 +302 len 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19 +303 frame_dig -1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973 +305 dig 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 19, 0x80320006000D00054861707079000444617973, 13 +307 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x80320006000D00054861707079000444617973, 13, 19 +309 substring3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D, 13, 0x000444617973 +310 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D +312 bytec_3 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D, 0x000741415252474821 +313 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x000444617973, 0x80320006000D000741415252474821 +314 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821, 0x000444617973 +315 concat 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 13, 0x80320006000D000741415252474821000444617973 +316 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 6, 0x80320006000D000741415252474821000444617973, 13 +317 uncover 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 13, 6 +319 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7 +320 dig 1 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973 +322 intc_2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 0x80320006000D000741415252474821000444617973, 4 +323 extract_uint16 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13 +324 pushint 9 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 13, 9 +326 + 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 7, 22 +327 swap 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 22, 7 +328 - 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 15 +329 itob 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000000000000000F +330 extract 6 2 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000D000741415252474821000444617973, 0x000F +333 replace2 4 0x01050504, 0x01050304, 0x80320006000D00054861707079000444617973, 0x80320006000F000741415252474821000444617973 +335 frame_bury -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973 +337 intc_1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1 +338 intc_0 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0 +339 frame_dig -2 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304 +341 frame_dig -1 0x01050504, 0x01050304, 0x80320006000F000741415252474821000444617973, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +343 retsub 0x01050504, 1, 0, 0x01050304, 0x80320006000F000741415252474821000444617973 +100 popn 4 0x01050504 +102 bytec_0 0x01050504, 0x01020304 +103 callsub other_routine_2 0x01050504, 0x01020304 +344 proto 1 2 0x01050504, 0x01020304 +347 frame_dig -1 0x01050504, 0x01020304, 0x01020304 +349 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A +352 replace2 0 0x01050504, 0x01020304, 0x0A020304 +354 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 +356 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +357 retsub 0x01050504, 0x01020304, 0x0A020304 +106 pop 0x01050504, 0x01020304 +107 dup 0x01050504, 0x01020304, 0x01020304 +108 extract 0 1 0x01050504, 0x01020304, 0x01 +111 pushbytes 0x01 0x01050504, 0x01020304, 0x01, 0x01 +114 b== 0x01050504, 0x01020304, 1 +115 assert 0x01050504, 0x01020304 +116 callsub other_routine_2 0x01050504, 0x01020304 +344 proto 1 2 0x01050504, 0x01020304 +347 frame_dig -1 0x01050504, 0x01020304, 0x01020304 +349 pushbytes 0x0a 0x01050504, 0x01020304, 0x01020304, 0x0A +352 replace2 0 0x01050504, 0x01020304, 0x0A020304 +354 frame_dig -1 0x01050504, 0x01020304, 0x0A020304, 0x01020304 +356 swap 0x01050504, 0x01020304, 0x01020304, 0x0A020304 +357 retsub 0x01050504, 0x01020304, 0x0A020304 +119 bury 1 0x01050504, 0x0A020304 +121 dup 0x01050504, 0x0A020304, 0x0A020304 +122 extract 0 1 0x01050504, 0x0A020304, 0x0A +125 pushbytes 0x0a 0x01050504, 0x0A020304, 0x0A, 0x0A +128 b== 0x01050504, 0x0A020304, 1 +129 assert 0x01050504, 0x0A020304 +130 dup2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304 +131 bytec_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304 +132 intc_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0 +133 intc_1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +134 callsub mutate_tuple_items_and_reassign 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +358 proto 5 3 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1 +361 intc_0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0 +362 dupn 5 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0 +364 intc_1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +369 itob 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000 +370 dup 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000000 +371 extract 7 1 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00 +374 frame_dig -5 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00, 0x01050504 +376 swap 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x01050504, 0x00 +377 replace2 0 0x01050504, 0x0A020304, 0x01050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x00050504 +379 frame_bury -5 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000 +381 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0 +383 intc_1 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0, 1 +384 + 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 1 +385 itob 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001 +386 dup 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000001 +387 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01 +390 frame_dig -4 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01, 0x0A020304 +392 swap 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0A020304, 0x01 +393 replace2 0 0x01050504, 0x0A020304, 0x00050504, 0x0A020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x01020304 +395 frame_bury -4 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001 +397 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0 +399 intc_3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0, 2 +400 + 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 2 +401 itob 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002 +402 dup 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x0000000000000002 +403 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02 +406 frame_dig -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02, 0x01020304 +408 swap 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x01020304, 0x02 +409 replace2 0 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x01020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x02020304 +411 frame_bury -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002 +413 frame_dig -5 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x00050504 +415 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000000, 0x0000000000000001, 0x0000000000000002, 0x00 +418 uncover 3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x00, 0x0000000000000000 +420 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 1 +421 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002 +422 frame_dig -4 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x01020304 +424 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000001, 0x0000000000000002, 0x01 +427 uncover 2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x01, 0x0000000000000001 +429 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 1 +430 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002 +431 frame_dig -3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x02020304 +433 extract 0 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000002, 0x02 +436 b== 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +440 pushint 3 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 3 +442 + 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3 +443 itob 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000003 +444 extract 7 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x03 +447 frame_dig -5 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x03, 0x00050504 +449 swap 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00050504, 0x03 +450 replace2 1 0x01050504, 0x0A020304, 0x00050504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00030504 +452 frame_bury -5 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +456 intc_2 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 4 +457 + 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 4 +458 itob 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000004 +459 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x04 +462 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x04, 0x01020304 +464 swap 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x01020304, 0x04 +465 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01020304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x01040304 +467 frame_bury -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 +471 pushint 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 5 +473 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5 +474 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000005 +475 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x05 +478 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x05, 0x02020304 +480 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02020304, 0x05 +481 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304 +483 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02020304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x02050304 +484 frame_bury -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304 +486 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304 +488 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504 +490 frame_dig -1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504, 1 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504 +495 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x02050304, 0x01040304, 0x00030504, 0 +496 frame_bury 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x02050304, 0x01040304, 0x00030504 +498 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x02050304, 0x01040304, 0x00030504, 0 +499 frame_bury 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x02050304, 0x01040304, 0x00030504 +501 intc_0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x02050304, 0x01040304, 0x00030504, 0 +502 frame_bury 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +504 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x02050304 +506 frame_bury 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +508 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x01040304 +510 frame_bury 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +512 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00030504 +514 frame_bury 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504 +516 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0 +518 pushint 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0, 6 +520 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 6 +521 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006 +522 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006, 0x0000000000000006 +523 frame_bury 3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x0000000000000006 +525 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x06 +528 frame_dig 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x06, 0x00030504 +530 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00030504, 0x06 +531 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00030504, 0x00060504 +533 frame_bury 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +535 frame_dig -5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x00030504 +537 frame_bury 0 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +539 frame_dig 6 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504 +548 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0 +550 pushint 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0, 7 +552 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 7 +553 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007 +554 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007, 0x0000000000000007 +555 frame_bury 4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x0000000000000007 +557 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x07 +560 frame_dig 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x07, 0x01040304 +562 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x01040304, 0x07 +563 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01040304, 0x00060504, 0x01070304 +565 frame_bury 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +567 frame_dig -4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x01040304 +569 frame_bury 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +571 frame_dig 7 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504 +580 frame_dig -2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0 +582 pushint 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0, 8 +584 + 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 8 +585 itob 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008 +586 dup 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008, 0x0000000000000008 +587 frame_bury 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x0000000000000008 +589 extract 7 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x08 +592 frame_dig 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x08, 0x02050304 +594 swap 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x02050304, 0x08 +595 replace2 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02050304, 0x01070304, 0x00060504, 0x02080304 +597 frame_bury 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +599 frame_dig -3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x02050304 +601 frame_bury 2 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +603 frame_dig 8 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +612 frame_dig 11 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x00060504 +614 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x06 +617 frame_dig 3 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x06, 0x0000000000000006 +619 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +620 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +621 frame_dig 10 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x01070304 +623 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x07 +626 frame_dig 4 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x07, 0x0000000000000007 +628 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +629 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +630 frame_dig 9 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x02080304 +632 extract 1 1 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x08 +635 frame_dig 5 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 0x08, 0x0000000000000008 +637 b== 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504, 1 +638 assert 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304, 0, 1, 0x00030504, 0x01040304, 0x02050304, 0x0000000000000006, 0x0000000000000007, 0x0000000000000008, 0, 0, 0, 0x02080304, 0x01070304, 0x00060504 +639 retsub 0x01050504, 0x0A020304, 0x00030504, 0x01040304, 0x02050304 +137 popn 3 0x01050504, 0x0A020304 +139 bytec_0 0x01050504, 0x0A020304, 0x01020304 +140 pushint 100 0x01050504, 0x0A020304, 0x01020304, 100 +142 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1 +143 callsub mutate_tuple_items_and_reassign 0x01050504, 0x0A020304, 0x01020304, 100, 1 +358 proto 5 3 0x01050504, 0x0A020304, 0x01020304, 100, 1 +361 intc_0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0 +362 dupn 5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0 +364 intc_1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +369 itob 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064 +370 dup 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000064 +371 extract 7 1 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, "d" +374 frame_dig -5 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, "d", 0x01050504 +376 swap 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x01050504, "d" +377 replace2 0 0x01050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x64050504 +379 frame_bury -5 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064 +381 frame_dig -2 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 100 +383 intc_1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 100, 1 +384 + 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 101 +385 itob 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065 +386 dup 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000065 +387 extract 7 1 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, "e" +390 frame_dig -4 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, "e", 0x0A020304 +392 swap 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0A020304, "e" +393 replace2 0 0x64050504, 0x0A020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x65020304 +395 frame_bury -4 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065 +397 frame_dig -2 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 100 +399 intc_3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 100, 2 +400 + 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 102 +401 itob 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066 +402 dup 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x0000000000000066 +403 extract 7 1 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "f" +406 frame_dig -3 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "f", 0x01020304 +408 swap 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x01020304, "f" +409 replace2 0 0x64050504, 0x65020304, 0x01020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x66020304 +411 frame_bury -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066 +413 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, 0x64050504 +415 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000064, 0x0000000000000065, 0x0000000000000066, "d" +418 uncover 3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, "d", 0x0000000000000064 +420 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, 1 +421 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066 +422 frame_dig -4 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, 0x65020304 +424 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000065, 0x0000000000000066, "e" +427 uncover 2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, "e", 0x0000000000000065 +429 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, 1 +430 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066 +431 frame_dig -3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, 0x66020304 +433 extract 0 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000066, "f" +436 b== 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +440 pushint 3 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 3 +442 + 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 103 +443 itob 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000067 +444 extract 7 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "g" +447 frame_dig -5 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "g", 0x64050504 +449 swap 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x64050504, "g" +450 replace2 1 0x64050504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x64670504 +452 frame_bury -5 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +456 intc_2 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 4 +457 + 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 104 +458 itob 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000068 +459 extract 7 1 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "h" +462 frame_dig -4 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "h", 0x65020304 +464 swap 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x65020304, "h" +465 replace2 1 0x64670504, 0x65020304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x65680304 +467 frame_bury -4 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100 +471 pushint 5 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 100, 5 +473 + 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 105 +474 itob 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x0000000000000069 +475 extract 7 1 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "i" +478 frame_dig -3 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, "i", 0x66020304 +480 swap 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66020304, "i" +481 replace2 1 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304 +483 dup 0x64670504, 0x65680304, 0x66020304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x66690304 +484 frame_bury -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304 +486 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304 +488 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504 +490 frame_dig -1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504, 1 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504 +495 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x66690304, 0x65680304, 0x64670504, 0 +496 frame_bury 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x66690304, 0x65680304, 0x64670504 +498 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0x66690304, 0x65680304, 0x64670504, 0 +499 frame_bury 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x66690304, 0x65680304, 0x64670504 +501 intc_0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x66690304, 0x65680304, 0x64670504, 0 +502 frame_bury 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +504 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x66690304 +506 frame_bury 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +508 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x65680304 +510 frame_bury 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +512 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x64670504 +514 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504 +516 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 100 +518 pushint 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 100, 6 +520 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 106 +521 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A +522 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A, 0x000000000000006A +523 frame_bury 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x000000000000006A +525 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, "j" +528 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, "j", 0x64670504 +530 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x64670504, "j" +531 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x64670504, 0x646A0504 +533 frame_bury 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +535 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x64670504 +537 frame_bury 0 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +539 frame_dig 6 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504 +548 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 100 +550 pushint 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 100, 7 +552 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 107 +553 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B +554 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B, 0x000000000000006B +555 frame_bury 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x000000000000006B +557 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, "k" +560 frame_dig 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, "k", 0x65680304 +562 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x65680304, "k" +563 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x65680304, 0x646A0504, 0x656B0304 +565 frame_bury 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +567 frame_dig -4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x65680304 +569 frame_bury 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +571 frame_dig 7 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504 +580 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 100 +582 pushint 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 100, 8 +584 + 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 108 +585 itob 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C +586 dup 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C, 0x000000000000006C +587 frame_bury 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x000000000000006C +589 extract 7 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, "l" +592 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, "l", 0x66690304 +594 swap 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x66690304, "l" +595 replace2 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x66690304, 0x656B0304, 0x646A0504, 0x666C0304 +597 frame_bury 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +599 frame_dig -3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x66690304 +601 frame_bury 2 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +603 frame_dig 8 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +612 frame_dig 11 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x646A0504 +614 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "j" +617 frame_dig 3 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "j", 0x000000000000006A +619 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +620 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +621 frame_dig 10 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x656B0304 +623 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "k" +626 frame_dig 4 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "k", 0x000000000000006B +628 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +629 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +630 frame_dig 9 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 0x666C0304 +632 extract 1 1 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "l" +635 frame_dig 5 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, "l", 0x000000000000006C +637 b== 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504, 1 +638 assert 0x64670504, 0x65680304, 0x66690304, 100, 1, 0x64670504, 0x65680304, 0x66690304, 0x000000000000006A, 0x000000000000006B, 0x000000000000006C, 0, 0, 0, 0x666C0304, 0x656B0304, 0x646A0504 +639 retsub 0x64670504, 0x65680304, 0x66690304 +146 dig 2 0x64670504, 0x65680304, 0x66690304, 0x64670504 +148 extract 0 1 0x64670504, 0x65680304, 0x66690304, "d" +151 pushbytes 0x64 0x64670504, 0x65680304, 0x66690304, "d", "d" +154 b== 0x64670504, 0x65680304, 0x66690304, 1 +155 assert 0x64670504, 0x65680304, 0x66690304 +156 dig 1 0x64670504, 0x65680304, 0x66690304, 0x65680304 +158 extract 0 1 0x64670504, 0x65680304, 0x66690304, "e" +161 pushbytes 0x65 0x64670504, 0x65680304, 0x66690304, "e", "e" +164 b== 0x64670504, 0x65680304, 0x66690304, 1 +165 assert 0x64670504, 0x65680304, 0x66690304 +166 dup 0x64670504, 0x65680304, 0x66690304, 0x66690304 +167 extract 0 1 0x64670504, 0x65680304, 0x66690304, "f" +170 pushbytes 0x66 0x64670504, 0x65680304, 0x66690304, "f", "f" +173 b== 0x64670504, 0x65680304, 0x66690304, 1 +174 assert 0x64670504, 0x65680304, 0x66690304 +175 dig 2 0x64670504, 0x65680304, 0x66690304, 0x64670504 +177 extract 1 1 0x64670504, 0x65680304, 0x66690304, "g" +180 pushbytes 0x67 0x64670504, 0x65680304, 0x66690304, "g", "g" +183 b== 0x64670504, 0x65680304, 0x66690304, 1 +184 assert 0x64670504, 0x65680304, 0x66690304 +185 dig 1 0x64670504, 0x65680304, 0x66690304, 0x65680304 +187 extract 1 1 0x64670504, 0x65680304, 0x66690304, "h" +190 pushbytes 0x68 0x64670504, 0x65680304, 0x66690304, "h", "h" +193 b== 0x64670504, 0x65680304, 0x66690304, 1 +194 assert 0x64670504, 0x65680304, 0x66690304 +195 dup 0x64670504, 0x65680304, 0x66690304, 0x66690304 +196 extract 1 1 0x64670504, 0x65680304, 0x66690304, "i" +199 pushbytes 0x69 0x64670504, 0x65680304, 0x66690304, "i", "i" +202 b== 0x64670504, 0x65680304, 0x66690304, 1 +203 assert 0x64670504, 0x65680304, 0x66690304 +204 pushint 200 0x64670504, 0x65680304, 0x66690304, 200 +207 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0 +208 callsub mutate_tuple_items_and_reassign 0x64670504, 0x65680304, 0x66690304, 200, 0 +358 proto 5 3 0x64670504, 0x65680304, 0x66690304, 200, 0 +361 intc_0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0 +362 dupn 5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0 +364 intc_1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1 +365 dupn 2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +367 frame_dig -2 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +369 itob 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8 +370 dup 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C8 +371 extract 7 1 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8 +374 frame_dig -5 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8, 0x64670504 +376 swap 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x64670504, 0xC8 +377 replace2 0 0x64670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0xC8670504 +379 frame_bury -5 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8 +381 frame_dig -2 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 200 +383 intc_1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 200, 1 +384 + 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 201 +385 itob 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9 +386 dup 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000C9 +387 extract 7 1 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9 +390 frame_dig -4 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9, 0x65680304 +392 swap 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x65680304, 0xC9 +393 replace2 0 0xC8670504, 0x65680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0xC9680304 +395 frame_bury -4 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9 +397 frame_dig -2 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 200 +399 intc_3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 200, 2 +400 + 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 202 +401 itob 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA +402 dup 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0x00000000000000CA +403 extract 7 1 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA +406 frame_dig -3 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA, 0x66690304 +408 swap 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0x66690304, 0xCA +409 replace2 0 0xC8670504, 0xC9680304, 0x66690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xCA690304 +411 frame_bury -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA +413 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xC8670504 +415 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C8, 0x00000000000000C9, 0x00000000000000CA, 0xC8 +418 uncover 3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC8, 0x00000000000000C8 +420 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 1 +421 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA +422 frame_dig -4 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC9680304 +424 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000C9, 0x00000000000000CA, 0xC9 +427 uncover 2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xC9, 0x00000000000000C9 +429 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 1 +430 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA +431 frame_dig -3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xCA690304 +433 extract 0 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CA, 0xCA +436 b== 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 +437 assert 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +438 frame_dig -2 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +440 pushint 3 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 3 +442 + 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 203 +443 itob 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CB +444 extract 7 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCB +447 frame_dig -5 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCB, 0xC8670504 +449 swap 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC8670504, 0xCB +450 replace2 1 0xC8670504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC8CB0504 +452 frame_bury -5 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +454 frame_dig -2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +456 intc_2 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 4 +457 + 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 204 +458 itob 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CC +459 extract 7 1 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCC +462 frame_dig -4 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCC, 0xC9680304 +464 swap 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC9680304, 0xCC +465 replace2 1 0xC8CB0504, 0xC9680304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xC9CC0304 +467 frame_bury -4 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 +469 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200 +471 pushint 5 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 200, 5 +473 + 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 205 +474 itob 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0x00000000000000CD +475 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCD +478 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCD, 0xCA690304 +480 swap 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCA690304, 0xCD +481 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304 +483 dup 0xC8CB0504, 0xC9CC0304, 0xCA690304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xCACD0304 +484 frame_bury -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304 +486 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304 +488 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504 +490 frame_dig -1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0 +492 bz mutate_tuple_items_and_reassign_after_if_else@20 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504 +516 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 200 +518 pushint 6 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 200, 6 +520 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 206 +521 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE +522 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE, 0x00000000000000CE +523 frame_bury 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0x00000000000000CE +525 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xCE +528 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xCE, 0xC8CB0504 +530 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xC8CB0504, 0xCE +531 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CB0504, 0xC8CE0504 +533 frame_bury 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +535 frame_dig -5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC8CB0504 +537 frame_bury 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +539 frame_dig 6 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 1 +541 bz mutate_tuple_items_and_reassign_after_if_else@22 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +544 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CB0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC8CE0504 +546 frame_bury 0 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504 +548 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 200 +550 pushint 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 200, 7 +552 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 207 +553 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF +554 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF, 0x00000000000000CF +555 frame_bury 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0x00000000000000CF +557 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xCF +560 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xCF, 0xC9CC0304 +562 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC9CC0304, 0xCF +563 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CC0304, 0xC8CE0504, 0xC9CF0304 +565 frame_bury 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +567 frame_dig -4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xC9CC0304 +569 frame_bury 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +571 frame_dig 7 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 1 +573 bz mutate_tuple_items_and_reassign_after_if_else@24 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +576 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CC0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304 +578 frame_bury 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504 +580 frame_dig -2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 200 +582 pushint 8 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 200, 8 +584 + 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 208 +585 itob 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0 +586 dup 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0, 0x00000000000000D0 +587 frame_bury 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0x00000000000000D0 +589 extract 7 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xD0 +592 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xD0, 0xCACD0304 +594 swap 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xCACD0304, 0xD0 +595 replace2 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCACD0304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +597 frame_bury 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +599 frame_dig -3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCACD0304 +601 frame_bury 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +603 frame_dig 8 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +605 bz mutate_tuple_items_and_reassign_after_if_else@26 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +608 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCACD0304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +610 frame_bury 2 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +612 frame_dig 11 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC8CE0504 +614 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE +617 frame_dig 3 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCE, 0x00000000000000CE +619 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +620 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +621 frame_dig 10 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xC9CF0304 +623 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCF +626 frame_dig 4 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCF, 0x00000000000000CF +628 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +629 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +630 frame_dig 9 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xCAD00304 +632 extract 1 1 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xD0 +635 frame_dig 5 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 0xD0, 0x00000000000000D0 +637 b== 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504, 1 +638 assert 0xC8CB0504, 0xC9CC0304, 0xCACD0304, 200, 0, 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0x00000000000000CE, 0x00000000000000CF, 0x00000000000000D0, 1, 1, 1, 0xCAD00304, 0xC9CF0304, 0xC8CE0504 +639 retsub 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +211 dig 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8CE0504 +213 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8 +216 pushbytes 0xc8 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8, 0xC8 +219 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +220 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +221 dig 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9CF0304 +223 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9 +226 pushbytes 0xc9 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC9, 0xC9 +229 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +230 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +231 dup 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCAD00304 +232 extract 0 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCA +235 pushbytes 0xca 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCA, 0xCA +238 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +239 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +240 dig 2 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xC8CE0504 +242 extract 1 1 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCE +245 pushbytes 0xce 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 0xCE, 0xCE +248 b== 0xC8CE0504, 0xC9CF0304, 0xCAD00304, 1 +249 assert 0xC8CE0504, 0xC9CF0304, 0xCAD00304 +250 swap 0xC8CE0504, 0xCAD00304, 0xC9CF0304 +251 extract 1 1 0xC8CE0504, 0xCAD00304, 0xCF +254 pushbytes 0xcf 0xC8CE0504, 0xCAD00304, 0xCF, 0xCF +257 b== 0xC8CE0504, 0xCAD00304, 1 +258 assert 0xC8CE0504, 0xCAD00304 +259 extract 1 1 0xC8CE0504, 0xD0 +262 pushbytes 0xd0 0xC8CE0504, 0xD0, 0xD0 +265 b== 0xC8CE0504, 1 +266 assert 0xC8CE0504 +267 extract 0 4 0xC8CE0504 +270 callsub other_routine_2 0xC8CE0504 +344 proto 1 2 0xC8CE0504 +347 frame_dig -1 0xC8CE0504, 0xC8CE0504 +349 pushbytes 0x0a 0xC8CE0504, 0xC8CE0504, 0x0A +352 replace2 0 0xC8CE0504, 0x0ACE0504 +354 frame_dig -1 0xC8CE0504, 0x0ACE0504, 0xC8CE0504 +356 swap 0xC8CE0504, 0xC8CE0504, 0x0ACE0504 +357 retsub 0xC8CE0504, 0x0ACE0504 +273 popn 2 +275 retsub +49 intc_1 1 +50 return 1 \ No newline at end of file diff --git a/test_cases/arc4_types/out/structs.O0.log b/test_cases/arc4_types/out/structs.O0.log index 269ee67913..9adf9a5aec 100644 --- a/test_cases/arc4_types/out/structs.O0.log +++ b/test_cases/arc4_types/out/structs.O0.log @@ -125,49 +125,49 @@ PC Teal Stack 124 callsub check 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 289 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 292 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -294 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 -295 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -296 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 -297 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 -298 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 -300 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 -301 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 -302 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -303 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -304 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -306 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 -307 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -308 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 -309 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 -310 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 -312 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 -313 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 -314 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -315 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -316 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -317 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -319 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 2 -320 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -321 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00 -322 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1, 0x00, 0 -323 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 1 -325 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80 -326 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x80, 0 -327 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -328 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -329 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -331 pushint 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 3 -333 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -334 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00 -335 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0, 0x00, 0 -336 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0, 0 -338 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00 -339 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0x00, 0 -340 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0 -341 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 1 -342 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 -343 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 -345 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 +294 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0 +295 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0, 0 +296 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +297 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1, 0x00 +298 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1, 0x00, 0 +299 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0, 1 +301 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x80 +302 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x80, 0 +303 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +304 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +305 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0 +307 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0, 1 +308 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 +309 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0, 0x00 +310 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0, 0x00, 0 +311 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0, 0 +313 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00 +314 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0 +315 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 +316 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +317 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +318 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0 +320 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0, 2 +321 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +322 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1, 0x00 +323 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1, 0x00, 0 +324 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0, 1 +326 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x80 +327 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x80, 0 +328 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +329 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +330 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0 +332 pushint 3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0xA0, 3 +334 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 +335 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0, 0x00 +336 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0, 0x00, 0 +337 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0, 0 +339 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00 +340 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0x00, 0 +341 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 0 +342 ! 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0, 1 +343 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0, 0xA0 +344 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 127 pop 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0 128 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0, 0xA0 129 log 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0xA0 @@ -182,33 +182,33 @@ PC Teal Stack 140 swap 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842, 0xA0 141 concat 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 142 callsub nested_decode 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -346 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -349 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -351 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0 -352 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0, 16 -354 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842 -355 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0 -356 intc_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0, 8 -357 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217 -358 pushint 35382882839 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 35382882839 -365 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 0x000000083CFBF217 -366 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -367 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -368 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -370 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16 -372 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16, 1 -373 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0 -374 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0xA0, 2 -375 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -376 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00 -377 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1, 0x00, 0 -378 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x00, 0, 1 -380 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80 -381 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x80, 0 -382 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 1 -383 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 -384 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 -386 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +345 proto 1 1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 +348 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +350 dup 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +351 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0 +352 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0, 16 +354 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842 +355 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0 +356 intc_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842, 0, 8 +357 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217 +358 pushint 35382882839 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 35382882839 +365 itob 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217, 0x000000083CFBF217 +366 == 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 1 +367 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +368 frame_dig -1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +370 pushint 16 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16 +372 intc_2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 16, 1 +373 extract3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0xA0 +374 intc_3 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0xA0, 2 +375 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 1 +376 bytec_1 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 1, 0x00 +377 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 1, 0x00, 0 +378 uncover 2 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x00, 0, 1 +380 setbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x80 +381 intc_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 0x80, 0 +382 getbit 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0, 1 +383 assert 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0, 0x000000083CFBF217000000230384B842A0 +384 retsub 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x000000083CFBF217000000230384B842A0 145 pop 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1 146 bytec_0 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0x 147 len 0x000000083CFBF217000000230384B842, 0x0000004607097084, 1, 0 diff --git a/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.approval.teal b/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.approval.teal index 8eb2947782..1a76a1626f 100644 --- a/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.approval.teal +++ b/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.approval.teal @@ -1,25 +1,25 @@ #pragma version 10 test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program: - intcblock 1 2 4 0 - bytecblock 0x05 0x01020304 0x63 0x80320006000d00054861707079000444617973 0x000741415252474821 + intcblock 0 1 4 2 + bytecblock 0x01020304 0x05 0x80320006000d00054861707079000444617973 0x000741415252474821 callsub mutating_copies - intc_0 // 1 + intc_1 // 1 return // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies() -> void: mutating_copies: proto 0 0 - bytec_1 // 0x01020304 - bytec_0 // 0x05 + bytec_0 // 0x01020304 + bytec_1 // 0x05 replace2 2 dup extract 2 1 // on error: Index access is out of bounds - bytec_0 // 0x05 + bytec_1 // 0x05 b== assert // my_array should be mutated - bytec_3 // 0x80320006000d00054861707079000444617973 + bytec_2 // 0x80320006000d00054861707079000444617973 callsub other_routine uncover 3 assert @@ -28,24 +28,24 @@ mutating_copies: assert dig 1 extract 1 1 // on error: Index access is out of bounds - bytec_0 // 0x05 + bytec_1 // 0x05 b== assert // my_array has been mutated by the subroutine dup - intc_1 // 2 + intc_3 // 2 extract_uint16 dig 1 intc_2 // 4 extract_uint16 substring3 - bytec 4 // 0x000741415252474821 + bytec_3 // 0x000741415252474821 == assert // my_struct has been mutated by the subroutine - bytec_1 // 0x01020304 - bytec_3 // 0x80320006000d00054861707079000444617973 + bytec_0 // 0x01020304 + bytec_2 // 0x80320006000d00054861707079000444617973 callsub other_routine popn 4 - bytec_1 // 0x01020304 + bytec_0 // 0x01020304 callsub other_routine_2 pop dup @@ -61,9 +61,77 @@ mutating_copies: b== assert // my_array_copy_2 should have mutated value dup2 - uncover 2 - callsub other_routine_3 + bytec_0 // 0x01020304 + intc_0 // 0 + intc_1 // 1 + callsub mutate_tuple_items_and_reassign popn 3 + bytec_0 // 0x01020304 + pushint 100 // 100 + intc_1 // 1 + callsub mutate_tuple_items_and_reassign + dig 2 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x64 + b== + assert + dig 1 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x65 + b== + assert + dup + extract 0 1 // on error: Index access is out of bounds + pushbytes 0x66 + b== + assert + dig 2 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x67 + b== + assert + dig 1 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x68 + b== + assert + dup + extract 1 1 // on error: Index access is out of bounds + pushbytes 0x69 + b== + assert + pushint 200 // 200 + intc_0 // 0 + callsub mutate_tuple_items_and_reassign + dig 2 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xc8 + b== + assert + dig 1 + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xc9 + b== + assert + dup + extract 0 1 // on error: Index access is out of bounds + pushbytes 0xca + b== + assert + dig 2 + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xce + b== + assert + swap + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xcf + b== + assert + extract 1 1 // on error: Index access is out of bounds + pushbytes 0xd0 + b== + assert extract 0 4 // on error: Index access is out of bounds callsub other_routine_2 popn 2 @@ -74,14 +142,14 @@ mutating_copies: other_routine: proto 2 4 frame_dig -2 - bytec_0 // 0x05 + bytec_1 // 0x05 replace2 1 frame_bury -2 frame_dig -1 - intc_1 // 2 + intc_3 // 2 extract_uint16 frame_dig -1 - intc_3 // 0 + intc_0 // 0 dig 2 extract3 frame_dig -1 @@ -94,7 +162,7 @@ other_routine: uncover 2 substring3 uncover 2 - bytec 4 // 0x000741415252474821 + bytec_3 // 0x000741415252474821 concat swap concat @@ -112,8 +180,8 @@ other_routine: extract 6 2 replace2 4 frame_bury -1 - intc_0 // 1 - intc_3 // 0 + intc_1 // 1 + intc_0 // 0 frame_dig -2 frame_dig -1 retsub @@ -130,37 +198,171 @@ other_routine_2: retsub -// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> bytes, bytes, bytes: -other_routine_3: - proto 3 3 - intc_3 // 0 - -other_routine_3_for_body@1: - switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 - b other_routine_3_after_for@5 - -other_routine_3_for_header_1@3: - intc_0 // 1 - b other_routine_3_for_body@1 - -other_routine_3_for_header_2@4: - intc_1 // 2 - b other_routine_3_for_body@1 - -other_routine_3_after_for@5: - frame_dig -3 - bytec_2 // 0x63 +// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: uint64) -> bytes, bytes, bytes: +mutate_tuple_items_and_reassign: + proto 5 3 + intc_0 // 0 + dupn 5 + intc_1 // 1 + dupn 2 + frame_dig -2 + itob + dup + extract 7 1 + frame_dig -5 + swap replace2 0 - frame_bury -3 + frame_bury -5 frame_dig -2 - bytec_2 // 0x63 + intc_1 // 1 + + + itob + dup + extract 7 1 + frame_dig -4 + swap replace2 0 - frame_bury -2 - frame_dig -1 - bytec_2 // 0x63 + frame_bury -4 + frame_dig -2 + intc_3 // 2 + + + itob + dup + extract 7 1 + frame_dig -3 + swap replace2 0 - frame_bury -1 + frame_bury -3 + frame_dig -5 + extract 0 1 // on error: Index access is out of bounds + uncover 3 + b== + assert + frame_dig -4 + extract 0 1 // on error: Index access is out of bounds + uncover 2 + b== + assert frame_dig -3 + extract 0 1 // on error: Index access is out of bounds + b== + assert + frame_dig -2 + pushint 3 // 3 + + + itob + extract 7 1 + frame_dig -5 + swap + replace2 1 + frame_bury -5 frame_dig -2 + intc_2 // 4 + + + itob + extract 7 1 + frame_dig -4 + swap + replace2 1 + frame_bury -4 + frame_dig -2 + pushint 5 // 5 + + + itob + extract 7 1 + frame_dig -3 + swap + replace2 1 + dup + frame_bury -3 + frame_dig -4 + frame_dig -5 frame_dig -1 + bz mutate_tuple_items_and_reassign_after_if_else@20 + intc_0 // 0 + frame_bury 6 + intc_0 // 0 + frame_bury 7 + intc_0 // 0 + frame_bury 8 + frame_dig -3 + frame_bury 9 + frame_dig -4 + frame_bury 10 + frame_dig -5 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@20: + frame_dig -2 + pushint 6 // 6 + + + itob + dup + frame_bury 3 + extract 7 1 + frame_dig 11 + swap + replace2 1 + frame_bury 11 + frame_dig -5 + frame_bury 0 + frame_dig 6 + bz mutate_tuple_items_and_reassign_after_if_else@22 + frame_dig 11 + frame_bury 0 + +mutate_tuple_items_and_reassign_after_if_else@22: + frame_dig -2 + pushint 7 // 7 + + + itob + dup + frame_bury 4 + extract 7 1 + frame_dig 10 + swap + replace2 1 + frame_bury 10 + frame_dig -4 + frame_bury 1 + frame_dig 7 + bz mutate_tuple_items_and_reassign_after_if_else@24 + frame_dig 10 + frame_bury 1 + +mutate_tuple_items_and_reassign_after_if_else@24: + frame_dig -2 + pushint 8 // 8 + + + itob + dup + frame_bury 5 + extract 7 1 + frame_dig 9 + swap + replace2 1 + frame_bury 9 + frame_dig -3 + frame_bury 2 + frame_dig 8 + bz mutate_tuple_items_and_reassign_after_if_else@26 + frame_dig 9 + frame_bury 2 + +mutate_tuple_items_and_reassign_after_if_else@26: + frame_dig 11 + extract 1 1 // on error: Index access is out of bounds + frame_dig 3 + b== + assert + frame_dig 10 + extract 1 1 // on error: Index access is out of bounds + frame_dig 4 + b== + assert + frame_dig 9 + extract 1 1 // on error: Index access is out of bounds + frame_dig 5 + b== + assert retsub diff --git a/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.destructured.ir b/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.destructured.ir index b5846911c8..4e6b90e337 100644 --- a/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.destructured.ir +++ b/test_cases/arc4_types/out_O2/Arc4MutableParamsContract.destructured.ir @@ -32,13 +32,51 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#1, my_array_copy_2#2, my_array_copy_2#2) - let tmp%11#0: bytes = ((extract 0 4) my_array#1) // on error: Index access is out of bounds - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, 0x01020304, 0u, 1u) + let (my_array#1: bytes, my_array_copy_2#2: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, 0x01020304, 100u, 1u) + let reinterpret_biguint%12#0: biguint = ((extract 0 1) my_array#1) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let reinterpret_biguint%14#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let reinterpret_biguint%16#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let reinterpret_biguint%18#0: biguint = ((extract 1 1) my_array#1) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let reinterpret_biguint%20#0: biguint = ((extract 1 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let reinterpret_biguint%22#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (my_array#1: bytes, my_array_copy_2#2: bytes, my_array_copy_3#1: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#1, my_array_copy_2#2, my_array_copy_3#1, 200u, 0u) + let reinterpret_biguint%24#0: biguint = ((extract 0 1) my_array#1) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let reinterpret_biguint%26#0: biguint = ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let reinterpret_biguint%28#0: biguint = ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let reinterpret_biguint%30#0: biguint = ((extract 1 1) my_array#1) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let reinterpret_biguint%32#0: biguint = ((extract 1 1) my_array_copy_2#2) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let reinterpret_biguint%34#0: biguint = ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let tmp%28#0: bytes = ((extract 0 4) my_array#1) // on error: Index access is out of bounds + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let array#0: bytes = ((replace2 1) array#0 0x05) let item_offset%0#0: uint64 = (extract_uint16 struct#0 2u) let data_up_to_item%0#0: bytes = (extract3 struct#0 0u item_offset%0#0) @@ -57,29 +95,102 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: return 1u 0u array#0 struct#0 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let array#1: bytes = ((replace2 0) array#0 0x0a) return array#0 array#1 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 - goto_nth [block@3, block@4][loop_counter%0#0] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#0: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#0: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let arrays.0#0: bytes = ((replace2 0) arrays.0#0 0x63) - let arrays.1#0: bytes = ((replace2 0) arrays.1#0 0x63) - let arrays.2#0: bytes = ((replace2 0) arrays.2#0 0x63) - return arrays.0#0 arrays.1#0 arrays.2#0 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.1%is_original#0: bool = 1u + let arrays.2%is_original#0: bool = 1u + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let arrays.0#0: bytes = ((replace2 0) arrays.0#0 assigned_value%0#0) + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let arrays.1#0: bytes = ((replace2 0) arrays.1#0 assigned_value%1#0) + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let arrays.2#0: bytes = ((replace2 0) arrays.2#0 assigned_value%2#0) + let reinterpret_biguint%0#0: biguint = ((extract 0 1) arrays.0#0) // on error: Index access is out of bounds + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 val_as_bytes%0#0) + (assert tmp%1#0) + let reinterpret_biguint%1#0: biguint = ((extract 0 1) arrays.1#0) // on error: Index access is out of bounds + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 val_as_bytes%1#0) + (assert tmp%4#0) + let reinterpret_biguint%2#0: biguint = ((extract 0 1) arrays.2#0) // on error: Index access is out of bounds + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 val_as_bytes%2#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let arrays.0#0: bytes = ((replace2 1) arrays.0#0 assigned_value%3#0) + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let arrays.1#0: bytes = ((replace2 1) arrays.1#0 assigned_value%4#0) + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let arrays.2#0: bytes = ((replace2 1) arrays.2#0 assigned_value%5#0) + let arrays.2#12: bytes = arrays.2#0 + let arrays.1#11: bytes = arrays.1#0 + let arrays.0#10: bytes = arrays.0#0 + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let arrays.0%is_original#0: bool = 0u + let arrays.1%is_original#0: bool = 0u + let arrays.2%is_original#0: bool = 0u + let arrays.2#12: bytes = arrays.2#0 + let arrays.1#11: bytes = arrays.1#0 + let arrays.0#10: bytes = arrays.0#0 + goto block@20 + block@20: // after_if_else_L147 + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let arrays.0#10: bytes = ((replace2 1) arrays.0#10 assigned_value%6#0) + let arrays.0%out#7: bytes = arrays.0#0 + goto arrays.0%is_original#0 ? block@21 : block@22 + block@21: // if_body_L1 + let arrays.0%out#7: bytes = arrays.0#10 + goto block@22 + block@22: // after_if_else_L1 + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let arrays.1#11: bytes = ((replace2 1) arrays.1#11 assigned_value%7#0) + let arrays.1%out#6: bytes = arrays.1#0 + goto arrays.1%is_original#0 ? block@23 : block@24 + block@23: // if_body_L1 + let arrays.1%out#6: bytes = arrays.1#11 + goto block@24 + block@24: // after_if_else_L1 + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let arrays.2#12: bytes = ((replace2 1) arrays.2#12 assigned_value%8#0) + let arrays.2%out#5: bytes = arrays.2#0 + goto arrays.2%is_original#0 ? block@25 : block@26 + block@25: // if_body_L1 + let arrays.2%out#5: bytes = arrays.2#12 + goto block@26 + block@26: // after_if_else_L1 + let reinterpret_biguint%3#0: biguint = ((extract 1 1) arrays.0#10) // on error: Index access is out of bounds + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 val_as_bytes%6#0) + (assert tmp%10#0) + let reinterpret_biguint%4#0: biguint = ((extract 1 1) arrays.1#11) // on error: Index access is out of bounds + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 val_as_bytes%7#0) + (assert tmp%13#0) + let reinterpret_biguint%5#0: biguint = ((extract 1 1) arrays.2#12) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 val_as_bytes%8#0) + (assert tmp%16#0) + return arrays.0%out#7 arrays.1%out#6 arrays.2%out#5 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out_O2/MutableParams2.approval.teal b/test_cases/arc4_types/out_O2/MutableParams2.approval.teal new file mode 100644 index 0000000000..0c43532309 --- /dev/null +++ b/test_cases/arc4_types/out_O2/MutableParams2.approval.teal @@ -0,0 +1,122 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.approval_program: + intcblock 0 1 + callsub __puya_arc4_router__ + return + + +// test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> uint64: +__puya_arc4_router__: + proto 0 1 + txn NumAppArgs + bz __puya_arc4_router___bare_routing@5 + pushbytes 0x6ac4a557 // method "test_array_rebinding()void" + txna ApplicationArgs 0 + match __puya_arc4_router___test_array_rebinding_route@2 + intc_0 // 0 + retsub + +__puya_arc4_router___test_array_rebinding_route@2: + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + callsub test_array_rebinding + intc_1 // 1 + retsub + +__puya_arc4_router___bare_routing@5: + txn OnCompletion + bnz __puya_arc4_router___after_if_else@9 + txn ApplicationID + ! + assert // is creating + intc_1 // 1 + retsub + +__puya_arc4_router___after_if_else@9: + intc_0 // 0 + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: +test_array_rebinding: + proto 0 0 + pushbytes 0x000100 + intc_1 // 1 + callsub maybe_modify_array + pushbytes 0x00020001 + == + assert + pushbytes 0x000101 + intc_0 // 0 + callsub maybe_modify_array + pushbytes 0x0003012a04 + == + assert + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: uint64) -> bytes: +maybe_modify_array: + proto 2 1 + intc_0 // 0 + intc_1 // 1 + frame_dig -1 + bz maybe_modify_array_else_body@10 + frame_dig -2 + extract 2 0 + pushbytes 0x01 + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + pushbytes 0x0003010204 + intc_0 // 0 + frame_bury 1 + frame_dig -2 + frame_bury 0 + frame_bury -2 + b maybe_modify_array_after_if_else@13 + +maybe_modify_array_else_body@10: + frame_dig -2 + extract 2 0 + pushbytes 0x2a + concat + dup + len + itob + extract 6 2 + swap + concat + dupn 2 + frame_bury -2 + frame_bury 0 + frame_bury -2 + +maybe_modify_array_after_if_else@13: + frame_dig -2 + extract 2 0 + pushbytes 0x04 + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + frame_dig 1 + bz maybe_modify_array_after_if_else@15 + frame_dig -2 + frame_bury 0 + +maybe_modify_array_after_if_else@15: + retsub diff --git a/test_cases/arc4_types/out_O2/MutableParams2.clear.teal b/test_cases/arc4_types/out_O2/MutableParams2.clear.teal new file mode 100644 index 0000000000..e138fea62e --- /dev/null +++ b/test_cases/arc4_types/out_O2/MutableParams2.clear.teal @@ -0,0 +1,5 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.clear_state_program: + pushint 1 // 1 + return diff --git a/test_cases/arc4_types/out_O2/MutableParams2.destructured.ir b/test_cases/arc4_types/out_O2/MutableParams2.destructured.ir new file mode 100644 index 0000000000..e39aa56ece --- /dev/null +++ b/test_cases/arc4_types/out_O2/MutableParams2.destructured.ir @@ -0,0 +1,87 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + goto tmp%0#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (! tmp%3#0) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + (assert tmp%5#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + goto tmp%7#0 ? block@9 : block@6 + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (! tmp%8#0) + (assert tmp%9#0) // is creating + return 1u + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000100, 1u) + let tmp%0#0: bool = (== a#1 0x00020001) + (assert tmp%0#0) + let a#1: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(0x000101, 0u) + let tmp%1#0: bool = (== a#1 0x0003012a04) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 0x01) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let a#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#5: bytes = 0x0003010204 + let a%is_original#0: bool = 0u + let a%out#7: bytes = a#0 + let a#0: bytes = a#5 + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 0x2a) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let a#0: bytes = (concat len_16_bit%2#0 concatenated%2#0) + let a%out#7: bytes = a#0 + let a#0: bytes = a%out#7 + goto block@13 + block@13: // after_if_else_L17 + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#0) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 0x04) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let a#0: bytes = (concat len_16_bit%3#0 concatenated%3#0) + goto a%is_original#0 ? block@14 : block@15 + block@14: // if_body_L1 + let a%out#7: bytes = a#0 + goto block@15 + block@15: // after_if_else_L1 + return a%out#7 + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.approval.teal b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.approval.teal index d129478ee1..d98ef2b828 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.approval.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.approval.teal @@ -2,7 +2,7 @@ test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program: intcblock 1 0 2 4 - bytecblock 0x "Happy" 0x05 "AARRGH!" 0x63 "Days" + bytecblock 0x "Happy" 0x05 "AARRGH!" "Days" // arc4_types/mutable_params.py:29 // self.mutating_copies() callsub mutating_copies @@ -49,11 +49,11 @@ mutating_copies: swap // arc4_types/mutable_params.py:40 // s_val_2=String("Days"), - bytec 5 // "Days" + bytec 4 // "Days" len itob extract 6 2 - bytec 5 // "Days" + bytec 4 // "Days" concat cover 2 // arc4_types/mutable_params.py:36-41 @@ -231,7 +231,7 @@ mutating_copies: assert // my_struct_copy should not be mutated by the subroutine // arc4_types/mutable_params.py:73 // my_array_copy_2 = my_array_copy.copy() - swap + dig 1 // arc4_types/mutable_params.py:75 // my_array_copy_2 = self.other_routine_2(my_array_copy_2) callsub other_routine_2 @@ -262,24 +262,245 @@ mutating_copies: pushbytes 0x0a b== assert // my_array_copy_2 should have mutated value - // arc4_types/mutable_params.py:82-83 - // # tuples of mutable types only work with a .copy() - // self.other_routine_3((my_array.copy(), my_array_copy_2.copy(), my_array_copy_2.copy())) - dup2 + // arc4_types/mutable_params.py:82 + // my_array_copy_3 = my_array_copy.copy() + uncover 2 + // arc4_types/mutable_params.py:84 + // originals = (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()) + dig 2 swap + dig 2 + cover 2 + dup + cover 2 + swap + cover 5 uncover 2 + cover 5 swap + cover 5 + // arc4_types/mutable_params.py:86 + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + dig 2 + dig 2 + dig 2 + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) + uncover 2 uncover 2 uncover 2 - callsub other_routine_3 + // arc4_types/mutable_params.py:87 + // start=UInt64(0), + intc_1 // 0 + // arc4_types/mutable_params.py:88 + // reassign=True, + intc_0 // 1 + // arc4_types/mutable_params.py:85-89 + // self.mutate_tuple_items_and_reassign( + // (my_array.copy(), my_array_copy_2.copy(), my_array_copy_3.copy()), + // start=UInt64(0), + // reassign=True, + // ) + callsub mutate_tuple_items_and_reassign popn 3 - // arc4_types/mutable_params.py:85-86 + // arc4_types/mutable_params.py:90 + // assert originals == (my_array, my_array_copy_2, my_array_copy_3) + uncover 3 + dig 3 + == + uncover 4 + dig 3 + == + && + uncover 4 + dig 2 + == + && + assert + // arc4_types/mutable_params.py:92-94 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + // ) + uncover 2 + uncover 2 + uncover 2 + // arc4_types/mutable_params.py:93 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + pushint 100 // 100 + intc_0 // 1 + // arc4_types/mutable_params.py:92-94 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(100), reassign=True + // ) + callsub mutate_tuple_items_and_reassign + cover 2 + cover 2 + cover 2 + cover 2 + swap + // arc4_types/mutable_params.py:96 + // assert my_array[0] == 100 + dup + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x64 + b== + assert + // arc4_types/mutable_params.py:97 + // assert my_array_copy_2[0] == 101 + dig 1 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x65 + b== + assert + // arc4_types/mutable_params.py:98 + // assert my_array_copy_3[0] == 102 + dig 2 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x66 + b== + assert + // arc4_types/mutable_params.py:99 + // assert my_array[1] == 103 + dup + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x67 + b== + assert + // arc4_types/mutable_params.py:100 + // assert my_array_copy_2[1] == 104 + dig 1 + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x68 + b== + assert + // arc4_types/mutable_params.py:101 + // assert my_array_copy_3[1] == 105 + dig 2 + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0x69 + b== + assert + // arc4_types/mutable_params.py:103-105 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + // ) + swap + uncover 2 + // arc4_types/mutable_params.py:104 + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + pushint 200 // 200 + intc_1 // 0 + // arc4_types/mutable_params.py:103-105 + // self.mutate_tuple_items_and_reassign( + // (my_array, my_array_copy_2, my_array_copy_3), start=UInt64(200), reassign=False + // ) + callsub mutate_tuple_items_and_reassign + cover 2 + cover 2 + cover 2 + cover 2 + swap + // arc4_types/mutable_params.py:107 + // assert my_array[0] == 200 + dup + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xc8 + b== + assert + // arc4_types/mutable_params.py:108 + // assert my_array_copy_2[0] == 201 + dig 1 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xc9 + b== + assert + // arc4_types/mutable_params.py:109 + // assert my_array_copy_3[0] == 202 + dig 2 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xca + b== + assert + // arc4_types/mutable_params.py:110 + // assert my_array[1] == 206 + dup + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xce + b== + assert + // arc4_types/mutable_params.py:111 + // assert my_array_copy_2[1] == 207 + swap + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xcf + b== + assert + // arc4_types/mutable_params.py:112 + // assert my_array_copy_3[1] == 208 + swap + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + pushbytes 0xd0 + b== + assert + // arc4_types/mutable_params.py:114-115 // # Nested array items should still require a copy // nested = StructWithArray(test_array=my_array.copy()) bytec_0 // 0x swap concat - // arc4_types/mutable_params.py:87 + // arc4_types/mutable_params.py:116 // self.other_routine_2(nested.test_array.copy()) intc_1 // 0 intc_3 // 4 @@ -291,18 +512,22 @@ mutating_copies: // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> uint64, uint64, bytes, bytes: other_routine: - // arc4_types/mutable_params.py:89-90 + // arc4_types/mutable_params.py:118-119 // @subroutine // def other_routine(self, array: TestArray, struct: TestStruct) -> tuple[bool, bool]: proto 2 4 - // arc4_types/mutable_params.py:91 + // arc4_types/mutable_params.py:120 // array[1] = UInt8(5) frame_dig -2 intc_0 // 1 bytec_2 // 0x05 replace3 frame_bury -2 - // arc4_types/mutable_params.py:92 + intc_0 // 1 + bz other_routine_after_if_else@2 + +other_routine_after_if_else@2: + // arc4_types/mutable_params.py:121 // struct.s_val_1 = String("AARRGH!") bytec_3 // "AARRGH!" len @@ -350,7 +575,11 @@ other_routine: uncover 2 replace3 frame_bury -1 - // arc4_types/mutable_params.py:93 + intc_0 // 1 + bz other_routine_after_if_else@4 + +other_routine_after_if_else@4: + // arc4_types/mutable_params.py:122 // return True, False intc_0 // 1 intc_1 // 0 @@ -361,76 +590,371 @@ other_routine: // test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> bytes, bytes: other_routine_2: - // arc4_types/mutable_params.py:95-96 + // arc4_types/mutable_params.py:124-125 // @subroutine // def other_routine_2(self, array: TestArray) -> TestArray: proto 1 2 - // arc4_types/mutable_params.py:97 + // arc4_types/mutable_params.py:126 // copy = array.copy() frame_dig -1 - // arc4_types/mutable_params.py:98 + // arc4_types/mutable_params.py:127 // array[0] = UInt8(10) dup intc_1 // 0 pushbytes 0x0a replace3 - dup frame_bury -1 - // arc4_types/mutable_params.py:99 + intc_0 // 1 + bz other_routine_2_after_if_else@2 + +other_routine_2_after_if_else@2: + // arc4_types/mutable_params.py:128 // return copy + frame_dig 0 + frame_dig -1 + uncover 2 retsub -// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> bytes, bytes, bytes: -other_routine_3: - // arc4_types/mutable_params.py:101-102 +// test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: uint64) -> bytes, bytes, bytes: +mutate_tuple_items_and_reassign: + // arc4_types/mutable_params.py:130-133 // @subroutine - // def other_routine_3(self, arrays: tuple[TestArray, TestArray, TestArray]) -> None: - proto 3 3 + // def mutate_tuple_items_and_reassign( + // self, arrays: tuple[TestArray, TestArray, TestArray], *, start: UInt64, reassign: bool + // ) -> None: + proto 5 3 intc_1 // 0 + dupn 5 + intc_0 // 1 + frame_dig -5 + intc_0 // 1 + frame_dig -4 + intc_0 // 1 + frame_dig -3 + // arc4_types/mutable_params.py:134 + // arrays[0][0] = UInt8(start) + frame_dig -2 + itob + extract 7 1 + frame_dig -5 + intc_1 // 0 + uncover 2 + replace3 + frame_bury -5 + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@2 + frame_dig -5 + frame_bury 7 -other_routine_3_for_body@1: - // arc4_types/mutable_params.py:103-104 - // # this modifies the local copy - // for array in arrays: - frame_dig 0 - switch other_routine_3_for_header_1@3 other_routine_3_for_header_2@4 - b other_routine_3_after_for@5 - -other_routine_3_for_header_1@3: +mutate_tuple_items_and_reassign_after_if_else@2: + // arc4_types/mutable_params.py:135 + // arrays[1][0] = UInt8(start + 1) + frame_dig -2 intc_0 // 1 - frame_bury 0 - b other_routine_3_for_body@1 + + + itob + extract 7 1 + frame_dig -4 + intc_1 // 0 + uncover 2 + replace3 + frame_bury -4 + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@4 + frame_dig -4 + frame_bury 9 -other_routine_3_for_header_2@4: +mutate_tuple_items_and_reassign_after_if_else@4: + // arc4_types/mutable_params.py:136 + // arrays[2][0] = UInt8(start + 2) + frame_dig -2 intc_2 // 2 - frame_bury 0 - b other_routine_3_for_body@1 - -other_routine_3_after_for@5: - // arc4_types/mutable_params.py:107 - // arrays[0][0] = UInt8(99) + + + itob + extract 7 1 frame_dig -3 intc_1 // 0 - bytec 4 // 0x63 + uncover 2 replace3 frame_bury -3 - // arc4_types/mutable_params.py:108 - // arrays[1][0] = UInt8(99) + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@6 + frame_dig -3 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@6: + // arc4_types/mutable_params.py:138 + // assert arrays[0][0] == start + frame_dig -5 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + frame_dig -2 + itob + b== + assert + // arc4_types/mutable_params.py:139 + // assert arrays[1][0] == start + 1 + frame_dig -4 + intc_1 // 0 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds frame_dig -2 + intc_0 // 1 + + + itob + b== + assert + // arc4_types/mutable_params.py:140 + // assert arrays[2][0] == start + 2 + frame_dig -3 intc_1 // 0 - bytec 4 // 0x63 + intc_0 // 1 + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + frame_dig -2 + intc_2 // 2 + + + itob + b== + assert + // arc4_types/mutable_params.py:142 + // arrays[0][1] = UInt8(start + 3) + frame_dig -2 + pushint 3 // 3 + + + itob + extract 7 1 + frame_dig -5 + intc_0 // 1 + uncover 2 replace3 - frame_bury -2 - // arc4_types/mutable_params.py:109 - // arrays[2][0] = UInt8(99) + frame_bury -5 + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@8 + frame_dig -5 + frame_bury 7 + +mutate_tuple_items_and_reassign_after_if_else@8: + // arc4_types/mutable_params.py:143 + // arrays[1][1] = UInt8(start + 4) + frame_dig -2 + intc_3 // 4 + + + itob + extract 7 1 + frame_dig -4 + intc_0 // 1 + uncover 2 + replace3 + frame_bury -4 + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@10 + frame_dig -4 + frame_bury 9 + +mutate_tuple_items_and_reassign_after_if_else@10: + // arc4_types/mutable_params.py:144 + // arrays[2][1] = UInt8(start + 5) + frame_dig -2 + pushint 5 // 5 + + + itob + extract 7 1 + frame_dig -3 + intc_0 // 1 + uncover 2 + replace3 + frame_bury -3 + intc_0 // 1 + bz mutate_tuple_items_and_reassign_after_if_else@12 + frame_dig -3 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@12: + frame_dig 11 + frame_bury 5 + frame_dig 9 + frame_bury 3 + frame_dig 7 + frame_bury 1 + frame_dig -3 + frame_bury 4 + frame_dig -4 + frame_bury 2 + frame_dig -5 + frame_bury 0 + // arc4_types/mutable_params.py:146-147 + // # overwrite params + // if reassign: frame_dig -1 + bz mutate_tuple_items_and_reassign_after_if_else@20 + // arc4_types/mutable_params.py:148 + // arrays = (arrays[0].copy(), arrays[1].copy(), arrays[2].copy()) + frame_dig -5 + frame_dig -4 + swap + frame_dig -3 + cover 2 + intc_1 // 0 + frame_bury 6 intc_1 // 0 - bytec 4 // 0x63 + frame_bury 8 + intc_1 // 0 + frame_bury 10 + frame_bury -5 + frame_bury -4 + frame_bury -3 + intc_1 // 0 + bz mutate_tuple_items_and_reassign_after_if_else@15 + frame_dig -5 + frame_bury 7 + +mutate_tuple_items_and_reassign_after_if_else@15: + intc_1 // 0 + bz mutate_tuple_items_and_reassign_after_if_else@17 + frame_dig -4 + frame_bury 9 + +mutate_tuple_items_and_reassign_after_if_else@17: + intc_1 // 0 + bz mutate_tuple_items_and_reassign_after_if_else@19 + frame_dig -3 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@19: + frame_dig 11 + frame_bury 5 + frame_dig 9 + frame_bury 3 + frame_dig 7 + frame_bury 1 + frame_dig -3 + frame_bury 4 + frame_dig -4 + frame_bury 2 + frame_dig -5 + frame_bury 0 + +mutate_tuple_items_and_reassign_after_if_else@20: + frame_dig 5 + frame_bury 11 + frame_dig 3 + frame_bury 9 + frame_dig 1 + frame_bury 7 + frame_dig 4 + frame_bury -3 + frame_dig 2 + frame_bury -4 + frame_dig 0 + frame_bury -5 + // arc4_types/mutable_params.py:150 + // arrays[0][1] = UInt8(start + 6) + frame_dig -2 + pushint 6 // 6 + + + itob + extract 7 1 + frame_dig -5 + intc_0 // 1 + uncover 2 replace3 - frame_bury -1 + frame_bury -5 + frame_dig 6 + bz mutate_tuple_items_and_reassign_after_if_else@22 + frame_dig -5 + frame_bury 7 + +mutate_tuple_items_and_reassign_after_if_else@22: + // arc4_types/mutable_params.py:151 + // arrays[1][1] = UInt8(start + 7) + frame_dig -2 + pushint 7 // 7 + + + itob + extract 7 1 + frame_dig -4 + intc_0 // 1 + uncover 2 + replace3 + frame_bury -4 + frame_dig 8 + bz mutate_tuple_items_and_reassign_after_if_else@24 + frame_dig -4 + frame_bury 9 + +mutate_tuple_items_and_reassign_after_if_else@24: + // arc4_types/mutable_params.py:152 + // arrays[2][1] = UInt8(start + 8) + frame_dig -2 + pushint 8 // 8 + + + itob + extract 7 1 + frame_dig -3 + intc_0 // 1 + uncover 2 + replace3 + frame_bury -3 + frame_dig 10 + bz mutate_tuple_items_and_reassign_after_if_else@26 frame_dig -3 + frame_bury 11 + +mutate_tuple_items_and_reassign_after_if_else@26: + // arc4_types/mutable_params.py:154 + // assert arrays[0][1] == start + 6 + frame_dig -5 + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds frame_dig -2 - frame_dig -1 - uncover 3 + pushint 6 // 6 + + + itob + b== + assert + // arc4_types/mutable_params.py:155 + // assert arrays[1][1] == start + 7 + frame_dig -4 + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + frame_dig -2 + pushint 7 // 7 + + + itob + b== + assert + // arc4_types/mutable_params.py:156 + // assert arrays[2][1] == start + 8 + frame_dig -3 + intc_0 // 1 + dup + * + intc_0 // 1 + extract3 // on error: Index access is out of bounds + frame_dig -2 + pushint 8 // 8 + + + itob + b== + assert + frame_dig 7 + frame_dig 9 + frame_dig 11 + frame_bury 2 + frame_bury 1 + frame_bury 0 retsub diff --git a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.clear.teal b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.clear.teal index 533fc84667..825e67715f 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.clear.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program: - // arc4_types/mutable_params.py:112 + // arc4_types/mutable_params.py:159 // return True pushint 1 // 1 return diff --git a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.destructured.ir b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.destructured.ir index 3168095c73..d8abd2520d 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.destructured.ir +++ b/test_cases/arc4_types/out_unoptimized/Arc4MutableParamsContract.destructured.ir @@ -106,22 +106,108 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let reinterpret_biguint%10#0: biguint = (extract3 array_head_and_tail%5#0 item_offset%5#0 1u) // on error: Index access is out of bounds let tmp%10#0: bool = (b== reinterpret_biguint%10#0 0x0a) (assert tmp%10#0) // my_array_copy_2 should have mutated value - let copy%5#0: bytes = my_array#0 - let copy%6#0: bytes = my_array_copy_2#0 + let copy%5#0: bytes = my_array_copy#0 + let my_array_copy_3#0: bytes = copy%5#0 + let copy%6#0: bytes = my_array#0 let copy%7#0: bytes = my_array_copy_2#0 - let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(copy%5#0, copy%6#0, copy%7#0) - let copy%8#0: bytes = my_array#0 - let encoded_tuple_buffer%8#0: bytes = (concat 0x copy%8#0) + let copy%8#0: bytes = my_array_copy_3#0 + let originals.0#0: bytes = copy%6#0 + let originals.1#0: bytes = copy%7#0 + let originals.2#0: bytes = copy%8#0 + let copy%9#0: bytes = my_array#0 + let copy%10#0: bytes = my_array_copy_2#0 + let copy%11#0: bytes = my_array_copy_3#0 + let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(copy%9#0, copy%10#0, copy%11#0, 0u, 1u) + let tmp%11#0: bool = (== originals.0#0 my_array#0) + let tmp%12#0: bool = (== originals.1#0 my_array_copy_2#0) + let tmp%13#0: bool = (&& tmp%11#0 tmp%12#0) + let tmp%14#0: bool = (== originals.2#0 my_array_copy_3#0) + let tmp%15#0: bool = (&& tmp%13#0 tmp%14#0) + (assert tmp%15#0) + let (mutate_tuple_items_and_reassign%3#0: bytes, mutate_tuple_items_and_reassign%4#0: bytes, mutate_tuple_items_and_reassign%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#0, my_array_copy_2#0, my_array_copy_3#0, 100u, 1u) + let my_array_copy_3#0: bytes = mutate_tuple_items_and_reassign%5#0 + let my_array_copy_2#0: bytes = mutate_tuple_items_and_reassign%4#0 + let my_array#0: bytes = mutate_tuple_items_and_reassign%3#0 + let array_head_and_tail%6#0: bytes = my_array#0 + let item_offset%6#0: uint64 = (* 0u 1u) + let reinterpret_biguint%12#0: biguint = (extract3 array_head_and_tail%6#0 item_offset%6#0 1u) // on error: Index access is out of bounds + let tmp%16#0: bool = (b== reinterpret_biguint%12#0 0x64) + (assert tmp%16#0) + let array_head_and_tail%7#0: bytes = my_array_copy_2#0 + let item_offset%7#0: uint64 = (* 0u 1u) + let reinterpret_biguint%14#0: biguint = (extract3 array_head_and_tail%7#0 item_offset%7#0 1u) // on error: Index access is out of bounds + let tmp%17#0: bool = (b== reinterpret_biguint%14#0 0x65) + (assert tmp%17#0) + let array_head_and_tail%8#0: bytes = my_array_copy_3#0 + let item_offset%8#0: uint64 = (* 0u 1u) + let reinterpret_biguint%16#0: biguint = (extract3 array_head_and_tail%8#0 item_offset%8#0 1u) // on error: Index access is out of bounds + let tmp%18#0: bool = (b== reinterpret_biguint%16#0 0x66) + (assert tmp%18#0) + let array_head_and_tail%9#0: bytes = my_array#0 + let item_offset%9#0: uint64 = (* 1u 1u) + let reinterpret_biguint%18#0: biguint = (extract3 array_head_and_tail%9#0 item_offset%9#0 1u) // on error: Index access is out of bounds + let tmp%19#0: bool = (b== reinterpret_biguint%18#0 0x67) + (assert tmp%19#0) + let array_head_and_tail%10#0: bytes = my_array_copy_2#0 + let item_offset%10#0: uint64 = (* 1u 1u) + let reinterpret_biguint%20#0: biguint = (extract3 array_head_and_tail%10#0 item_offset%10#0 1u) // on error: Index access is out of bounds + let tmp%20#0: bool = (b== reinterpret_biguint%20#0 0x68) + (assert tmp%20#0) + let array_head_and_tail%11#0: bytes = my_array_copy_3#0 + let item_offset%11#0: uint64 = (* 1u 1u) + let reinterpret_biguint%22#0: biguint = (extract3 array_head_and_tail%11#0 item_offset%11#0 1u) // on error: Index access is out of bounds + let tmp%21#0: bool = (b== reinterpret_biguint%22#0 0x69) + (assert tmp%21#0) + let (mutate_tuple_items_and_reassign%6#0: bytes, mutate_tuple_items_and_reassign%7#0: bytes, mutate_tuple_items_and_reassign%8#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#0, my_array_copy_2#0, my_array_copy_3#0, 200u, 0u) + let my_array_copy_3#0: bytes = mutate_tuple_items_and_reassign%8#0 + let my_array_copy_2#0: bytes = mutate_tuple_items_and_reassign%7#0 + let my_array#0: bytes = mutate_tuple_items_and_reassign%6#0 + let array_head_and_tail%12#0: bytes = my_array#0 + let item_offset%12#0: uint64 = (* 0u 1u) + let reinterpret_biguint%24#0: biguint = (extract3 array_head_and_tail%12#0 item_offset%12#0 1u) // on error: Index access is out of bounds + let tmp%22#0: bool = (b== reinterpret_biguint%24#0 0xc8) + (assert tmp%22#0) + let array_head_and_tail%13#0: bytes = my_array_copy_2#0 + let item_offset%13#0: uint64 = (* 0u 1u) + let reinterpret_biguint%26#0: biguint = (extract3 array_head_and_tail%13#0 item_offset%13#0 1u) // on error: Index access is out of bounds + let tmp%23#0: bool = (b== reinterpret_biguint%26#0 0xc9) + (assert tmp%23#0) + let array_head_and_tail%14#0: bytes = my_array_copy_3#0 + let item_offset%14#0: uint64 = (* 0u 1u) + let reinterpret_biguint%28#0: biguint = (extract3 array_head_and_tail%14#0 item_offset%14#0 1u) // on error: Index access is out of bounds + let tmp%24#0: bool = (b== reinterpret_biguint%28#0 0xca) + (assert tmp%24#0) + let array_head_and_tail%15#0: bytes = my_array#0 + let item_offset%15#0: uint64 = (* 1u 1u) + let reinterpret_biguint%30#0: biguint = (extract3 array_head_and_tail%15#0 item_offset%15#0 1u) // on error: Index access is out of bounds + let tmp%25#0: bool = (b== reinterpret_biguint%30#0 0xce) + (assert tmp%25#0) + let array_head_and_tail%16#0: bytes = my_array_copy_2#0 + let item_offset%16#0: uint64 = (* 1u 1u) + let reinterpret_biguint%32#0: biguint = (extract3 array_head_and_tail%16#0 item_offset%16#0 1u) // on error: Index access is out of bounds + let tmp%26#0: bool = (b== reinterpret_biguint%32#0 0xcf) + (assert tmp%26#0) + let array_head_and_tail%17#0: bytes = my_array_copy_3#0 + let item_offset%17#0: uint64 = (* 1u 1u) + let reinterpret_biguint%34#0: biguint = (extract3 array_head_and_tail%17#0 item_offset%17#0 1u) // on error: Index access is out of bounds + let tmp%27#0: bool = (b== reinterpret_biguint%34#0 0xd0) + (assert tmp%27#0) + let copy%12#0: bytes = my_array#0 + let encoded_tuple_buffer%8#0: bytes = (concat 0x copy%12#0) let nested#0: bytes = encoded_tuple_buffer%8#0 - let tmp%11#0: bytes = (extract3 nested#0 0u 4u) // on error: Index access is out of bounds - let copy%9#0: bytes = tmp%11#0 - let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(copy%9#0) + let tmp%28#0: bytes = (extract3 nested#0 0u 4u) // on error: Index access is out of bounds + let copy%13#0: bytes = tmp%28#0 + let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(copy%13#0) return subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(array: bytes, struct: bytes) -> : - block@0: // L89 + block@0: // L118 let updated_target%0#0: bytes = (replace3 array#0 1u 0x05) let array#0: bytes = updated_target%0#0 + goto 1u ? block@1 : block@2 + block@1: // if_body_L1 + goto block@2 + block@2: // after_if_else_L1 let length%0#0: uint64 = (len "AARRGH!") let as_bytes%0#0: bytes = (itob length%0#0) let length_uint16%0#0: bytes = ((extract 6 2) as_bytes%0#0) @@ -143,40 +229,211 @@ contract test_cases.arc4_types.mutable_params.Arc4MutableParamsContract: let tail_offset_bytes%0#0: bytes = ((extract 6 2) as_bytes%1#0) let updated_data%2#0: bytes = (replace3 updated_data%1#0 4u tail_offset_bytes%0#0) let struct#0: bytes = updated_data%2#0 + goto 1u ? block@3 : block@4 + block@3: // if_body_L1 + goto block@4 + block@4: // after_if_else_L1 return 1u 0u array#0 struct#0 subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(array: bytes) -> : - block@0: // L95 + block@0: // L124 let copy%0#0: bytes = array#0 let copy#0: bytes = copy%0#0 let updated_target%0#0: bytes = (replace3 array#0 0u 0x0a) let array#0: bytes = updated_target%0#0 + goto 1u ? block@1 : block@2 + block@1: // if_body_L1 + goto block@2 + block@2: // after_if_else_L1 return copy#0 array#0 - subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes) -> : - block@0: // L101 - let loop_counter%0#0: uint64 = 0u - goto block@1 - block@1: // for_body_L105 + subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(arrays.0: bytes, arrays.1: bytes, arrays.2: bytes, start: uint64, reassign: bool) -> : + block@0: // L130 + let arrays.0%is_original#0: bool = 1u + let arrays.0%out#0: bytes = arrays.0#0 + let arrays.1%is_original#0: bool = 1u + let arrays.1%out#0: bytes = arrays.1#0 + let arrays.2%is_original#0: bool = 1u + let arrays.2%out#0: bytes = arrays.2#0 + let val_as_bytes%0#0: bytes = (itob start#0) + let assigned_value%0#0: bytes = ((extract 7 1) val_as_bytes%0#0) + let updated_target%0#0: bytes = (replace3 arrays.0#0 0u assigned_value%0#0) + let arrays.0#0: bytes = updated_target%0#0 + goto 1u ? block@1 : block@2 + block@1: // if_body_L1 + let arrays.0%out#0: bytes = arrays.0#0 goto block@2 - block@2: // for_footer_L104 - goto_nth [block@3, block@4][loop_counter%0#0] else goto block@5 - block@3: // for_header_1_L104 - let loop_counter%0#0: uint64 = 1u - goto block@1 - block@4: // for_header_2_L104 - let loop_counter%0#0: uint64 = 2u - goto block@1 - block@5: // after_for_L104 - let updated_target%1#0: bytes = (replace3 arrays.0#0 0u 0x63) - let arrays.0#0: bytes = updated_target%1#0 - let updated_target%2#0: bytes = (replace3 arrays.1#0 0u 0x63) - let arrays.1#0: bytes = updated_target%2#0 - let updated_target%3#0: bytes = (replace3 arrays.2#0 0u 0x63) - let arrays.2#0: bytes = updated_target%3#0 - return arrays.0#0 arrays.1#0 arrays.2#0 + block@2: // after_if_else_L1 + let to_encode%0#0: uint64 = (+ start#0 1u) + let val_as_bytes%1#0: bytes = (itob to_encode%0#0) + let assigned_value%1#0: bytes = ((extract 7 1) val_as_bytes%1#0) + let updated_target%1#0: bytes = (replace3 arrays.1#0 0u assigned_value%1#0) + let arrays.1#0: bytes = updated_target%1#0 + goto 1u ? block@3 : block@4 + block@3: // if_body_L1 + let arrays.1%out#0: bytes = arrays.1#0 + goto block@4 + block@4: // after_if_else_L1 + let to_encode%1#0: uint64 = (+ start#0 2u) + let val_as_bytes%2#0: bytes = (itob to_encode%1#0) + let assigned_value%2#0: bytes = ((extract 7 1) val_as_bytes%2#0) + let updated_target%2#0: bytes = (replace3 arrays.2#0 0u assigned_value%2#0) + let arrays.2#0: bytes = updated_target%2#0 + goto 1u ? block@5 : block@6 + block@5: // if_body_L1 + let arrays.2%out#0: bytes = arrays.2#0 + goto block@6 + block@6: // after_if_else_L1 + let array_head_and_tail%0#0: bytes = arrays.0#0 + let item_offset%0#0: uint64 = (* 0u 1u) + let reinterpret_biguint%0#0: biguint = (extract3 array_head_and_tail%0#0 item_offset%0#0 1u) // on error: Index access is out of bounds + let tmp%0#0: biguint = (itob start#0) + let tmp%1#0: bool = (b== reinterpret_biguint%0#0 tmp%0#0) + (assert tmp%1#0) + let array_head_and_tail%1#0: bytes = arrays.1#0 + let item_offset%1#0: uint64 = (* 0u 1u) + let reinterpret_biguint%1#0: biguint = (extract3 array_head_and_tail%1#0 item_offset%1#0 1u) // on error: Index access is out of bounds + let tmp%2#0: uint64 = (+ start#0 1u) + let tmp%3#0: biguint = (itob tmp%2#0) + let tmp%4#0: bool = (b== reinterpret_biguint%1#0 tmp%3#0) + (assert tmp%4#0) + let array_head_and_tail%2#0: bytes = arrays.2#0 + let item_offset%2#0: uint64 = (* 0u 1u) + let reinterpret_biguint%2#0: biguint = (extract3 array_head_and_tail%2#0 item_offset%2#0 1u) // on error: Index access is out of bounds + let tmp%5#0: uint64 = (+ start#0 2u) + let tmp%6#0: biguint = (itob tmp%5#0) + let tmp%7#0: bool = (b== reinterpret_biguint%2#0 tmp%6#0) + (assert tmp%7#0) + let to_encode%2#0: uint64 = (+ start#0 3u) + let val_as_bytes%3#0: bytes = (itob to_encode%2#0) + let assigned_value%3#0: bytes = ((extract 7 1) val_as_bytes%3#0) + let updated_target%3#0: bytes = (replace3 arrays.0#0 1u assigned_value%3#0) + let arrays.0#0: bytes = updated_target%3#0 + goto 1u ? block@7 : block@8 + block@7: // if_body_L1 + let arrays.0%out#0: bytes = arrays.0#0 + goto block@8 + block@8: // after_if_else_L1 + let to_encode%3#0: uint64 = (+ start#0 4u) + let val_as_bytes%4#0: bytes = (itob to_encode%3#0) + let assigned_value%4#0: bytes = ((extract 7 1) val_as_bytes%4#0) + let updated_target%4#0: bytes = (replace3 arrays.1#0 1u assigned_value%4#0) + let arrays.1#0: bytes = updated_target%4#0 + goto 1u ? block@9 : block@10 + block@9: // if_body_L1 + let arrays.1%out#0: bytes = arrays.1#0 + goto block@10 + block@10: // after_if_else_L1 + let to_encode%4#0: uint64 = (+ start#0 5u) + let val_as_bytes%5#0: bytes = (itob to_encode%4#0) + let assigned_value%5#0: bytes = ((extract 7 1) val_as_bytes%5#0) + let updated_target%5#0: bytes = (replace3 arrays.2#0 1u assigned_value%5#0) + let arrays.2#0: bytes = updated_target%5#0 + goto 1u ? block@11 : block@12 + block@11: // if_body_L1 + let arrays.2%out#0: bytes = arrays.2#0 + goto block@12 + block@12: // after_if_else_L1 + let arrays.2%out#27: bytes = arrays.2%out#0 + let arrays.1%out#28: bytes = arrays.1%out#0 + let arrays.0%out#29: bytes = arrays.0%out#0 + let arrays.2#19: bytes = arrays.2#0 + let arrays.1#18: bytes = arrays.1#0 + let arrays.0#17: bytes = arrays.0#0 + goto reassign#0 ? block@13 : block@20 + block@13: // if_body_L148 + let copy%0#0: bytes = arrays.0#0 + let copy%1#0: bytes = arrays.1#0 + let copy%2#0: bytes = arrays.2#0 + let arrays.0%is_original#0: bool = 0u + let arrays.1%is_original#0: bool = 0u + let arrays.2%is_original#0: bool = 0u + let arrays.0#0: bytes = copy%0#0 + let arrays.1#0: bytes = copy%1#0 + let arrays.2#0: bytes = copy%2#0 + goto 0u ? block@14 : block@15 + block@14: // if_body_L1 + let arrays.0%out#0: bytes = arrays.0#0 + goto block@15 + block@15: // after_if_else_L1 + goto 0u ? block@16 : block@17 + block@16: // if_body_L1 + let arrays.1%out#0: bytes = arrays.1#0 + goto block@17 + block@17: // after_if_else_L1 + goto 0u ? block@18 : block@19 + block@18: // if_body_L1 + let arrays.2%out#0: bytes = arrays.2#0 + goto block@19 + block@19: // after_if_else_L1 + let arrays.2%out#27: bytes = arrays.2%out#0 + let arrays.1%out#28: bytes = arrays.1%out#0 + let arrays.0%out#29: bytes = arrays.0%out#0 + let arrays.2#19: bytes = arrays.2#0 + let arrays.1#18: bytes = arrays.1#0 + let arrays.0#17: bytes = arrays.0#0 + goto block@20 + block@20: // after_if_else_L147 + let arrays.2%out#0: bytes = arrays.2%out#27 + let arrays.1%out#0: bytes = arrays.1%out#28 + let arrays.0%out#0: bytes = arrays.0%out#29 + let arrays.2#0: bytes = arrays.2#19 + let arrays.1#0: bytes = arrays.1#18 + let arrays.0#0: bytes = arrays.0#17 + let to_encode%5#0: uint64 = (+ start#0 6u) + let val_as_bytes%6#0: bytes = (itob to_encode%5#0) + let assigned_value%6#0: bytes = ((extract 7 1) val_as_bytes%6#0) + let updated_target%6#0: bytes = (replace3 arrays.0#0 1u assigned_value%6#0) + let arrays.0#0: bytes = updated_target%6#0 + goto arrays.0%is_original#0 ? block@21 : block@22 + block@21: // if_body_L1 + let arrays.0%out#0: bytes = arrays.0#0 + goto block@22 + block@22: // after_if_else_L1 + let to_encode%6#0: uint64 = (+ start#0 7u) + let val_as_bytes%7#0: bytes = (itob to_encode%6#0) + let assigned_value%7#0: bytes = ((extract 7 1) val_as_bytes%7#0) + let updated_target%7#0: bytes = (replace3 arrays.1#0 1u assigned_value%7#0) + let arrays.1#0: bytes = updated_target%7#0 + goto arrays.1%is_original#0 ? block@23 : block@24 + block@23: // if_body_L1 + let arrays.1%out#0: bytes = arrays.1#0 + goto block@24 + block@24: // after_if_else_L1 + let to_encode%7#0: uint64 = (+ start#0 8u) + let val_as_bytes%8#0: bytes = (itob to_encode%7#0) + let assigned_value%8#0: bytes = ((extract 7 1) val_as_bytes%8#0) + let updated_target%8#0: bytes = (replace3 arrays.2#0 1u assigned_value%8#0) + let arrays.2#0: bytes = updated_target%8#0 + goto arrays.2%is_original#0 ? block@25 : block@26 + block@25: // if_body_L1 + let arrays.2%out#0: bytes = arrays.2#0 + goto block@26 + block@26: // after_if_else_L1 + let array_head_and_tail%3#0: bytes = arrays.0#0 + let item_offset%3#0: uint64 = (* 1u 1u) + let reinterpret_biguint%3#0: biguint = (extract3 array_head_and_tail%3#0 item_offset%3#0 1u) // on error: Index access is out of bounds + let tmp%8#0: uint64 = (+ start#0 6u) + let tmp%9#0: biguint = (itob tmp%8#0) + let tmp%10#0: bool = (b== reinterpret_biguint%3#0 tmp%9#0) + (assert tmp%10#0) + let array_head_and_tail%4#0: bytes = arrays.1#0 + let item_offset%4#0: uint64 = (* 1u 1u) + let reinterpret_biguint%4#0: biguint = (extract3 array_head_and_tail%4#0 item_offset%4#0 1u) // on error: Index access is out of bounds + let tmp%11#0: uint64 = (+ start#0 7u) + let tmp%12#0: biguint = (itob tmp%11#0) + let tmp%13#0: bool = (b== reinterpret_biguint%4#0 tmp%12#0) + (assert tmp%13#0) + let array_head_and_tail%5#0: bytes = arrays.2#0 + let item_offset%5#0: uint64 = (* 1u 1u) + let reinterpret_biguint%5#0: biguint = (extract3 array_head_and_tail%5#0 item_offset%5#0 1u) // on error: Index access is out of bounds + let tmp%14#0: uint64 = (+ start#0 8u) + let tmp%15#0: biguint = (itob tmp%14#0) + let tmp%16#0: bool = (b== reinterpret_biguint%5#0 tmp%15#0) + (assert tmp%16#0) + return arrays.0%out#0 arrays.1%out#0 arrays.2%out#0 program clear-state: subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program() -> bool: - block@0: // L111 + block@0: // L158 return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal index ab3c71ba12..faf4e54836 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal +++ b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.approval.teal @@ -265,9 +265,10 @@ check: // @subroutine // def check(flags: Flags) -> None: proto 1 1 + frame_dig -1 // arc4_types/structs.py:74 // assert flags.a.native - frame_dig -1 + dup intc_0 // 0 getbit bytec_1 // 0x00 @@ -315,7 +316,6 @@ check: getbit ! assert - frame_dig -1 retsub @@ -325,9 +325,10 @@ nested_decode: // @subroutine // def nested_decode(vector_flags: VectorFlags) -> None: proto 1 1 + frame_dig -1 // arc4_types/structs.py:82 // assert vector_flags.vector.x.bytes == op.itob(35382882839) - frame_dig -1 + dup intc_0 // 0 pushint 16 // 16 extract3 // on error: Index access is out of bounds @@ -353,5 +354,4 @@ nested_decode: intc_0 // 0 getbit assert - frame_dig -1 retsub diff --git a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir index b870eab381..73a60e77e1 100644 --- a/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir +++ b/test_cases/arc4_types/out_unoptimized/Arc4StructsTypeContract.destructured.ir @@ -107,6 +107,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: subroutine test_cases.arc4_types.structs.check(flags: bytes) -> bytes: block@0: // L72 + let flags%out#0: bytes = flags#0 let is_true%0#0: uint64 = (getbit flags#0 0u) let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%0#0: bool = (getbit encoded_bool%0#0 0u) @@ -125,10 +126,11 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let tmp%4#0: bool = (getbit encoded_bool%3#0 0u) let tmp%5#0: bool = (! tmp%4#0) (assert tmp%5#0) - return flags#0 + return flags%out#0 subroutine test_cases.arc4_types.structs.nested_decode(vector_flags: bytes) -> bytes: block@0: // L80 + let vector_flags%out#0: bytes = vector_flags#0 let tmp%0#0: bytes = (extract3 vector_flags#0 0u 16u) // on error: Index access is out of bounds let tmp%1#0: bytes = (extract3 tmp%0#0 0u 8u) // on error: Index access is out of bounds let tmp%2#0: bytes = (itob 35382882839u) @@ -139,7 +141,7 @@ contract test_cases.arc4_types.structs.Arc4StructsTypeContract: let encoded_bool%0#0: bytes = (setbit 0x00 0u is_true%0#0) let tmp%5#0: bool = (getbit encoded_bool%0#0 0u) (assert tmp%5#0) - return vector_flags#0 + return vector_flags%out#0 program clear-state: subroutine test_cases.arc4_types.structs.Arc4StructsTypeContract.clear_state_program() -> bool: diff --git a/test_cases/arc4_types/out_unoptimized/MutableParams2.approval.teal b/test_cases/arc4_types/out_unoptimized/MutableParams2.approval.teal new file mode 100644 index 0000000000..3df87a2107 --- /dev/null +++ b/test_cases/arc4_types/out_unoptimized/MutableParams2.approval.teal @@ -0,0 +1,278 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.approval_program: + intcblock 0 1 + bytecblock 0x 0x01 0x04 0x0003 0x0001 + callsub __puya_arc4_router__ + return + + +// test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> uint64: +__puya_arc4_router__: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + proto 0 1 + txn NumAppArgs + intc_0 // 0 + != + bz __puya_arc4_router___bare_routing@5 + txna ApplicationArgs 0 + pushbytes 0x6ac4a557 // method "test_array_rebinding()void" + swap + match __puya_arc4_router___test_array_rebinding_route@2 + b __puya_arc4_router___switch_case_default@3 + +__puya_arc4_router___test_array_rebinding_route@2: + // arc4_types/mutable_params2.py:5 + // @arc4.abimethod() + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is NoOp + txn ApplicationID + intc_0 // 0 + != + assert // is not creating + callsub test_array_rebinding + intc_1 // 1 + retsub + +__puya_arc4_router___switch_case_default@3: + b __puya_arc4_router___after_if_else@9 + +__puya_arc4_router___bare_routing@5: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + txn OnCompletion + intc_0 // 0 + swap + match __puya_arc4_router_____algopy_default_create@6 + b __puya_arc4_router___switch_case_default@7 + +__puya_arc4_router_____algopy_default_create@6: + txn ApplicationID + intc_0 // 0 + == + assert // is creating + callsub __algopy_default_create + intc_1 // 1 + retsub + +__puya_arc4_router___switch_case_default@7: + +__puya_arc4_router___after_if_else@9: + // arc4_types/mutable_params2.py:4 + // class MutableParams2(arc4.ARC4Contract): + intc_0 // 0 + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: +test_array_rebinding: + // arc4_types/mutable_params2.py:5-6 + // @arc4.abimethod() + // def test_array_rebinding(self) -> None: + proto 0 0 + // arc4_types/mutable_params2.py:7 + // a = arc4.DynamicBytes(0) + bytec_0 // 0x + pushbytes 0x00 + concat + bytec 4 // 0x0001 + swap + concat + // arc4_types/mutable_params2.py:8 + // self.maybe_modify_array(a, assign_local=True) + intc_1 // 1 + callsub maybe_modify_array + // arc4_types/mutable_params2.py:9 + // assert a == arc4.DynamicBytes(0, 1) + bytec_0 // 0x + pushbytes 0x00 + concat + bytec_1 // 0x01 + concat + pushbytes 0x0002 + swap + concat + == + assert + // arc4_types/mutable_params2.py:11 + // a = arc4.DynamicBytes(1) + bytec_0 // 0x + bytec_1 // 0x01 + concat + bytec 4 // 0x0001 + swap + concat + // arc4_types/mutable_params2.py:12 + // self.maybe_modify_array(a, assign_local=False) + intc_0 // 0 + callsub maybe_modify_array + // arc4_types/mutable_params2.py:13 + // assert a == arc4.DynamicBytes(1, 42, 4) + bytec_0 // 0x + bytec_1 // 0x01 + concat + pushbytes 0x2a + concat + bytec_2 // 0x04 + concat + bytec_3 // 0x0003 + swap + concat + == + assert + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: uint64) -> bytes: +maybe_modify_array: + // arc4_types/mutable_params2.py:15-16 + // @subroutine + // def maybe_modify_array(self, a: arc4.DynamicBytes, *, assign_local: bool) -> None: # v0 + proto 2 1 + intc_1 // 1 + frame_dig -2 + // arc4_types/mutable_params2.py:17 + // if assign_local: + frame_dig -1 + bz maybe_modify_array_else_body@10 + // arc4_types/mutable_params2.py:18 + // a.append(arc4.Byte(1)) # v1: modify out + frame_dig -2 + extract 2 0 + bytec_0 // 0x + bytec_1 // 0x01 + concat + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + intc_1 // 1 + bz maybe_modify_array_after_if_else@3 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@3: + // arc4_types/mutable_params2.py:19 + // a = arc4.DynamicBytes(1, 2, 3) # v2: BOUNDARY + bytec_0 // 0x + bytec_1 // 0x01 + concat + pushbytes 0x02 + concat + pushbytes 0x03 + concat + bytec_3 // 0x0003 + swap + concat + frame_bury -2 + intc_0 // 0 + bz maybe_modify_array_after_if_else@5 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@5: + // arc4_types/mutable_params2.py:20 + // a.append(arc4.Byte(4)) # v3: local only + frame_dig -2 + extract 2 0 + bytec_0 // 0x + bytec_2 // 0x04 + concat + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + intc_0 // 0 + bz maybe_modify_array_after_if_else@7 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@7: + // arc4_types/mutable_params2.py:21 + // a = arc4.DynamicBytes(1, 2, 4) # v4: local only + bytec_0 // 0x + bytec_1 // 0x01 + concat + pushbytes 0x02 + concat + bytec_2 // 0x04 + concat + bytec_3 // 0x0003 + swap + concat + intc_0 // 0 + frame_bury 0 + frame_bury -2 + intc_0 // 0 + bz maybe_modify_array_after_if_else@9 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@9: + b maybe_modify_array_after_if_else@13 + +maybe_modify_array_else_body@10: + // arc4_types/mutable_params2.py:23 + // a.append(arc4.Byte(42)) # v5: modify out + frame_dig -2 + extract 2 0 + bytec_0 // 0x + pushbytes 0x2a + concat + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + intc_1 // 1 + bz maybe_modify_array_after_if_else@12 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@12: + +maybe_modify_array_after_if_else@13: + // arc4_types/mutable_params2.py:25 + // a.append(arc4.Byte(4)) # v6: modify out IF not b ELSE local only + frame_dig -2 + extract 2 0 + bytec_0 // 0x + bytec_2 // 0x04 + concat + concat + dup + len + itob + extract 6 2 + swap + concat + frame_bury -2 + frame_dig 0 + bz maybe_modify_array_after_if_else@15 + frame_dig -2 + frame_bury 1 + +maybe_modify_array_after_if_else@15: + frame_dig 1 + frame_bury 0 + retsub + + +// test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create() -> void: +__algopy_default_create: + proto 0 0 + retsub diff --git a/test_cases/arc4_types/out_unoptimized/MutableParams2.clear.teal b/test_cases/arc4_types/out_unoptimized/MutableParams2.clear.teal new file mode 100644 index 0000000000..e138fea62e --- /dev/null +++ b/test_cases/arc4_types/out_unoptimized/MutableParams2.clear.teal @@ -0,0 +1,5 @@ +#pragma version 10 + +test_cases.arc4_types.mutable_params2.MutableParams2.clear_state_program: + pushint 1 // 1 + return diff --git a/test_cases/arc4_types/out_unoptimized/MutableParams2.destructured.ir b/test_cases/arc4_types/out_unoptimized/MutableParams2.destructured.ir new file mode 100644 index 0000000000..d9f9171777 --- /dev/null +++ b/test_cases/arc4_types/out_unoptimized/MutableParams2.destructured.ir @@ -0,0 +1,162 @@ +contract test_cases.arc4_types.mutable_params2.MutableParams2: + program approval: + subroutine algopy.arc4.ARC4Contract.approval_program() -> bool: + block@0: // L1 + let tmp%0#0: bool = test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() + return tmp%0#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__() -> bool: + block@0: // L4 + let tmp%0#0: uint64 = (txn NumAppArgs) + let tmp%1#0: bool = (!= tmp%0#0 0u) + goto tmp%1#0 ? block@1 : block@5 + block@1: // abi_routing_L4 + let tmp%2#0: bytes = (txna ApplicationArgs 0) + switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@3} + block@2: // test_array_rebinding_route_L5 + let tmp%3#0: uint64 = (txn OnCompletion) + let tmp%4#0: bool = (== tmp%3#0 NoOp) + (assert tmp%4#0) // OnCompletion is NoOp + let tmp%5#0: uint64 = (txn ApplicationID) + let tmp%6#0: bool = (!= tmp%5#0 0u) + (assert tmp%6#0) // is not creating + test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() + return 1u + block@3: // switch_case_default_L4 + goto block@4 + block@4: // switch_case_next_L4 + goto block@9 + block@5: // bare_routing_L4 + let tmp%7#0: uint64 = (txn OnCompletion) + switch tmp%7#0 {0u => block@6, * => block@7} + block@6: // __algopy_default_create_L1 + let tmp%8#0: uint64 = (txn ApplicationID) + let tmp%9#0: bool = (== tmp%8#0 0u) + (assert tmp%9#0) // is creating + test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create() + return 1u + block@7: // switch_case_default_L4 + goto block@8 + block@8: // switch_case_next_L4 + goto block@9 + block@9: // after_if_else_L4 + return 0u + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding() -> void: + block@0: // L5 + let result%0#0: bytes = (concat 0x 0x00) + let array_data%0#0: bytes = (concat 0x0001 result%0#0) + let a#0: bytes = array_data%0#0 + let maybe_modify_array%0#0: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#0, 1u) + let a#0: bytes = maybe_modify_array%0#0 + let result%1#0: bytes = (concat 0x 0x00) + let result%2#0: bytes = (concat result%1#0 0x01) + let array_data%1#0: bytes = (concat 0x0002 result%2#0) + let tmp%0#0: bool = (== a#0 array_data%1#0) + (assert tmp%0#0) + let result%3#0: bytes = (concat 0x 0x01) + let array_data%2#0: bytes = (concat 0x0001 result%3#0) + let a#0: bytes = array_data%2#0 + let maybe_modify_array%1#0: bytes = test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a#0, 0u) + let a#0: bytes = maybe_modify_array%1#0 + let result%4#0: bytes = (concat 0x 0x01) + let result%5#0: bytes = (concat result%4#0 0x2a) + let result%6#0: bytes = (concat result%5#0 0x04) + let array_data%3#0: bytes = (concat 0x0003 result%6#0) + let tmp%1#0: bool = (== a#0 array_data%3#0) + (assert tmp%1#0) + return + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array(a: bytes, assign_local: bool) -> bytes: + block@0: // L15 + let a%is_original#0: bool = 1u + let a%out#0: bytes = a#0 + goto assign_local#0 ? block@1 : block@10 + block@1: // if_body_L18 + let expr_value_trimmed%0#0: bytes = ((extract 2 0) a#0) + let data%0#0: bytes = (concat 0x 0x01) + let concatenated%0#0: bytes = (concat expr_value_trimmed%0#0 data%0#0) + let len_%0#0: uint64 = (len concatenated%0#0) + let as_bytes%0#0: bytes = (itob len_%0#0) + let len_16_bit%0#0: bytes = ((extract 6 2) as_bytes%0#0) + let concat_result%0#0: bytes = (concat len_16_bit%0#0 concatenated%0#0) + let a#0: bytes = concat_result%0#0 + goto 1u ? block@2 : block@3 + block@2: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@3 + block@3: // after_if_else_L1 + let result%0#0: bytes = (concat 0x 0x01) + let result%1#0: bytes = (concat result%0#0 0x02) + let result%2#0: bytes = (concat result%1#0 0x03) + let array_data%0#0: bytes = (concat 0x0003 result%2#0) + let a#0: bytes = array_data%0#0 + goto 0u ? block@4 : block@5 + block@4: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@5 + block@5: // after_if_else_L1 + let expr_value_trimmed%1#0: bytes = ((extract 2 0) a#0) + let data%1#0: bytes = (concat 0x 0x04) + let concatenated%1#0: bytes = (concat expr_value_trimmed%1#0 data%1#0) + let len_%1#0: uint64 = (len concatenated%1#0) + let as_bytes%1#0: bytes = (itob len_%1#0) + let len_16_bit%1#0: bytes = ((extract 6 2) as_bytes%1#0) + let concat_result%1#0: bytes = (concat len_16_bit%1#0 concatenated%1#0) + let a#0: bytes = concat_result%1#0 + goto 0u ? block@6 : block@7 + block@6: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@7 + block@7: // after_if_else_L1 + let result%3#0: bytes = (concat 0x 0x01) + let result%4#0: bytes = (concat result%3#0 0x02) + let result%5#0: bytes = (concat result%4#0 0x04) + let array_data%1#0: bytes = (concat 0x0003 result%5#0) + let a%is_original#0: bool = 0u + let a#0: bytes = array_data%1#0 + goto 0u ? block@8 : block@9 + block@8: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@9 + block@9: // after_if_else_L1 + goto block@13 + block@10: // else_body_L23 + let expr_value_trimmed%2#0: bytes = ((extract 2 0) a#0) + let data%2#0: bytes = (concat 0x 0x2a) + let concatenated%2#0: bytes = (concat expr_value_trimmed%2#0 data%2#0) + let len_%2#0: uint64 = (len concatenated%2#0) + let as_bytes%2#0: bytes = (itob len_%2#0) + let len_16_bit%2#0: bytes = ((extract 6 2) as_bytes%2#0) + let concat_result%2#0: bytes = (concat len_16_bit%2#0 concatenated%2#0) + let a#0: bytes = concat_result%2#0 + goto 1u ? block@11 : block@12 + block@11: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@12 + block@12: // after_if_else_L1 + goto block@13 + block@13: // after_if_else_L17 + let expr_value_trimmed%3#0: bytes = ((extract 2 0) a#0) + let data%3#0: bytes = (concat 0x 0x04) + let concatenated%3#0: bytes = (concat expr_value_trimmed%3#0 data%3#0) + let len_%3#0: uint64 = (len concatenated%3#0) + let as_bytes%3#0: bytes = (itob len_%3#0) + let len_16_bit%3#0: bytes = ((extract 6 2) as_bytes%3#0) + let concat_result%3#0: bytes = (concat len_16_bit%3#0 concatenated%3#0) + let a#0: bytes = concat_result%3#0 + goto a%is_original#0 ? block@14 : block@15 + block@14: // if_body_L1 + let a%out#0: bytes = a#0 + goto block@15 + block@15: // after_if_else_L1 + return a%out#0 + + subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create() -> void: + block@0: // L1 + return + + program clear-state: + subroutine algopy.arc4.ARC4Contract.clear_state_program() -> bool: + block@0: // L1 + return 1u \ No newline at end of file diff --git a/test_cases/arc4_types/puya.log b/test_cases/arc4_types/puya.log index 570b904069..870b42f462 100644 --- a/test_cases/arc4_types/puya.log +++ b/test_cases/arc4_types/puya.log @@ -2,7 +2,7 @@ debug: PuyaPyOptions(output_teal=True, output_source_map=True, output_arc32=True info: Found python prefix: /.venv arc4_types/mutable_params.py:63:9 warning: expression result is ignored arc4_types/mutable_params.py:79:9 warning: expression result is ignored -arc4_types/mutable_params.py:87:9 warning: expression result is ignored +arc4_types/mutable_params.py:116:9 warning: expression result is ignored arc4_types/bool.py:13:9 warning: expression result is ignored arc4_types/array.py:71:9 warning: expression result is ignored info: writing arc4_types/out/module.awst @@ -648,6 +648,129 @@ debug: Sealing block@0: // L34 debug: Terminated block@0: // L34 debug: Sealing block@0: // L45 debug: Terminated block@0: // L45 +debug: Sealing block@0: // L4 +debug: Terminated block@0: // L4 +debug: Sealing block@1: // abi_routing_L4 +debug: Terminated block@1: // abi_routing_L4 +debug: Sealing block@2: // test_array_rebinding_route_L5 +debug: Terminated block@2: // test_array_rebinding_route_L5 +debug: Sealing block@3: // switch_case_default_L4 +debug: Terminated block@3: // switch_case_default_L4 +debug: Sealing block@4: // switch_case_next_L4 +debug: Terminated block@4: // switch_case_next_L4 +debug: Sealing block@5: // bare_routing_L4 +debug: Terminated block@5: // bare_routing_L4 +debug: Sealing block@6: // __algopy_default_create_L1 +debug: Terminated block@6: // __algopy_default_create_L1 +debug: Sealing block@7: // switch_case_default_L4 +debug: Terminated block@7: // switch_case_default_L4 +debug: Sealing block@8: // switch_case_next_L4 +debug: Terminated block@8: // switch_case_next_L4 +debug: Sealing block@9: // after_if_else_L4 +debug: Terminated block@9: // after_if_else_L4 +debug: Sealing block@0: // L5 +debug: Terminated block@0: // L5 +debug: Sealing block@0: // L15 +debug: Terminated block@0: // L15 +debug: Sealing block@1: // if_body_L18 +debug: Terminated block@1: // if_body_L18 +debug: Sealing block@2: // if_body_L1 +debug: Terminated block@2: // if_body_L1 +debug: Sealing block@3: // after_if_else_L1 +debug: Terminated block@3: // after_if_else_L1 +debug: Sealing block@4: // if_body_L1 +debug: Terminated block@4: // if_body_L1 +debug: Sealing block@5: // after_if_else_L1 +debug: Created Phi assignment: let a#3: bytes = undefined while trying to resolve 'a' in block@5: // after_if_else_L1 +debug: Added a#2 to Phi node: let a#3: bytes = φ(a#2 <- block@3) in block@3: // after_if_else_L1 +debug: Added a#2 to Phi node: let a#3: bytes = φ(a#2 <- block@3, a#2 <- block@4) in block@4: // if_body_L1 +debug: Replacing trivial Phi node: let a#3: bytes = φ(a#2 <- block@3, a#2 <- block@4) (a#3) with a#2 +debug: Deleting Phi assignment: let a#3: bytes = φ(a#2 <- block@3, a#2 <- block@4) +debug: Replaced trivial Phi node: let a#3: bytes = φ(a#2 <- block@3, a#2 <- block@4) (a#3) with a#2 in current definition for 1 blocks +debug: Created Phi assignment: let a%is_original#2: bool = undefined while trying to resolve 'a%is_original' in block@5: // after_if_else_L1 +debug: Added a%is_original#1 to Phi node: let a%is_original#2: bool = φ(a%is_original#1 <- block@3) in block@3: // after_if_else_L1 +debug: Added a%is_original#1 to Phi node: let a%is_original#2: bool = φ(a%is_original#1 <- block@3, a%is_original#1 <- block@4) in block@4: // if_body_L1 +debug: Replacing trivial Phi node: let a%is_original#2: bool = φ(a%is_original#1 <- block@3, a%is_original#1 <- block@4) (a%is_original#2) with a%is_original#1 +debug: Deleting Phi assignment: let a%is_original#2: bool = φ(a%is_original#1 <- block@3, a%is_original#1 <- block@4) +debug: Replaced trivial Phi node: let a%is_original#2: bool = φ(a%is_original#1 <- block@3, a%is_original#1 <- block@4) (a%is_original#2) with a%is_original#1 in current definition for 1 blocks +debug: Terminated block@5: // after_if_else_L1 +debug: Sealing block@6: // if_body_L1 +debug: Terminated block@6: // if_body_L1 +debug: Sealing block@7: // after_if_else_L1 +debug: Terminated block@7: // after_if_else_L1 +debug: Sealing block@8: // if_body_L1 +debug: Terminated block@8: // if_body_L1 +debug: Sealing block@9: // after_if_else_L1 +debug: Terminated block@9: // after_if_else_L1 +debug: Sealing block@10: // else_body_L23 +debug: Terminated block@10: // else_body_L23 +debug: Sealing block@11: // if_body_L1 +debug: Terminated block@11: // if_body_L1 +debug: Sealing block@12: // after_if_else_L1 +debug: Terminated block@12: // after_if_else_L1 +debug: Sealing block@13: // after_if_else_L17 +debug: Created Phi assignment: let a#7: bytes = undefined while trying to resolve 'a' in block@13: // after_if_else_L17 +debug: Created Phi assignment: let a#8: bytes = undefined while trying to resolve 'a' in block@9: // after_if_else_L1 +debug: Added a#5 to Phi node: let a#8: bytes = φ(a#5 <- block@7) in block@7: // after_if_else_L1 +debug: Added a#5 to Phi node: let a#8: bytes = φ(a#5 <- block@7, a#5 <- block@8) in block@8: // if_body_L1 +debug: Replacing trivial Phi node: let a#8: bytes = φ(a#5 <- block@7, a#5 <- block@8) (a#8) with a#5 +debug: Deleting Phi assignment: let a#8: bytes = φ(a#5 <- block@7, a#5 <- block@8) +debug: Replaced trivial Phi node: let a#8: bytes = φ(a#5 <- block@7, a#5 <- block@8) (a#8) with a#5 in current definition for 1 blocks +debug: Added a#5 to Phi node: let a#7: bytes = φ(a#5 <- block@9) in block@9: // after_if_else_L1 +debug: Created Phi assignment: let a#9: bytes = undefined while trying to resolve 'a' in block@12: // after_if_else_L1 +debug: Added a#6 to Phi node: let a#9: bytes = φ(a#6 <- block@10) in block@10: // else_body_L23 +debug: Added a#6 to Phi node: let a#9: bytes = φ(a#6 <- block@10, a#6 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let a#9: bytes = φ(a#6 <- block@10, a#6 <- block@11) (a#9) with a#6 +debug: Deleting Phi assignment: let a#9: bytes = φ(a#6 <- block@10, a#6 <- block@11) +debug: Replaced trivial Phi node: let a#9: bytes = φ(a#6 <- block@10, a#6 <- block@11) (a#9) with a#6 in current definition for 1 blocks +debug: Added a#6 to Phi node: let a#7: bytes = φ(a#5 <- block@9, a#6 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let a%is_original#4: bool = undefined while trying to resolve 'a%is_original' in block@13: // after_if_else_L17 +debug: Created Phi assignment: let a%is_original#5: bool = undefined while trying to resolve 'a%is_original' in block@9: // after_if_else_L1 +debug: Added a%is_original#3 to Phi node: let a%is_original#5: bool = φ(a%is_original#3 <- block@7) in block@7: // after_if_else_L1 +debug: Added a%is_original#3 to Phi node: let a%is_original#5: bool = φ(a%is_original#3 <- block@7, a%is_original#3 <- block@8) in block@8: // if_body_L1 +debug: Replacing trivial Phi node: let a%is_original#5: bool = φ(a%is_original#3 <- block@7, a%is_original#3 <- block@8) (a%is_original#5) with a%is_original#3 +debug: Deleting Phi assignment: let a%is_original#5: bool = φ(a%is_original#3 <- block@7, a%is_original#3 <- block@8) +debug: Replaced trivial Phi node: let a%is_original#5: bool = φ(a%is_original#3 <- block@7, a%is_original#3 <- block@8) (a%is_original#5) with a%is_original#3 in current definition for 1 blocks +debug: Added a%is_original#3 to Phi node: let a%is_original#4: bool = φ(a%is_original#3 <- block@9) in block@9: // after_if_else_L1 +debug: Created Phi assignment: let a%is_original#6: bool = undefined while trying to resolve 'a%is_original' in block@12: // after_if_else_L1 +debug: Added a%is_original#0 to Phi node: let a%is_original#6: bool = φ(a%is_original#0 <- block@10) in block@10: // else_body_L23 +debug: Added a%is_original#0 to Phi node: let a%is_original#6: bool = φ(a%is_original#0 <- block@10, a%is_original#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let a%is_original#6: bool = φ(a%is_original#0 <- block@10, a%is_original#0 <- block@11) (a%is_original#6) with a%is_original#0 +debug: Deleting Phi assignment: let a%is_original#6: bool = φ(a%is_original#0 <- block@10, a%is_original#0 <- block@11) +debug: Replaced trivial Phi node: let a%is_original#6: bool = φ(a%is_original#0 <- block@10, a%is_original#0 <- block@11) (a%is_original#6) with a%is_original#0 in current definition for 1 blocks +debug: Added a%is_original#0 to Phi node: let a%is_original#4: bool = φ(a%is_original#3 <- block@9, a%is_original#0 <- block@12) in block@12: // after_if_else_L1 +debug: Terminated block@13: // after_if_else_L17 +debug: Sealing block@14: // if_body_L1 +debug: Terminated block@14: // if_body_L1 +debug: Sealing block@15: // after_if_else_L1 +debug: Created Phi assignment: let a%out#7: bytes = undefined while trying to resolve 'a%out' in block@15: // after_if_else_L1 +debug: Created Phi assignment: let a%out#8: bytes = undefined while trying to resolve 'a%out' in block@13: // after_if_else_L17 +debug: Created Phi assignment: let a%out#9: bytes = undefined while trying to resolve 'a%out' in block@9: // after_if_else_L1 +debug: Created Phi assignment: let a%out#10: bytes = undefined while trying to resolve 'a%out' in block@7: // after_if_else_L1 +debug: Created Phi assignment: let a%out#11: bytes = undefined while trying to resolve 'a%out' in block@5: // after_if_else_L1 +debug: Created Phi assignment: let a%out#12: bytes = undefined while trying to resolve 'a%out' in block@3: // after_if_else_L1 +debug: Added a%out#0 to Phi node: let a%out#12: bytes = φ(a%out#0 <- block@1) in block@1: // if_body_L18 +debug: Added a%out#1 to Phi node: let a%out#12: bytes = φ(a%out#0 <- block@1, a%out#1 <- block@2) in block@2: // if_body_L1 +debug: Added a%out#12 to Phi node: let a%out#11: bytes = φ(a%out#12 <- block@3) in block@3: // after_if_else_L1 +debug: Added a%out#2 to Phi node: let a%out#11: bytes = φ(a%out#12 <- block@3, a%out#2 <- block@4) in block@4: // if_body_L1 +debug: Added a%out#11 to Phi node: let a%out#10: bytes = φ(a%out#11 <- block@5) in block@5: // after_if_else_L1 +debug: Added a%out#3 to Phi node: let a%out#10: bytes = φ(a%out#11 <- block@5, a%out#3 <- block@6) in block@6: // if_body_L1 +debug: Added a%out#10 to Phi node: let a%out#9: bytes = φ(a%out#10 <- block@7) in block@7: // after_if_else_L1 +debug: Added a%out#4 to Phi node: let a%out#9: bytes = φ(a%out#10 <- block@7, a%out#4 <- block@8) in block@8: // if_body_L1 +debug: Added a%out#9 to Phi node: let a%out#8: bytes = φ(a%out#9 <- block@9) in block@9: // after_if_else_L1 +debug: Created Phi assignment: let a%out#13: bytes = undefined while trying to resolve 'a%out' in block@12: // after_if_else_L1 +debug: Added a%out#0 to Phi node: let a%out#13: bytes = φ(a%out#0 <- block@10) in block@10: // else_body_L23 +debug: Added a%out#5 to Phi node: let a%out#13: bytes = φ(a%out#0 <- block@10, a%out#5 <- block@11) in block@11: // if_body_L1 +debug: Added a%out#13 to Phi node: let a%out#8: bytes = φ(a%out#9 <- block@9, a%out#13 <- block@12) in block@12: // after_if_else_L1 +debug: Added a%out#8 to Phi node: let a%out#7: bytes = φ(a%out#8 <- block@13) in block@13: // after_if_else_L17 +debug: Added a%out#6 to Phi node: let a%out#7: bytes = φ(a%out#8 <- block@13, a%out#6 <- block@14) in block@14: // if_body_L1 +debug: Terminated block@15: // after_if_else_L1 +debug: Sealing block@0: // L1 +debug: Terminated block@0: // L1 +debug: Sealing block@0: // L1 +debug: Terminated block@0: // L1 +debug: Sealing block@0: // L1 +debug: Terminated block@0: // L1 debug: Sealing block@0: // L27 debug: Terminated block@0: // L27 debug: Sealing block@1: // abi_routing_L27 @@ -658,57 +781,839 @@ debug: Sealing block@3: // after_if_else_L27 debug: Terminated block@3: // after_if_else_L27 debug: Sealing block@0: // L33 debug: Terminated block@0: // L33 -debug: Sealing block@0: // L89 -debug: Terminated block@0: // L89 -debug: Sealing block@0: // L95 -debug: Terminated block@0: // L95 -debug: Sealing block@0: // L101 -debug: Terminated block@0: // L101 -debug: Looking for 'loop_counter%0' in an unsealed block creating an incomplete Phi: block@1: // for_body_L105 -debug: Created Phi assignment: let loop_counter%0#1: uint64 = undefined while trying to resolve 'loop_counter%0' in block@1: // for_body_L105 -debug: Looking for 'array' in an unsealed block creating an incomplete Phi: block@1: // for_body_L105 -debug: Created Phi assignment: let array#1: bytes = undefined while trying to resolve 'array' in block@1: // for_body_L105 -debug: Terminated block@1: // for_body_L105 -debug: Sealing block@2: // for_footer_L104 -debug: Terminated block@2: // for_footer_L104 -debug: Sealing block@3: // for_header_1_L104 -debug: Terminated block@3: // for_header_1_L104 -debug: Sealing block@4: // for_header_2_L104 -debug: Terminated block@4: // for_header_2_L104 -debug: Sealing block@1: // for_body_L105 -debug: Added loop_counter%0#0 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0) in block@0: // L101 -debug: Added loop_counter%0#2 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3) in block@3: // for_header_1_L104 -debug: Added loop_counter%0#3 to Phi node: let loop_counter%0#1: uint64 = φ(loop_counter%0#0 <- block@0, loop_counter%0#2 <- block@3, loop_counter%0#3 <- block@4) in block@4: // for_header_2_L104 -debug: Added array#0 to Phi node: let array#1: bytes = φ(array#0 <- block@0) in block@0: // L101 -debug: Added array#3 to Phi node: let array#1: bytes = φ(array#0 <- block@0, array#3 <- block@3) in block@3: // for_header_1_L104 -debug: Added array#4 to Phi node: let array#1: bytes = φ(array#0 <- block@0, array#3 <- block@3, array#4 <- block@4) in block@4: // for_header_2_L104 -debug: Sealing block@5: // after_for_L104 -debug: Created Phi assignment: let arrays.0#1: bytes = undefined while trying to resolve 'arrays.0' in block@1: // for_body_L105 -debug: Added arrays.0#0 to Phi node: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0) in block@0: // L101 -debug: Added arrays.0#1 to Phi node: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0, arrays.0#1 <- block@3) in block@3: // for_header_1_L104 -debug: Added arrays.0#1 to Phi node: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0, arrays.0#1 <- block@3, arrays.0#1 <- block@4) in block@4: // for_header_2_L104 -debug: Replacing trivial Phi node: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0, arrays.0#1 <- block@3, arrays.0#1 <- block@4) (arrays.0#1) with arrays.0#0 -debug: Deleting Phi assignment: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0, arrays.0#1 <- block@3, arrays.0#1 <- block@4) -debug: Replaced trivial Phi node: let arrays.0#1: bytes = φ(arrays.0#0 <- block@0, arrays.0#1 <- block@3, arrays.0#1 <- block@4) (arrays.0#1) with arrays.0#0 in current definition for 4 blocks -debug: Created Phi assignment: let arrays.1#1: bytes = undefined while trying to resolve 'arrays.1' in block@1: // for_body_L105 -debug: Added arrays.1#0 to Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0) in block@0: // L101 -debug: Added arrays.1#1 to Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#1 <- block@3) in block@3: // for_header_1_L104 -debug: Added arrays.1#1 to Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#1 <- block@3, arrays.1#1 <- block@4) in block@4: // for_header_2_L104 -debug: Replacing trivial Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#1 <- block@3, arrays.1#1 <- block@4) (arrays.1#1) with arrays.1#0 -debug: Deleting Phi assignment: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#1 <- block@3, arrays.1#1 <- block@4) -debug: Replaced trivial Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#1 <- block@3, arrays.1#1 <- block@4) (arrays.1#1) with arrays.1#0 in current definition for 4 blocks -debug: Created Phi assignment: let arrays.2#1: bytes = undefined while trying to resolve 'arrays.2' in block@1: // for_body_L105 -debug: Added arrays.2#0 to Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0) in block@0: // L101 -debug: Added arrays.2#1 to Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#1 <- block@3) in block@3: // for_header_1_L104 -debug: Added arrays.2#1 to Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#1 <- block@3, arrays.2#1 <- block@4) in block@4: // for_header_2_L104 -debug: Replacing trivial Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#1 <- block@3, arrays.2#1 <- block@4) (arrays.2#1) with arrays.2#0 -debug: Deleting Phi assignment: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#1 <- block@3, arrays.2#1 <- block@4) -debug: Replaced trivial Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#1 <- block@3, arrays.2#1 <- block@4) (arrays.2#1) with arrays.2#0 in current definition for 4 blocks -debug: Terminated block@5: // after_for_L104 +debug: Sealing block@0: // L118 +debug: Terminated block@0: // L118 +debug: Sealing block@1: // if_body_L1 +debug: Terminated block@1: // if_body_L1 +debug: Sealing block@2: // after_if_else_L1 +debug: Created Phi assignment: let struct#1: bytes = undefined while trying to resolve 'struct' in block@2: // after_if_else_L1 +debug: Added struct#0 to Phi node: let struct#1: bytes = φ(struct#0 <- block@0) in block@0: // L118 +debug: Added struct#0 to Phi node: let struct#1: bytes = φ(struct#0 <- block@0, struct#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let struct#1: bytes = φ(struct#0 <- block@0, struct#0 <- block@1) (struct#1) with struct#0 +debug: Deleting Phi assignment: let struct#1: bytes = φ(struct#0 <- block@0, struct#0 <- block@1) +debug: Replaced trivial Phi node: let struct#1: bytes = φ(struct#0 <- block@0, struct#0 <- block@1) (struct#1) with struct#0 in current definition for 1 blocks +debug: Created Phi assignment: let struct%is_original#1: bool = undefined while trying to resolve 'struct%is_original' in block@2: // after_if_else_L1 +debug: Added struct%is_original#0 to Phi node: let struct%is_original#1: bool = φ(struct%is_original#0 <- block@0) in block@0: // L118 +debug: Added struct%is_original#0 to Phi node: let struct%is_original#1: bool = φ(struct%is_original#0 <- block@0, struct%is_original#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let struct%is_original#1: bool = φ(struct%is_original#0 <- block@0, struct%is_original#0 <- block@1) (struct%is_original#1) with struct%is_original#0 +debug: Deleting Phi assignment: let struct%is_original#1: bool = φ(struct%is_original#0 <- block@0, struct%is_original#0 <- block@1) +debug: Replaced trivial Phi node: let struct%is_original#1: bool = φ(struct%is_original#0 <- block@0, struct%is_original#0 <- block@1) (struct%is_original#1) with struct%is_original#0 in current definition for 1 blocks +debug: Terminated block@2: // after_if_else_L1 +debug: Sealing block@3: // if_body_L1 +debug: Terminated block@3: // if_body_L1 +debug: Sealing block@4: // after_if_else_L1 +debug: Created Phi assignment: let array#2: bytes = undefined while trying to resolve 'array' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let array#3: bytes = undefined while trying to resolve 'array' in block@2: // after_if_else_L1 +debug: Added array#1 to Phi node: let array#3: bytes = φ(array#1 <- block@0) in block@0: // L118 +debug: Added array#1 to Phi node: let array#3: bytes = φ(array#1 <- block@0, array#1 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let array#3: bytes = φ(array#1 <- block@0, array#1 <- block@1) (array#3) with array#1 +debug: Deleting Phi assignment: let array#3: bytes = φ(array#1 <- block@0, array#1 <- block@1) +debug: Replaced trivial Phi node: let array#3: bytes = φ(array#1 <- block@0, array#1 <- block@1) (array#3) with array#1 in current definition for 1 blocks +debug: Added array#1 to Phi node: let array#2: bytes = φ(array#1 <- block@2) in block@2: // after_if_else_L1 +debug: Added array#1 to Phi node: let array#2: bytes = φ(array#1 <- block@2, array#1 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let array#2: bytes = φ(array#1 <- block@2, array#1 <- block@3) (array#2) with array#1 +debug: Deleting Phi assignment: let array#2: bytes = φ(array#1 <- block@2, array#1 <- block@3) +debug: Replaced trivial Phi node: let array#2: bytes = φ(array#1 <- block@2, array#1 <- block@3) (array#2) with array#1 in current definition for 1 blocks +debug: Created Phi assignment: let struct#3: bytes = undefined while trying to resolve 'struct' in block@4: // after_if_else_L1 +debug: Added struct#2 to Phi node: let struct#3: bytes = φ(struct#2 <- block@2) in block@2: // after_if_else_L1 +debug: Added struct#2 to Phi node: let struct#3: bytes = φ(struct#2 <- block@2, struct#2 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let struct#3: bytes = φ(struct#2 <- block@2, struct#2 <- block@3) (struct#3) with struct#2 +debug: Deleting Phi assignment: let struct#3: bytes = φ(struct#2 <- block@2, struct#2 <- block@3) +debug: Replaced trivial Phi node: let struct#3: bytes = φ(struct#2 <- block@2, struct#2 <- block@3) (struct#3) with struct#2 in current definition for 1 blocks +debug: Terminated block@4: // after_if_else_L1 +debug: Sealing block@0: // L124 +debug: Terminated block@0: // L124 +debug: Sealing block@1: // if_body_L1 +debug: Terminated block@1: // if_body_L1 +debug: Sealing block@2: // after_if_else_L1 +debug: Created Phi assignment: let copy#1: bytes = undefined while trying to resolve 'copy' in block@2: // after_if_else_L1 +debug: Added copy#0 to Phi node: let copy#1: bytes = φ(copy#0 <- block@0) in block@0: // L124 +debug: Added copy#0 to Phi node: let copy#1: bytes = φ(copy#0 <- block@0, copy#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let copy#1: bytes = φ(copy#0 <- block@0, copy#0 <- block@1) (copy#1) with copy#0 +debug: Deleting Phi assignment: let copy#1: bytes = φ(copy#0 <- block@0, copy#0 <- block@1) +debug: Replaced trivial Phi node: let copy#1: bytes = φ(copy#0 <- block@0, copy#0 <- block@1) (copy#1) with copy#0 in current definition for 1 blocks +debug: Created Phi assignment: let array#2: bytes = undefined while trying to resolve 'array' in block@2: // after_if_else_L1 +debug: Added array#1 to Phi node: let array#2: bytes = φ(array#1 <- block@0) in block@0: // L124 +debug: Added array#1 to Phi node: let array#2: bytes = φ(array#1 <- block@0, array#1 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let array#2: bytes = φ(array#1 <- block@0, array#1 <- block@1) (array#2) with array#1 +debug: Deleting Phi assignment: let array#2: bytes = φ(array#1 <- block@0, array#1 <- block@1) +debug: Replaced trivial Phi node: let array#2: bytes = φ(array#1 <- block@0, array#1 <- block@1) (array#2) with array#1 in current definition for 1 blocks +debug: Terminated block@2: // after_if_else_L1 +debug: Sealing block@0: // L130 +debug: Terminated block@0: // L130 +debug: Sealing block@1: // if_body_L1 +debug: Terminated block@1: // if_body_L1 +debug: Sealing block@2: // after_if_else_L1 +debug: Created Phi assignment: let start#1: uint64 = undefined while trying to resolve 'start' in block@2: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#1: uint64 = φ(start#0 <- block@0) in block@0: // L130 +debug: Added start#0 to Phi node: let start#1: uint64 = φ(start#0 <- block@0, start#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let start#1: uint64 = φ(start#0 <- block@0, start#0 <- block@1) (start#1) with start#0 +debug: Deleting Phi assignment: let start#1: uint64 = φ(start#0 <- block@0, start#0 <- block@1) +debug: Replaced trivial Phi node: let start#1: uint64 = φ(start#0 <- block@0, start#0 <- block@1) (start#1) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#2: bytes = undefined while trying to resolve 'arrays.0' in block@2: // after_if_else_L1 +debug: Added arrays.0#1 to Phi node: let arrays.0#2: bytes = φ(arrays.0#1 <- block@0) in block@0: // L130 +debug: Added arrays.0#1 to Phi node: let arrays.0#2: bytes = φ(arrays.0#1 <- block@0, arrays.0#1 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#2: bytes = φ(arrays.0#1 <- block@0, arrays.0#1 <- block@1) (arrays.0#2) with arrays.0#1 +debug: Deleting Phi assignment: let arrays.0#2: bytes = φ(arrays.0#1 <- block@0, arrays.0#1 <- block@1) +debug: Replaced trivial Phi node: let arrays.0#2: bytes = φ(arrays.0#1 <- block@0, arrays.0#1 <- block@1) (arrays.0#2) with arrays.0#1 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#1: bytes = undefined while trying to resolve 'arrays.1' in block@2: // after_if_else_L1 +debug: Added arrays.1#0 to Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0) in block@0: // L130 +debug: Added arrays.1#0 to Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#0 <- block@1) (arrays.1#1) with arrays.1#0 +debug: Deleting Phi assignment: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.1#1: bytes = φ(arrays.1#0 <- block@0, arrays.1#0 <- block@1) (arrays.1#1) with arrays.1#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#1: bytes = undefined while trying to resolve 'arrays.2' in block@2: // after_if_else_L1 +debug: Added arrays.2#0 to Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0) in block@0: // L130 +debug: Added arrays.2#0 to Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#0 <- block@1) (arrays.2#1) with arrays.2#0 +debug: Deleting Phi assignment: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.2#1: bytes = φ(arrays.2#0 <- block@0, arrays.2#0 <- block@1) (arrays.2#1) with arrays.2#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1%is_original#1: bool = undefined while trying to resolve 'arrays.1%is_original' in block@2: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#1: bool = φ(arrays.1%is_original#0 <- block@0) in block@0: // L130 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#1: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#1: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#0 <- block@1) (arrays.1%is_original#1) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#1: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.1%is_original#1: bool = φ(arrays.1%is_original#0 <- block@0, arrays.1%is_original#0 <- block@1) (arrays.1%is_original#1) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Terminated block@2: // after_if_else_L1 +debug: Sealing block@3: // if_body_L1 +debug: Terminated block@3: // if_body_L1 +debug: Sealing block@4: // after_if_else_L1 +debug: Created Phi assignment: let start#2: uint64 = undefined while trying to resolve 'start' in block@4: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#2: uint64 = φ(start#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#2: uint64 = φ(start#0 <- block@2, start#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let start#2: uint64 = φ(start#0 <- block@2, start#0 <- block@3) (start#2) with start#0 +debug: Deleting Phi assignment: let start#2: uint64 = φ(start#0 <- block@2, start#0 <- block@3) +debug: Replaced trivial Phi node: let start#2: uint64 = φ(start#0 <- block@2, start#0 <- block@3) (start#2) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#3: bytes = undefined while trying to resolve 'arrays.0' in block@4: // after_if_else_L1 +debug: Added arrays.0#1 to Phi node: let arrays.0#3: bytes = φ(arrays.0#1 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.0#1 to Phi node: let arrays.0#3: bytes = φ(arrays.0#1 <- block@2, arrays.0#1 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#3: bytes = φ(arrays.0#1 <- block@2, arrays.0#1 <- block@3) (arrays.0#3) with arrays.0#1 +debug: Deleting Phi assignment: let arrays.0#3: bytes = φ(arrays.0#1 <- block@2, arrays.0#1 <- block@3) +debug: Replaced trivial Phi node: let arrays.0#3: bytes = φ(arrays.0#1 <- block@2, arrays.0#1 <- block@3) (arrays.0#3) with arrays.0#1 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#3: bytes = undefined while trying to resolve 'arrays.1' in block@4: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#3: bytes = φ(arrays.1#2 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#3: bytes = φ(arrays.1#2 <- block@2, arrays.1#2 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#3: bytes = φ(arrays.1#2 <- block@2, arrays.1#2 <- block@3) (arrays.1#3) with arrays.1#2 +debug: Deleting Phi assignment: let arrays.1#3: bytes = φ(arrays.1#2 <- block@2, arrays.1#2 <- block@3) +debug: Replaced trivial Phi node: let arrays.1#3: bytes = φ(arrays.1#2 <- block@2, arrays.1#2 <- block@3) (arrays.1#3) with arrays.1#2 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#2: bytes = undefined while trying to resolve 'arrays.2' in block@4: // after_if_else_L1 +debug: Added arrays.2#0 to Phi node: let arrays.2#2: bytes = φ(arrays.2#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.2#0 to Phi node: let arrays.2#2: bytes = φ(arrays.2#0 <- block@2, arrays.2#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#2: bytes = φ(arrays.2#0 <- block@2, arrays.2#0 <- block@3) (arrays.2#2) with arrays.2#0 +debug: Deleting Phi assignment: let arrays.2#2: bytes = φ(arrays.2#0 <- block@2, arrays.2#0 <- block@3) +debug: Replaced trivial Phi node: let arrays.2#2: bytes = φ(arrays.2#0 <- block@2, arrays.2#0 <- block@3) (arrays.2#2) with arrays.2#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2%is_original#1: bool = undefined while trying to resolve 'arrays.2%is_original' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#2: bool = undefined while trying to resolve 'arrays.2%is_original' in block@2: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#2: bool = φ(arrays.2%is_original#0 <- block@0) in block@0: // L130 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#2: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#2: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#0 <- block@1) (arrays.2%is_original#2) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#2: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.2%is_original#2: bool = φ(arrays.2%is_original#0 <- block@0, arrays.2%is_original#0 <- block@1) (arrays.2%is_original#2) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#1: bool = φ(arrays.2%is_original#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#1: bool = φ(arrays.2%is_original#0 <- block@2, arrays.2%is_original#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#1: bool = φ(arrays.2%is_original#0 <- block@2, arrays.2%is_original#0 <- block@3) (arrays.2%is_original#1) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#1: bool = φ(arrays.2%is_original#0 <- block@2, arrays.2%is_original#0 <- block@3) +debug: Replaced trivial Phi node: let arrays.2%is_original#1: bool = φ(arrays.2%is_original#0 <- block@2, arrays.2%is_original#0 <- block@3) (arrays.2%is_original#1) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Terminated block@4: // after_if_else_L1 +debug: Sealing block@5: // if_body_L1 +debug: Terminated block@5: // if_body_L1 +debug: Sealing block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0#4: bytes = undefined while trying to resolve 'arrays.0' in block@6: // after_if_else_L1 +debug: Added arrays.0#1 to Phi node: let arrays.0#4: bytes = φ(arrays.0#1 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.0#1 to Phi node: let arrays.0#4: bytes = φ(arrays.0#1 <- block@4, arrays.0#1 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#4: bytes = φ(arrays.0#1 <- block@4, arrays.0#1 <- block@5) (arrays.0#4) with arrays.0#1 +debug: Deleting Phi assignment: let arrays.0#4: bytes = φ(arrays.0#1 <- block@4, arrays.0#1 <- block@5) +debug: Replaced trivial Phi node: let arrays.0#4: bytes = φ(arrays.0#1 <- block@4, arrays.0#1 <- block@5) (arrays.0#4) with arrays.0#1 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#4: bytes = undefined while trying to resolve 'arrays.1' in block@6: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#4: bytes = φ(arrays.1#2 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#4: bytes = φ(arrays.1#2 <- block@4, arrays.1#2 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#4: bytes = φ(arrays.1#2 <- block@4, arrays.1#2 <- block@5) (arrays.1#4) with arrays.1#2 +debug: Deleting Phi assignment: let arrays.1#4: bytes = φ(arrays.1#2 <- block@4, arrays.1#2 <- block@5) +debug: Replaced trivial Phi node: let arrays.1#4: bytes = φ(arrays.1#2 <- block@4, arrays.1#2 <- block@5) (arrays.1#4) with arrays.1#2 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#4: bytes = undefined while trying to resolve 'arrays.2' in block@6: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#4: bytes = φ(arrays.2#3 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#4: bytes = φ(arrays.2#3 <- block@4, arrays.2#3 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#4: bytes = φ(arrays.2#3 <- block@4, arrays.2#3 <- block@5) (arrays.2#4) with arrays.2#3 +debug: Deleting Phi assignment: let arrays.2#4: bytes = φ(arrays.2#3 <- block@4, arrays.2#3 <- block@5) +debug: Replaced trivial Phi node: let arrays.2#4: bytes = φ(arrays.2#3 <- block@4, arrays.2#3 <- block@5) (arrays.2#4) with arrays.2#3 in current definition for 1 blocks +debug: Created Phi assignment: let start#3: uint64 = undefined while trying to resolve 'start' in block@6: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#3: uint64 = φ(start#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#3: uint64 = φ(start#0 <- block@4, start#0 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let start#3: uint64 = φ(start#0 <- block@4, start#0 <- block@5) (start#3) with start#0 +debug: Deleting Phi assignment: let start#3: uint64 = φ(start#0 <- block@4, start#0 <- block@5) +debug: Replaced trivial Phi node: let start#3: uint64 = φ(start#0 <- block@4, start#0 <- block@5) (start#3) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0%is_original#1: bool = undefined while trying to resolve 'arrays.0%is_original' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#2: bool = undefined while trying to resolve 'arrays.0%is_original' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#3: bool = undefined while trying to resolve 'arrays.0%is_original' in block@2: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#3: bool = φ(arrays.0%is_original#0 <- block@0) in block@0: // L130 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#3: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#3: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#0 <- block@1) (arrays.0%is_original#3) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#3: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.0%is_original#3: bool = φ(arrays.0%is_original#0 <- block@0, arrays.0%is_original#0 <- block@1) (arrays.0%is_original#3) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#2: bool = φ(arrays.0%is_original#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#2: bool = φ(arrays.0%is_original#0 <- block@2, arrays.0%is_original#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#2: bool = φ(arrays.0%is_original#0 <- block@2, arrays.0%is_original#0 <- block@3) (arrays.0%is_original#2) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#2: bool = φ(arrays.0%is_original#0 <- block@2, arrays.0%is_original#0 <- block@3) +debug: Replaced trivial Phi node: let arrays.0%is_original#2: bool = φ(arrays.0%is_original#0 <- block@2, arrays.0%is_original#0 <- block@3) (arrays.0%is_original#2) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#1: bool = φ(arrays.0%is_original#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#1: bool = φ(arrays.0%is_original#0 <- block@4, arrays.0%is_original#0 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#1: bool = φ(arrays.0%is_original#0 <- block@4, arrays.0%is_original#0 <- block@5) (arrays.0%is_original#1) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#1: bool = φ(arrays.0%is_original#0 <- block@4, arrays.0%is_original#0 <- block@5) +debug: Replaced trivial Phi node: let arrays.0%is_original#1: bool = φ(arrays.0%is_original#0 <- block@4, arrays.0%is_original#0 <- block@5) (arrays.0%is_original#1) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Terminated block@6: // after_if_else_L1 +debug: Sealing block@7: // if_body_L1 +debug: Terminated block@7: // if_body_L1 +debug: Sealing block@8: // after_if_else_L1 +debug: Created Phi assignment: let start#4: uint64 = undefined while trying to resolve 'start' in block@8: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#4: uint64 = φ(start#0 <- block@6) in block@6: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#4: uint64 = φ(start#0 <- block@6, start#0 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let start#4: uint64 = φ(start#0 <- block@6, start#0 <- block@7) (start#4) with start#0 +debug: Deleting Phi assignment: let start#4: uint64 = φ(start#0 <- block@6, start#0 <- block@7) +debug: Replaced trivial Phi node: let start#4: uint64 = φ(start#0 <- block@6, start#0 <- block@7) (start#4) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#6: bytes = undefined while trying to resolve 'arrays.0' in block@8: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#6: bytes = φ(arrays.0#5 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#6: bytes = φ(arrays.0#5 <- block@6, arrays.0#5 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#6: bytes = φ(arrays.0#5 <- block@6, arrays.0#5 <- block@7) (arrays.0#6) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0#6: bytes = φ(arrays.0#5 <- block@6, arrays.0#5 <- block@7) +debug: Replaced trivial Phi node: let arrays.0#6: bytes = φ(arrays.0#5 <- block@6, arrays.0#5 <- block@7) (arrays.0#6) with arrays.0#5 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#5: bytes = undefined while trying to resolve 'arrays.1' in block@8: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#5: bytes = φ(arrays.1#2 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.1#2 to Phi node: let arrays.1#5: bytes = φ(arrays.1#2 <- block@6, arrays.1#2 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#5: bytes = φ(arrays.1#2 <- block@6, arrays.1#2 <- block@7) (arrays.1#5) with arrays.1#2 +debug: Deleting Phi assignment: let arrays.1#5: bytes = φ(arrays.1#2 <- block@6, arrays.1#2 <- block@7) +debug: Replaced trivial Phi node: let arrays.1#5: bytes = φ(arrays.1#2 <- block@6, arrays.1#2 <- block@7) (arrays.1#5) with arrays.1#2 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#5: bytes = undefined while trying to resolve 'arrays.2' in block@8: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#5: bytes = φ(arrays.2#3 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#5: bytes = φ(arrays.2#3 <- block@6, arrays.2#3 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#5: bytes = φ(arrays.2#3 <- block@6, arrays.2#3 <- block@7) (arrays.2#5) with arrays.2#3 +debug: Deleting Phi assignment: let arrays.2#5: bytes = φ(arrays.2#3 <- block@6, arrays.2#3 <- block@7) +debug: Replaced trivial Phi node: let arrays.2#5: bytes = φ(arrays.2#3 <- block@6, arrays.2#3 <- block@7) (arrays.2#5) with arrays.2#3 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1%is_original#2: bool = undefined while trying to resolve 'arrays.1%is_original' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#3: bool = undefined while trying to resolve 'arrays.1%is_original' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#4: bool = undefined while trying to resolve 'arrays.1%is_original' in block@4: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#4: bool = φ(arrays.1%is_original#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#4: bool = φ(arrays.1%is_original#0 <- block@2, arrays.1%is_original#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#4: bool = φ(arrays.1%is_original#0 <- block@2, arrays.1%is_original#0 <- block@3) (arrays.1%is_original#4) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#4: bool = φ(arrays.1%is_original#0 <- block@2, arrays.1%is_original#0 <- block@3) +debug: Replaced trivial Phi node: let arrays.1%is_original#4: bool = φ(arrays.1%is_original#0 <- block@2, arrays.1%is_original#0 <- block@3) (arrays.1%is_original#4) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#3: bool = φ(arrays.1%is_original#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#3: bool = φ(arrays.1%is_original#0 <- block@4, arrays.1%is_original#0 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#3: bool = φ(arrays.1%is_original#0 <- block@4, arrays.1%is_original#0 <- block@5) (arrays.1%is_original#3) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#3: bool = φ(arrays.1%is_original#0 <- block@4, arrays.1%is_original#0 <- block@5) +debug: Replaced trivial Phi node: let arrays.1%is_original#3: bool = φ(arrays.1%is_original#0 <- block@4, arrays.1%is_original#0 <- block@5) (arrays.1%is_original#3) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#2: bool = φ(arrays.1%is_original#0 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#2: bool = φ(arrays.1%is_original#0 <- block@6, arrays.1%is_original#0 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#2: bool = φ(arrays.1%is_original#0 <- block@6, arrays.1%is_original#0 <- block@7) (arrays.1%is_original#2) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#2: bool = φ(arrays.1%is_original#0 <- block@6, arrays.1%is_original#0 <- block@7) +debug: Replaced trivial Phi node: let arrays.1%is_original#2: bool = φ(arrays.1%is_original#0 <- block@6, arrays.1%is_original#0 <- block@7) (arrays.1%is_original#2) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Terminated block@8: // after_if_else_L1 +debug: Sealing block@9: // if_body_L1 +debug: Terminated block@9: // if_body_L1 +debug: Sealing block@10: // after_if_else_L1 +debug: Created Phi assignment: let start#5: uint64 = undefined while trying to resolve 'start' in block@10: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#5: uint64 = φ(start#0 <- block@8) in block@8: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#5: uint64 = φ(start#0 <- block@8, start#0 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let start#5: uint64 = φ(start#0 <- block@8, start#0 <- block@9) (start#5) with start#0 +debug: Deleting Phi assignment: let start#5: uint64 = φ(start#0 <- block@8, start#0 <- block@9) +debug: Replaced trivial Phi node: let start#5: uint64 = φ(start#0 <- block@8, start#0 <- block@9) (start#5) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#7: bytes = undefined while trying to resolve 'arrays.0' in block@10: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#7: bytes = φ(arrays.0#5 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#7: bytes = φ(arrays.0#5 <- block@8, arrays.0#5 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#7: bytes = φ(arrays.0#5 <- block@8, arrays.0#5 <- block@9) (arrays.0#7) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0#7: bytes = φ(arrays.0#5 <- block@8, arrays.0#5 <- block@9) +debug: Replaced trivial Phi node: let arrays.0#7: bytes = φ(arrays.0#5 <- block@8, arrays.0#5 <- block@9) (arrays.0#7) with arrays.0#5 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#7: bytes = undefined while trying to resolve 'arrays.1' in block@10: // after_if_else_L1 +debug: Added arrays.1#6 to Phi node: let arrays.1#7: bytes = φ(arrays.1#6 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.1#6 to Phi node: let arrays.1#7: bytes = φ(arrays.1#6 <- block@8, arrays.1#6 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#7: bytes = φ(arrays.1#6 <- block@8, arrays.1#6 <- block@9) (arrays.1#7) with arrays.1#6 +debug: Deleting Phi assignment: let arrays.1#7: bytes = φ(arrays.1#6 <- block@8, arrays.1#6 <- block@9) +debug: Replaced trivial Phi node: let arrays.1#7: bytes = φ(arrays.1#6 <- block@8, arrays.1#6 <- block@9) (arrays.1#7) with arrays.1#6 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#6: bytes = undefined while trying to resolve 'arrays.2' in block@10: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#6: bytes = φ(arrays.2#3 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.2#3 to Phi node: let arrays.2#6: bytes = φ(arrays.2#3 <- block@8, arrays.2#3 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#6: bytes = φ(arrays.2#3 <- block@8, arrays.2#3 <- block@9) (arrays.2#6) with arrays.2#3 +debug: Deleting Phi assignment: let arrays.2#6: bytes = φ(arrays.2#3 <- block@8, arrays.2#3 <- block@9) +debug: Replaced trivial Phi node: let arrays.2#6: bytes = φ(arrays.2#3 <- block@8, arrays.2#3 <- block@9) (arrays.2#6) with arrays.2#3 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2%is_original#3: bool = undefined while trying to resolve 'arrays.2%is_original' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#4: bool = undefined while trying to resolve 'arrays.2%is_original' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#5: bool = undefined while trying to resolve 'arrays.2%is_original' in block@6: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#5: bool = φ(arrays.2%is_original#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#5: bool = φ(arrays.2%is_original#0 <- block@4, arrays.2%is_original#0 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#5: bool = φ(arrays.2%is_original#0 <- block@4, arrays.2%is_original#0 <- block@5) (arrays.2%is_original#5) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#5: bool = φ(arrays.2%is_original#0 <- block@4, arrays.2%is_original#0 <- block@5) +debug: Replaced trivial Phi node: let arrays.2%is_original#5: bool = φ(arrays.2%is_original#0 <- block@4, arrays.2%is_original#0 <- block@5) (arrays.2%is_original#5) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#4: bool = φ(arrays.2%is_original#0 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#4: bool = φ(arrays.2%is_original#0 <- block@6, arrays.2%is_original#0 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#4: bool = φ(arrays.2%is_original#0 <- block@6, arrays.2%is_original#0 <- block@7) (arrays.2%is_original#4) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#4: bool = φ(arrays.2%is_original#0 <- block@6, arrays.2%is_original#0 <- block@7) +debug: Replaced trivial Phi node: let arrays.2%is_original#4: bool = φ(arrays.2%is_original#0 <- block@6, arrays.2%is_original#0 <- block@7) (arrays.2%is_original#4) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#3: bool = φ(arrays.2%is_original#0 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#3: bool = φ(arrays.2%is_original#0 <- block@8, arrays.2%is_original#0 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#3: bool = φ(arrays.2%is_original#0 <- block@8, arrays.2%is_original#0 <- block@9) (arrays.2%is_original#3) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#3: bool = φ(arrays.2%is_original#0 <- block@8, arrays.2%is_original#0 <- block@9) +debug: Replaced trivial Phi node: let arrays.2%is_original#3: bool = φ(arrays.2%is_original#0 <- block@8, arrays.2%is_original#0 <- block@9) (arrays.2%is_original#3) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Terminated block@10: // after_if_else_L1 +debug: Sealing block@11: // if_body_L1 +debug: Terminated block@11: // if_body_L1 +debug: Sealing block@12: // after_if_else_L1 +debug: Created Phi assignment: let reassign#1: bool = undefined while trying to resolve 'reassign' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let reassign#2: bool = undefined while trying to resolve 'reassign' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let reassign#3: bool = undefined while trying to resolve 'reassign' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let reassign#4: bool = undefined while trying to resolve 'reassign' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let reassign#5: bool = undefined while trying to resolve 'reassign' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let reassign#6: bool = undefined while trying to resolve 'reassign' in block@2: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#6: bool = φ(reassign#0 <- block@0) in block@0: // L130 +debug: Added reassign#0 to Phi node: let reassign#6: bool = φ(reassign#0 <- block@0, reassign#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#6: bool = φ(reassign#0 <- block@0, reassign#0 <- block@1) (reassign#6) with reassign#0 +debug: Deleting Phi assignment: let reassign#6: bool = φ(reassign#0 <- block@0, reassign#0 <- block@1) +debug: Replaced trivial Phi node: let reassign#6: bool = φ(reassign#0 <- block@0, reassign#0 <- block@1) (reassign#6) with reassign#0 in current definition for 1 blocks +debug: Added reassign#0 to Phi node: let reassign#5: bool = φ(reassign#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#5: bool = φ(reassign#0 <- block@2, reassign#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#5: bool = φ(reassign#0 <- block@2, reassign#0 <- block@3) (reassign#5) with reassign#0 +debug: Deleting Phi assignment: let reassign#5: bool = φ(reassign#0 <- block@2, reassign#0 <- block@3) +debug: Replaced trivial Phi node: let reassign#5: bool = φ(reassign#0 <- block@2, reassign#0 <- block@3) (reassign#5) with reassign#0 in current definition for 1 blocks +debug: Added reassign#0 to Phi node: let reassign#4: bool = φ(reassign#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#4: bool = φ(reassign#0 <- block@4, reassign#0 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#4: bool = φ(reassign#0 <- block@4, reassign#0 <- block@5) (reassign#4) with reassign#0 +debug: Deleting Phi assignment: let reassign#4: bool = φ(reassign#0 <- block@4, reassign#0 <- block@5) +debug: Replaced trivial Phi node: let reassign#4: bool = φ(reassign#0 <- block@4, reassign#0 <- block@5) (reassign#4) with reassign#0 in current definition for 1 blocks +debug: Added reassign#0 to Phi node: let reassign#3: bool = φ(reassign#0 <- block@6) in block@6: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#3: bool = φ(reassign#0 <- block@6, reassign#0 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#3: bool = φ(reassign#0 <- block@6, reassign#0 <- block@7) (reassign#3) with reassign#0 +debug: Deleting Phi assignment: let reassign#3: bool = φ(reassign#0 <- block@6, reassign#0 <- block@7) +debug: Replaced trivial Phi node: let reassign#3: bool = φ(reassign#0 <- block@6, reassign#0 <- block@7) (reassign#3) with reassign#0 in current definition for 1 blocks +debug: Added reassign#0 to Phi node: let reassign#2: bool = φ(reassign#0 <- block@8) in block@8: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#2: bool = φ(reassign#0 <- block@8, reassign#0 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#2: bool = φ(reassign#0 <- block@8, reassign#0 <- block@9) (reassign#2) with reassign#0 +debug: Deleting Phi assignment: let reassign#2: bool = φ(reassign#0 <- block@8, reassign#0 <- block@9) +debug: Replaced trivial Phi node: let reassign#2: bool = φ(reassign#0 <- block@8, reassign#0 <- block@9) (reassign#2) with reassign#0 in current definition for 1 blocks +debug: Added reassign#0 to Phi node: let reassign#1: bool = φ(reassign#0 <- block@10) in block@10: // after_if_else_L1 +debug: Added reassign#0 to Phi node: let reassign#1: bool = φ(reassign#0 <- block@10, reassign#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let reassign#1: bool = φ(reassign#0 <- block@10, reassign#0 <- block@11) (reassign#1) with reassign#0 +debug: Deleting Phi assignment: let reassign#1: bool = φ(reassign#0 <- block@10, reassign#0 <- block@11) +debug: Replaced trivial Phi node: let reassign#1: bool = φ(reassign#0 <- block@10, reassign#0 <- block@11) (reassign#1) with reassign#0 in current definition for 1 blocks +debug: Terminated block@12: // after_if_else_L1 +debug: Sealing block@13: // if_body_L148 +debug: Created Phi assignment: let arrays.0#8: bytes = undefined while trying to resolve 'arrays.0' in block@12: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#8: bytes = φ(arrays.0#5 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.0#5 to Phi node: let arrays.0#8: bytes = φ(arrays.0#5 <- block@10, arrays.0#5 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#8: bytes = φ(arrays.0#5 <- block@10, arrays.0#5 <- block@11) (arrays.0#8) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0#8: bytes = φ(arrays.0#5 <- block@10, arrays.0#5 <- block@11) +debug: Replaced trivial Phi node: let arrays.0#8: bytes = φ(arrays.0#5 <- block@10, arrays.0#5 <- block@11) (arrays.0#8) with arrays.0#5 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#8: bytes = undefined while trying to resolve 'arrays.1' in block@12: // after_if_else_L1 +debug: Added arrays.1#6 to Phi node: let arrays.1#8: bytes = φ(arrays.1#6 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.1#6 to Phi node: let arrays.1#8: bytes = φ(arrays.1#6 <- block@10, arrays.1#6 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#8: bytes = φ(arrays.1#6 <- block@10, arrays.1#6 <- block@11) (arrays.1#8) with arrays.1#6 +debug: Deleting Phi assignment: let arrays.1#8: bytes = φ(arrays.1#6 <- block@10, arrays.1#6 <- block@11) +debug: Replaced trivial Phi node: let arrays.1#8: bytes = φ(arrays.1#6 <- block@10, arrays.1#6 <- block@11) (arrays.1#8) with arrays.1#6 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#8: bytes = undefined while trying to resolve 'arrays.2' in block@12: // after_if_else_L1 +debug: Added arrays.2#7 to Phi node: let arrays.2#8: bytes = φ(arrays.2#7 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.2#7 to Phi node: let arrays.2#8: bytes = φ(arrays.2#7 <- block@10, arrays.2#7 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#8: bytes = φ(arrays.2#7 <- block@10, arrays.2#7 <- block@11) (arrays.2#8) with arrays.2#7 +debug: Deleting Phi assignment: let arrays.2#8: bytes = φ(arrays.2#7 <- block@10, arrays.2#7 <- block@11) +debug: Replaced trivial Phi node: let arrays.2#8: bytes = φ(arrays.2#7 <- block@10, arrays.2#7 <- block@11) (arrays.2#8) with arrays.2#7 in current definition for 1 blocks +debug: Terminated block@13: // if_body_L148 +debug: Sealing block@14: // if_body_L1 +debug: Terminated block@14: // if_body_L1 +debug: Sealing block@15: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#6: bool = undefined while trying to resolve 'arrays.1%is_original' in block@15: // after_if_else_L1 +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#6: bool = φ(arrays.1%is_original#5 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#6: bool = φ(arrays.1%is_original#5 <- block@13, arrays.1%is_original#5 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#6: bool = φ(arrays.1%is_original#5 <- block@13, arrays.1%is_original#5 <- block@14) (arrays.1%is_original#6) with arrays.1%is_original#5 +debug: Deleting Phi assignment: let arrays.1%is_original#6: bool = φ(arrays.1%is_original#5 <- block@13, arrays.1%is_original#5 <- block@14) +debug: Replaced trivial Phi node: let arrays.1%is_original#6: bool = φ(arrays.1%is_original#5 <- block@13, arrays.1%is_original#5 <- block@14) (arrays.1%is_original#6) with arrays.1%is_original#5 in current definition for 1 blocks +debug: Terminated block@15: // after_if_else_L1 +debug: Sealing block@16: // if_body_L1 +debug: Created Phi assignment: let arrays.1#10: bytes = undefined while trying to resolve 'arrays.1' in block@15: // after_if_else_L1 +debug: Added arrays.1#9 to Phi node: let arrays.1#10: bytes = φ(arrays.1#9 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.1#9 to Phi node: let arrays.1#10: bytes = φ(arrays.1#9 <- block@13, arrays.1#9 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#10: bytes = φ(arrays.1#9 <- block@13, arrays.1#9 <- block@14) (arrays.1#10) with arrays.1#9 +debug: Deleting Phi assignment: let arrays.1#10: bytes = φ(arrays.1#9 <- block@13, arrays.1#9 <- block@14) +debug: Replaced trivial Phi node: let arrays.1#10: bytes = φ(arrays.1#9 <- block@13, arrays.1#9 <- block@14) (arrays.1#10) with arrays.1#9 in current definition for 1 blocks +debug: Terminated block@16: // if_body_L1 +debug: Sealing block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#7: bool = undefined while trying to resolve 'arrays.2%is_original' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#8: bool = undefined while trying to resolve 'arrays.2%is_original' in block@15: // after_if_else_L1 +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#8: bool = φ(arrays.2%is_original#6 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#8: bool = φ(arrays.2%is_original#6 <- block@13, arrays.2%is_original#6 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#8: bool = φ(arrays.2%is_original#6 <- block@13, arrays.2%is_original#6 <- block@14) (arrays.2%is_original#8) with arrays.2%is_original#6 +debug: Deleting Phi assignment: let arrays.2%is_original#8: bool = φ(arrays.2%is_original#6 <- block@13, arrays.2%is_original#6 <- block@14) +debug: Replaced trivial Phi node: let arrays.2%is_original#8: bool = φ(arrays.2%is_original#6 <- block@13, arrays.2%is_original#6 <- block@14) (arrays.2%is_original#8) with arrays.2%is_original#6 in current definition for 1 blocks +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#7: bool = φ(arrays.2%is_original#6 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#7: bool = φ(arrays.2%is_original#6 <- block@15, arrays.2%is_original#6 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#7: bool = φ(arrays.2%is_original#6 <- block@15, arrays.2%is_original#6 <- block@16) (arrays.2%is_original#7) with arrays.2%is_original#6 +debug: Deleting Phi assignment: let arrays.2%is_original#7: bool = φ(arrays.2%is_original#6 <- block@15, arrays.2%is_original#6 <- block@16) +debug: Replaced trivial Phi node: let arrays.2%is_original#7: bool = φ(arrays.2%is_original#6 <- block@15, arrays.2%is_original#6 <- block@16) (arrays.2%is_original#7) with arrays.2%is_original#6 in current definition for 1 blocks +debug: Terminated block@17: // after_if_else_L1 +debug: Sealing block@18: // if_body_L1 +debug: Created Phi assignment: let arrays.2#10: bytes = undefined while trying to resolve 'arrays.2' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2#11: bytes = undefined while trying to resolve 'arrays.2' in block@15: // after_if_else_L1 +debug: Added arrays.2#9 to Phi node: let arrays.2#11: bytes = φ(arrays.2#9 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.2#9 to Phi node: let arrays.2#11: bytes = φ(arrays.2#9 <- block@13, arrays.2#9 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#11: bytes = φ(arrays.2#9 <- block@13, arrays.2#9 <- block@14) (arrays.2#11) with arrays.2#9 +debug: Deleting Phi assignment: let arrays.2#11: bytes = φ(arrays.2#9 <- block@13, arrays.2#9 <- block@14) +debug: Replaced trivial Phi node: let arrays.2#11: bytes = φ(arrays.2#9 <- block@13, arrays.2#9 <- block@14) (arrays.2#11) with arrays.2#9 in current definition for 1 blocks +debug: Added arrays.2#9 to Phi node: let arrays.2#10: bytes = φ(arrays.2#9 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.2#9 to Phi node: let arrays.2#10: bytes = φ(arrays.2#9 <- block@15, arrays.2#9 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#10: bytes = φ(arrays.2#9 <- block@15, arrays.2#9 <- block@16) (arrays.2#10) with arrays.2#9 +debug: Deleting Phi assignment: let arrays.2#10: bytes = φ(arrays.2#9 <- block@15, arrays.2#9 <- block@16) +debug: Replaced trivial Phi node: let arrays.2#10: bytes = φ(arrays.2#9 <- block@15, arrays.2#9 <- block@16) (arrays.2#10) with arrays.2#9 in current definition for 1 blocks +debug: Terminated block@18: // if_body_L1 +debug: Sealing block@19: // after_if_else_L1 +debug: Terminated block@19: // after_if_else_L1 +debug: Sealing block@20: // after_if_else_L147 +debug: Created Phi assignment: let start#6: uint64 = undefined while trying to resolve 'start' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let start#7: uint64 = undefined while trying to resolve 'start' in block@12: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#7: uint64 = φ(start#0 <- block@10) in block@10: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#7: uint64 = φ(start#0 <- block@10, start#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let start#7: uint64 = φ(start#0 <- block@10, start#0 <- block@11) (start#7) with start#0 +debug: Deleting Phi assignment: let start#7: uint64 = φ(start#0 <- block@10, start#0 <- block@11) +debug: Replaced trivial Phi node: let start#7: uint64 = φ(start#0 <- block@10, start#0 <- block@11) (start#7) with start#0 in current definition for 1 blocks +debug: Added start#0 to Phi node: let start#6: uint64 = φ(start#0 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let start#8: uint64 = undefined while trying to resolve 'start' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let start#9: uint64 = undefined while trying to resolve 'start' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let start#10: uint64 = undefined while trying to resolve 'start' in block@15: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#10: uint64 = φ(start#0 <- block@13) in block@13: // if_body_L148 +debug: Added start#0 to Phi node: let start#10: uint64 = φ(start#0 <- block@13, start#0 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let start#10: uint64 = φ(start#0 <- block@13, start#0 <- block@14) (start#10) with start#0 +debug: Deleting Phi assignment: let start#10: uint64 = φ(start#0 <- block@13, start#0 <- block@14) +debug: Replaced trivial Phi node: let start#10: uint64 = φ(start#0 <- block@13, start#0 <- block@14) (start#10) with start#0 in current definition for 1 blocks +debug: Added start#0 to Phi node: let start#9: uint64 = φ(start#0 <- block@15) in block@15: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#9: uint64 = φ(start#0 <- block@15, start#0 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let start#9: uint64 = φ(start#0 <- block@15, start#0 <- block@16) (start#9) with start#0 +debug: Deleting Phi assignment: let start#9: uint64 = φ(start#0 <- block@15, start#0 <- block@16) +debug: Replaced trivial Phi node: let start#9: uint64 = φ(start#0 <- block@15, start#0 <- block@16) (start#9) with start#0 in current definition for 1 blocks +debug: Added start#0 to Phi node: let start#8: uint64 = φ(start#0 <- block@17) in block@17: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#8: uint64 = φ(start#0 <- block@17, start#0 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let start#8: uint64 = φ(start#0 <- block@17, start#0 <- block@18) (start#8) with start#0 +debug: Deleting Phi assignment: let start#8: uint64 = φ(start#0 <- block@17, start#0 <- block@18) +debug: Replaced trivial Phi node: let start#8: uint64 = φ(start#0 <- block@17, start#0 <- block@18) (start#8) with start#0 in current definition for 1 blocks +debug: Added start#0 to Phi node: let start#6: uint64 = φ(start#0 <- block@12, start#0 <- block@19) in block@19: // after_if_else_L1 +debug: Replacing trivial Phi node: let start#6: uint64 = φ(start#0 <- block@12, start#0 <- block@19) (start#6) with start#0 +debug: Deleting Phi assignment: let start#6: uint64 = φ(start#0 <- block@12, start#0 <- block@19) +debug: Replaced trivial Phi node: let start#6: uint64 = φ(start#0 <- block@12, start#0 <- block@19) (start#6) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#10: bytes = undefined while trying to resolve 'arrays.0' in block@20: // after_if_else_L147 +debug: Added arrays.0#5 to Phi node: let arrays.0#10: bytes = φ(arrays.0#5 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0#11: bytes = undefined while trying to resolve 'arrays.0' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0#12: bytes = undefined while trying to resolve 'arrays.0' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0#13: bytes = undefined while trying to resolve 'arrays.0' in block@15: // after_if_else_L1 +debug: Added arrays.0#9 to Phi node: let arrays.0#13: bytes = φ(arrays.0#9 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.0#9 to Phi node: let arrays.0#13: bytes = φ(arrays.0#9 <- block@13, arrays.0#9 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#13: bytes = φ(arrays.0#9 <- block@13, arrays.0#9 <- block@14) (arrays.0#13) with arrays.0#9 +debug: Deleting Phi assignment: let arrays.0#13: bytes = φ(arrays.0#9 <- block@13, arrays.0#9 <- block@14) +debug: Replaced trivial Phi node: let arrays.0#13: bytes = φ(arrays.0#9 <- block@13, arrays.0#9 <- block@14) (arrays.0#13) with arrays.0#9 in current definition for 1 blocks +debug: Added arrays.0#9 to Phi node: let arrays.0#12: bytes = φ(arrays.0#9 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.0#9 to Phi node: let arrays.0#12: bytes = φ(arrays.0#9 <- block@15, arrays.0#9 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#12: bytes = φ(arrays.0#9 <- block@15, arrays.0#9 <- block@16) (arrays.0#12) with arrays.0#9 +debug: Deleting Phi assignment: let arrays.0#12: bytes = φ(arrays.0#9 <- block@15, arrays.0#9 <- block@16) +debug: Replaced trivial Phi node: let arrays.0#12: bytes = φ(arrays.0#9 <- block@15, arrays.0#9 <- block@16) (arrays.0#12) with arrays.0#9 in current definition for 1 blocks +debug: Added arrays.0#9 to Phi node: let arrays.0#11: bytes = φ(arrays.0#9 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.0#9 to Phi node: let arrays.0#11: bytes = φ(arrays.0#9 <- block@17, arrays.0#9 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#11: bytes = φ(arrays.0#9 <- block@17, arrays.0#9 <- block@18) (arrays.0#11) with arrays.0#9 +debug: Deleting Phi assignment: let arrays.0#11: bytes = φ(arrays.0#9 <- block@17, arrays.0#9 <- block@18) +debug: Replaced trivial Phi node: let arrays.0#11: bytes = φ(arrays.0#9 <- block@17, arrays.0#9 <- block@18) (arrays.0#11) with arrays.0#9 in current definition for 1 blocks +debug: Added arrays.0#9 to Phi node: let arrays.0#10: bytes = φ(arrays.0#5 <- block@12, arrays.0#9 <- block@19) in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1#11: bytes = undefined while trying to resolve 'arrays.1' in block@20: // after_if_else_L147 +debug: Added arrays.1#6 to Phi node: let arrays.1#11: bytes = φ(arrays.1#6 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1#12: bytes = undefined while trying to resolve 'arrays.1' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1#13: bytes = undefined while trying to resolve 'arrays.1' in block@17: // after_if_else_L1 +debug: Added arrays.1#9 to Phi node: let arrays.1#13: bytes = φ(arrays.1#9 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.1#9 to Phi node: let arrays.1#13: bytes = φ(arrays.1#9 <- block@15, arrays.1#9 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#13: bytes = φ(arrays.1#9 <- block@15, arrays.1#9 <- block@16) (arrays.1#13) with arrays.1#9 +debug: Deleting Phi assignment: let arrays.1#13: bytes = φ(arrays.1#9 <- block@15, arrays.1#9 <- block@16) +debug: Replaced trivial Phi node: let arrays.1#13: bytes = φ(arrays.1#9 <- block@15, arrays.1#9 <- block@16) (arrays.1#13) with arrays.1#9 in current definition for 1 blocks +debug: Added arrays.1#9 to Phi node: let arrays.1#12: bytes = φ(arrays.1#9 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.1#9 to Phi node: let arrays.1#12: bytes = φ(arrays.1#9 <- block@17, arrays.1#9 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#12: bytes = φ(arrays.1#9 <- block@17, arrays.1#9 <- block@18) (arrays.1#12) with arrays.1#9 +debug: Deleting Phi assignment: let arrays.1#12: bytes = φ(arrays.1#9 <- block@17, arrays.1#9 <- block@18) +debug: Replaced trivial Phi node: let arrays.1#12: bytes = φ(arrays.1#9 <- block@17, arrays.1#9 <- block@18) (arrays.1#12) with arrays.1#9 in current definition for 1 blocks +debug: Added arrays.1#9 to Phi node: let arrays.1#11: bytes = φ(arrays.1#6 <- block@12, arrays.1#9 <- block@19) in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2#12: bytes = undefined while trying to resolve 'arrays.2' in block@20: // after_if_else_L147 +debug: Added arrays.2#7 to Phi node: let arrays.2#12: bytes = φ(arrays.2#7 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2#13: bytes = undefined while trying to resolve 'arrays.2' in block@19: // after_if_else_L1 +debug: Added arrays.2#9 to Phi node: let arrays.2#13: bytes = φ(arrays.2#9 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.2#9 to Phi node: let arrays.2#13: bytes = φ(arrays.2#9 <- block@17, arrays.2#9 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#13: bytes = φ(arrays.2#9 <- block@17, arrays.2#9 <- block@18) (arrays.2#13) with arrays.2#9 +debug: Deleting Phi assignment: let arrays.2#13: bytes = φ(arrays.2#9 <- block@17, arrays.2#9 <- block@18) +debug: Replaced trivial Phi node: let arrays.2#13: bytes = φ(arrays.2#9 <- block@17, arrays.2#9 <- block@18) (arrays.2#13) with arrays.2#9 in current definition for 1 blocks +debug: Added arrays.2#9 to Phi node: let arrays.2#12: bytes = φ(arrays.2#7 <- block@12, arrays.2#9 <- block@19) in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#5: bool = undefined while trying to resolve 'arrays.0%is_original' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.0%is_original#6: bool = undefined while trying to resolve 'arrays.0%is_original' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#7: bool = undefined while trying to resolve 'arrays.0%is_original' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#8: bool = undefined while trying to resolve 'arrays.0%is_original' in block@8: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#8: bool = φ(arrays.0%is_original#0 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#8: bool = φ(arrays.0%is_original#0 <- block@6, arrays.0%is_original#0 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#8: bool = φ(arrays.0%is_original#0 <- block@6, arrays.0%is_original#0 <- block@7) (arrays.0%is_original#8) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#8: bool = φ(arrays.0%is_original#0 <- block@6, arrays.0%is_original#0 <- block@7) +debug: Replaced trivial Phi node: let arrays.0%is_original#8: bool = φ(arrays.0%is_original#0 <- block@6, arrays.0%is_original#0 <- block@7) (arrays.0%is_original#8) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#7: bool = φ(arrays.0%is_original#0 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#7: bool = φ(arrays.0%is_original#0 <- block@8, arrays.0%is_original#0 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#7: bool = φ(arrays.0%is_original#0 <- block@8, arrays.0%is_original#0 <- block@9) (arrays.0%is_original#7) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#7: bool = φ(arrays.0%is_original#0 <- block@8, arrays.0%is_original#0 <- block@9) +debug: Replaced trivial Phi node: let arrays.0%is_original#7: bool = φ(arrays.0%is_original#0 <- block@8, arrays.0%is_original#0 <- block@9) (arrays.0%is_original#7) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#6: bool = φ(arrays.0%is_original#0 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#6: bool = φ(arrays.0%is_original#0 <- block@10, arrays.0%is_original#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#6: bool = φ(arrays.0%is_original#0 <- block@10, arrays.0%is_original#0 <- block@11) (arrays.0%is_original#6) with arrays.0%is_original#0 +debug: Deleting Phi assignment: let arrays.0%is_original#6: bool = φ(arrays.0%is_original#0 <- block@10, arrays.0%is_original#0 <- block@11) +debug: Replaced trivial Phi node: let arrays.0%is_original#6: bool = φ(arrays.0%is_original#0 <- block@10, arrays.0%is_original#0 <- block@11) (arrays.0%is_original#6) with arrays.0%is_original#0 in current definition for 1 blocks +debug: Added arrays.0%is_original#0 to Phi node: let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#9: bool = undefined while trying to resolve 'arrays.0%is_original' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#10: bool = undefined while trying to resolve 'arrays.0%is_original' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%is_original#11: bool = undefined while trying to resolve 'arrays.0%is_original' in block@15: // after_if_else_L1 +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#11: bool = φ(arrays.0%is_original#4 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#11: bool = φ(arrays.0%is_original#4 <- block@13, arrays.0%is_original#4 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#11: bool = φ(arrays.0%is_original#4 <- block@13, arrays.0%is_original#4 <- block@14) (arrays.0%is_original#11) with arrays.0%is_original#4 +debug: Deleting Phi assignment: let arrays.0%is_original#11: bool = φ(arrays.0%is_original#4 <- block@13, arrays.0%is_original#4 <- block@14) +debug: Replaced trivial Phi node: let arrays.0%is_original#11: bool = φ(arrays.0%is_original#4 <- block@13, arrays.0%is_original#4 <- block@14) (arrays.0%is_original#11) with arrays.0%is_original#4 in current definition for 1 blocks +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#10: bool = φ(arrays.0%is_original#4 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#10: bool = φ(arrays.0%is_original#4 <- block@15, arrays.0%is_original#4 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#10: bool = φ(arrays.0%is_original#4 <- block@15, arrays.0%is_original#4 <- block@16) (arrays.0%is_original#10) with arrays.0%is_original#4 +debug: Deleting Phi assignment: let arrays.0%is_original#10: bool = φ(arrays.0%is_original#4 <- block@15, arrays.0%is_original#4 <- block@16) +debug: Replaced trivial Phi node: let arrays.0%is_original#10: bool = φ(arrays.0%is_original#4 <- block@15, arrays.0%is_original#4 <- block@16) (arrays.0%is_original#10) with arrays.0%is_original#4 in current definition for 1 blocks +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#9: bool = φ(arrays.0%is_original#4 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#9: bool = φ(arrays.0%is_original#4 <- block@17, arrays.0%is_original#4 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%is_original#9: bool = φ(arrays.0%is_original#4 <- block@17, arrays.0%is_original#4 <- block@18) (arrays.0%is_original#9) with arrays.0%is_original#4 +debug: Deleting Phi assignment: let arrays.0%is_original#9: bool = φ(arrays.0%is_original#4 <- block@17, arrays.0%is_original#4 <- block@18) +debug: Replaced trivial Phi node: let arrays.0%is_original#9: bool = φ(arrays.0%is_original#4 <- block@17, arrays.0%is_original#4 <- block@18) (arrays.0%is_original#9) with arrays.0%is_original#4 in current definition for 1 blocks +debug: Added arrays.0%is_original#4 to Phi node: let arrays.0%is_original#5: bool = φ(arrays.0%is_original#0 <- block@12, arrays.0%is_original#4 <- block@19) in block@19: // after_if_else_L1 +debug: Terminated block@20: // after_if_else_L147 +debug: Sealing block@21: // if_body_L1 +debug: Terminated block@21: // if_body_L1 +debug: Sealing block@22: // after_if_else_L1 +debug: Created Phi assignment: let start#11: uint64 = undefined while trying to resolve 'start' in block@22: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#11: uint64 = φ(start#0 <- block@20) in block@20: // after_if_else_L147 +debug: Added start#0 to Phi node: let start#11: uint64 = φ(start#0 <- block@20, start#0 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let start#11: uint64 = φ(start#0 <- block@20, start#0 <- block@21) (start#11) with start#0 +debug: Deleting Phi assignment: let start#11: uint64 = φ(start#0 <- block@20, start#0 <- block@21) +debug: Replaced trivial Phi node: let start#11: uint64 = φ(start#0 <- block@20, start#0 <- block@21) (start#11) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#15: bytes = undefined while trying to resolve 'arrays.0' in block@22: // after_if_else_L1 +debug: Added arrays.0#14 to Phi node: let arrays.0#15: bytes = φ(arrays.0#14 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.0#14 to Phi node: let arrays.0#15: bytes = φ(arrays.0#14 <- block@20, arrays.0#14 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#15: bytes = φ(arrays.0#14 <- block@20, arrays.0#14 <- block@21) (arrays.0#15) with arrays.0#14 +debug: Deleting Phi assignment: let arrays.0#15: bytes = φ(arrays.0#14 <- block@20, arrays.0#14 <- block@21) +debug: Replaced trivial Phi node: let arrays.0#15: bytes = φ(arrays.0#14 <- block@20, arrays.0#14 <- block@21) (arrays.0#15) with arrays.0#14 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#14: bytes = undefined while trying to resolve 'arrays.1' in block@22: // after_if_else_L1 +debug: Added arrays.1#11 to Phi node: let arrays.1#14: bytes = φ(arrays.1#11 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.1#11 to Phi node: let arrays.1#14: bytes = φ(arrays.1#11 <- block@20, arrays.1#11 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#14: bytes = φ(arrays.1#11 <- block@20, arrays.1#11 <- block@21) (arrays.1#14) with arrays.1#11 +debug: Deleting Phi assignment: let arrays.1#14: bytes = φ(arrays.1#11 <- block@20, arrays.1#11 <- block@21) +debug: Replaced trivial Phi node: let arrays.1#14: bytes = φ(arrays.1#11 <- block@20, arrays.1#11 <- block@21) (arrays.1#14) with arrays.1#11 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#14: bytes = undefined while trying to resolve 'arrays.2' in block@22: // after_if_else_L1 +debug: Added arrays.2#12 to Phi node: let arrays.2#14: bytes = φ(arrays.2#12 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.2#12 to Phi node: let arrays.2#14: bytes = φ(arrays.2#12 <- block@20, arrays.2#12 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#14: bytes = φ(arrays.2#12 <- block@20, arrays.2#12 <- block@21) (arrays.2#14) with arrays.2#12 +debug: Deleting Phi assignment: let arrays.2#14: bytes = φ(arrays.2#12 <- block@20, arrays.2#12 <- block@21) +debug: Replaced trivial Phi node: let arrays.2#14: bytes = φ(arrays.2#12 <- block@20, arrays.2#12 <- block@21) (arrays.2#14) with arrays.2#12 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1%is_original#7: bool = undefined while trying to resolve 'arrays.1%is_original' in block@22: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#8: bool = undefined while trying to resolve 'arrays.1%is_original' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.1%is_original#9: bool = undefined while trying to resolve 'arrays.1%is_original' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#10: bool = undefined while trying to resolve 'arrays.1%is_original' in block@10: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#10: bool = φ(arrays.1%is_original#0 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#10: bool = φ(arrays.1%is_original#0 <- block@8, arrays.1%is_original#0 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#10: bool = φ(arrays.1%is_original#0 <- block@8, arrays.1%is_original#0 <- block@9) (arrays.1%is_original#10) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#10: bool = φ(arrays.1%is_original#0 <- block@8, arrays.1%is_original#0 <- block@9) +debug: Replaced trivial Phi node: let arrays.1%is_original#10: bool = φ(arrays.1%is_original#0 <- block@8, arrays.1%is_original#0 <- block@9) (arrays.1%is_original#10) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#9: bool = φ(arrays.1%is_original#0 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#9: bool = φ(arrays.1%is_original#0 <- block@10, arrays.1%is_original#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#9: bool = φ(arrays.1%is_original#0 <- block@10, arrays.1%is_original#0 <- block@11) (arrays.1%is_original#9) with arrays.1%is_original#0 +debug: Deleting Phi assignment: let arrays.1%is_original#9: bool = φ(arrays.1%is_original#0 <- block@10, arrays.1%is_original#0 <- block@11) +debug: Replaced trivial Phi node: let arrays.1%is_original#9: bool = φ(arrays.1%is_original#0 <- block@10, arrays.1%is_original#0 <- block@11) (arrays.1%is_original#9) with arrays.1%is_original#0 in current definition for 1 blocks +debug: Added arrays.1%is_original#0 to Phi node: let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#11: bool = undefined while trying to resolve 'arrays.1%is_original' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%is_original#12: bool = undefined while trying to resolve 'arrays.1%is_original' in block@17: // after_if_else_L1 +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#12: bool = φ(arrays.1%is_original#5 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#12: bool = φ(arrays.1%is_original#5 <- block@15, arrays.1%is_original#5 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#12: bool = φ(arrays.1%is_original#5 <- block@15, arrays.1%is_original#5 <- block@16) (arrays.1%is_original#12) with arrays.1%is_original#5 +debug: Deleting Phi assignment: let arrays.1%is_original#12: bool = φ(arrays.1%is_original#5 <- block@15, arrays.1%is_original#5 <- block@16) +debug: Replaced trivial Phi node: let arrays.1%is_original#12: bool = φ(arrays.1%is_original#5 <- block@15, arrays.1%is_original#5 <- block@16) (arrays.1%is_original#12) with arrays.1%is_original#5 in current definition for 1 blocks +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#11: bool = φ(arrays.1%is_original#5 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#11: bool = φ(arrays.1%is_original#5 <- block@17, arrays.1%is_original#5 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#11: bool = φ(arrays.1%is_original#5 <- block@17, arrays.1%is_original#5 <- block@18) (arrays.1%is_original#11) with arrays.1%is_original#5 +debug: Deleting Phi assignment: let arrays.1%is_original#11: bool = φ(arrays.1%is_original#5 <- block@17, arrays.1%is_original#5 <- block@18) +debug: Replaced trivial Phi node: let arrays.1%is_original#11: bool = φ(arrays.1%is_original#5 <- block@17, arrays.1%is_original#5 <- block@18) (arrays.1%is_original#11) with arrays.1%is_original#5 in current definition for 1 blocks +debug: Added arrays.1%is_original#5 to Phi node: let arrays.1%is_original#8: bool = φ(arrays.1%is_original#0 <- block@12, arrays.1%is_original#5 <- block@19) in block@19: // after_if_else_L1 +debug: Added arrays.1%is_original#8 to Phi node: let arrays.1%is_original#7: bool = φ(arrays.1%is_original#8 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.1%is_original#8 to Phi node: let arrays.1%is_original#7: bool = φ(arrays.1%is_original#8 <- block@20, arrays.1%is_original#8 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%is_original#7: bool = φ(arrays.1%is_original#8 <- block@20, arrays.1%is_original#8 <- block@21) (arrays.1%is_original#7) with arrays.1%is_original#8 +debug: Deleting Phi assignment: let arrays.1%is_original#7: bool = φ(arrays.1%is_original#8 <- block@20, arrays.1%is_original#8 <- block@21) +debug: Replaced trivial Phi node: let arrays.1%is_original#7: bool = φ(arrays.1%is_original#8 <- block@20, arrays.1%is_original#8 <- block@21) (arrays.1%is_original#7) with arrays.1%is_original#8 in current definition for 1 blocks +debug: Terminated block@22: // after_if_else_L1 +debug: Sealing block@23: // if_body_L1 +debug: Terminated block@23: // if_body_L1 +debug: Sealing block@24: // after_if_else_L1 +debug: Created Phi assignment: let start#12: uint64 = undefined while trying to resolve 'start' in block@24: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#12: uint64 = φ(start#0 <- block@22) in block@22: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#12: uint64 = φ(start#0 <- block@22, start#0 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let start#12: uint64 = φ(start#0 <- block@22, start#0 <- block@23) (start#12) with start#0 +debug: Deleting Phi assignment: let start#12: uint64 = φ(start#0 <- block@22, start#0 <- block@23) +debug: Replaced trivial Phi node: let start#12: uint64 = φ(start#0 <- block@22, start#0 <- block@23) (start#12) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0#16: bytes = undefined while trying to resolve 'arrays.0' in block@24: // after_if_else_L1 +debug: Added arrays.0#14 to Phi node: let arrays.0#16: bytes = φ(arrays.0#14 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.0#14 to Phi node: let arrays.0#16: bytes = φ(arrays.0#14 <- block@22, arrays.0#14 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#16: bytes = φ(arrays.0#14 <- block@22, arrays.0#14 <- block@23) (arrays.0#16) with arrays.0#14 +debug: Deleting Phi assignment: let arrays.0#16: bytes = φ(arrays.0#14 <- block@22, arrays.0#14 <- block@23) +debug: Replaced trivial Phi node: let arrays.0#16: bytes = φ(arrays.0#14 <- block@22, arrays.0#14 <- block@23) (arrays.0#16) with arrays.0#14 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#16: bytes = undefined while trying to resolve 'arrays.1' in block@24: // after_if_else_L1 +debug: Added arrays.1#15 to Phi node: let arrays.1#16: bytes = φ(arrays.1#15 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.1#15 to Phi node: let arrays.1#16: bytes = φ(arrays.1#15 <- block@22, arrays.1#15 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#16: bytes = φ(arrays.1#15 <- block@22, arrays.1#15 <- block@23) (arrays.1#16) with arrays.1#15 +debug: Deleting Phi assignment: let arrays.1#16: bytes = φ(arrays.1#15 <- block@22, arrays.1#15 <- block@23) +debug: Replaced trivial Phi node: let arrays.1#16: bytes = φ(arrays.1#15 <- block@22, arrays.1#15 <- block@23) (arrays.1#16) with arrays.1#15 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#15: bytes = undefined while trying to resolve 'arrays.2' in block@24: // after_if_else_L1 +debug: Added arrays.2#12 to Phi node: let arrays.2#15: bytes = φ(arrays.2#12 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.2#12 to Phi node: let arrays.2#15: bytes = φ(arrays.2#12 <- block@22, arrays.2#12 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#15: bytes = φ(arrays.2#12 <- block@22, arrays.2#12 <- block@23) (arrays.2#15) with arrays.2#12 +debug: Deleting Phi assignment: let arrays.2#15: bytes = φ(arrays.2#12 <- block@22, arrays.2#12 <- block@23) +debug: Replaced trivial Phi node: let arrays.2#15: bytes = φ(arrays.2#12 <- block@22, arrays.2#12 <- block@23) (arrays.2#15) with arrays.2#12 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2%is_original#9: bool = undefined while trying to resolve 'arrays.2%is_original' in block@24: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#10: bool = undefined while trying to resolve 'arrays.2%is_original' in block@22: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#11: bool = undefined while trying to resolve 'arrays.2%is_original' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.2%is_original#12: bool = undefined while trying to resolve 'arrays.2%is_original' in block@12: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#12: bool = φ(arrays.2%is_original#0 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#12: bool = φ(arrays.2%is_original#0 <- block@10, arrays.2%is_original#0 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#12: bool = φ(arrays.2%is_original#0 <- block@10, arrays.2%is_original#0 <- block@11) (arrays.2%is_original#12) with arrays.2%is_original#0 +debug: Deleting Phi assignment: let arrays.2%is_original#12: bool = φ(arrays.2%is_original#0 <- block@10, arrays.2%is_original#0 <- block@11) +debug: Replaced trivial Phi node: let arrays.2%is_original#12: bool = φ(arrays.2%is_original#0 <- block@10, arrays.2%is_original#0 <- block@11) (arrays.2%is_original#12) with arrays.2%is_original#0 in current definition for 1 blocks +debug: Added arrays.2%is_original#0 to Phi node: let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%is_original#13: bool = undefined while trying to resolve 'arrays.2%is_original' in block@19: // after_if_else_L1 +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#13: bool = φ(arrays.2%is_original#6 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#13: bool = φ(arrays.2%is_original#6 <- block@17, arrays.2%is_original#6 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#13: bool = φ(arrays.2%is_original#6 <- block@17, arrays.2%is_original#6 <- block@18) (arrays.2%is_original#13) with arrays.2%is_original#6 +debug: Deleting Phi assignment: let arrays.2%is_original#13: bool = φ(arrays.2%is_original#6 <- block@17, arrays.2%is_original#6 <- block@18) +debug: Replaced trivial Phi node: let arrays.2%is_original#13: bool = φ(arrays.2%is_original#6 <- block@17, arrays.2%is_original#6 <- block@18) (arrays.2%is_original#13) with arrays.2%is_original#6 in current definition for 1 blocks +debug: Added arrays.2%is_original#6 to Phi node: let arrays.2%is_original#11: bool = φ(arrays.2%is_original#0 <- block@12, arrays.2%is_original#6 <- block@19) in block@19: // after_if_else_L1 +debug: Added arrays.2%is_original#11 to Phi node: let arrays.2%is_original#10: bool = φ(arrays.2%is_original#11 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.2%is_original#11 to Phi node: let arrays.2%is_original#10: bool = φ(arrays.2%is_original#11 <- block@20, arrays.2%is_original#11 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#10: bool = φ(arrays.2%is_original#11 <- block@20, arrays.2%is_original#11 <- block@21) (arrays.2%is_original#10) with arrays.2%is_original#11 +debug: Deleting Phi assignment: let arrays.2%is_original#10: bool = φ(arrays.2%is_original#11 <- block@20, arrays.2%is_original#11 <- block@21) +debug: Replaced trivial Phi node: let arrays.2%is_original#10: bool = φ(arrays.2%is_original#11 <- block@20, arrays.2%is_original#11 <- block@21) (arrays.2%is_original#10) with arrays.2%is_original#11 in current definition for 1 blocks +debug: Added arrays.2%is_original#11 to Phi node: let arrays.2%is_original#9: bool = φ(arrays.2%is_original#11 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.2%is_original#11 to Phi node: let arrays.2%is_original#9: bool = φ(arrays.2%is_original#11 <- block@22, arrays.2%is_original#11 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%is_original#9: bool = φ(arrays.2%is_original#11 <- block@22, arrays.2%is_original#11 <- block@23) (arrays.2%is_original#9) with arrays.2%is_original#11 +debug: Deleting Phi assignment: let arrays.2%is_original#9: bool = φ(arrays.2%is_original#11 <- block@22, arrays.2%is_original#11 <- block@23) +debug: Replaced trivial Phi node: let arrays.2%is_original#9: bool = φ(arrays.2%is_original#11 <- block@22, arrays.2%is_original#11 <- block@23) (arrays.2%is_original#9) with arrays.2%is_original#11 in current definition for 1 blocks +debug: Terminated block@24: // after_if_else_L1 +debug: Sealing block@25: // if_body_L1 +debug: Terminated block@25: // if_body_L1 +debug: Sealing block@26: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0#17: bytes = undefined while trying to resolve 'arrays.0' in block@26: // after_if_else_L1 +debug: Added arrays.0#14 to Phi node: let arrays.0#17: bytes = φ(arrays.0#14 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.0#14 to Phi node: let arrays.0#17: bytes = φ(arrays.0#14 <- block@24, arrays.0#14 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0#17: bytes = φ(arrays.0#14 <- block@24, arrays.0#14 <- block@25) (arrays.0#17) with arrays.0#14 +debug: Deleting Phi assignment: let arrays.0#17: bytes = φ(arrays.0#14 <- block@24, arrays.0#14 <- block@25) +debug: Replaced trivial Phi node: let arrays.0#17: bytes = φ(arrays.0#14 <- block@24, arrays.0#14 <- block@25) (arrays.0#17) with arrays.0#14 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1#17: bytes = undefined while trying to resolve 'arrays.1' in block@26: // after_if_else_L1 +debug: Added arrays.1#15 to Phi node: let arrays.1#17: bytes = φ(arrays.1#15 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.1#15 to Phi node: let arrays.1#17: bytes = φ(arrays.1#15 <- block@24, arrays.1#15 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1#17: bytes = φ(arrays.1#15 <- block@24, arrays.1#15 <- block@25) (arrays.1#17) with arrays.1#15 +debug: Deleting Phi assignment: let arrays.1#17: bytes = φ(arrays.1#15 <- block@24, arrays.1#15 <- block@25) +debug: Replaced trivial Phi node: let arrays.1#17: bytes = φ(arrays.1#15 <- block@24, arrays.1#15 <- block@25) (arrays.1#17) with arrays.1#15 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2#17: bytes = undefined while trying to resolve 'arrays.2' in block@26: // after_if_else_L1 +debug: Added arrays.2#16 to Phi node: let arrays.2#17: bytes = φ(arrays.2#16 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.2#16 to Phi node: let arrays.2#17: bytes = φ(arrays.2#16 <- block@24, arrays.2#16 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2#17: bytes = φ(arrays.2#16 <- block@24, arrays.2#16 <- block@25) (arrays.2#17) with arrays.2#16 +debug: Deleting Phi assignment: let arrays.2#17: bytes = φ(arrays.2#16 <- block@24, arrays.2#16 <- block@25) +debug: Replaced trivial Phi node: let arrays.2#17: bytes = φ(arrays.2#16 <- block@24, arrays.2#16 <- block@25) (arrays.2#17) with arrays.2#16 in current definition for 1 blocks +debug: Created Phi assignment: let start#13: uint64 = undefined while trying to resolve 'start' in block@26: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#13: uint64 = φ(start#0 <- block@24) in block@24: // after_if_else_L1 +debug: Added start#0 to Phi node: let start#13: uint64 = φ(start#0 <- block@24, start#0 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let start#13: uint64 = φ(start#0 <- block@24, start#0 <- block@25) (start#13) with start#0 +debug: Deleting Phi assignment: let start#13: uint64 = φ(start#0 <- block@24, start#0 <- block@25) +debug: Replaced trivial Phi node: let start#13: uint64 = φ(start#0 <- block@24, start#0 <- block@25) (start#13) with start#0 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.0%out#5: bytes = undefined while trying to resolve 'arrays.0%out' in block@26: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#6: bytes = undefined while trying to resolve 'arrays.0%out' in block@24: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#7: bytes = undefined while trying to resolve 'arrays.0%out' in block@22: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#8: bytes = undefined while trying to resolve 'arrays.0%out' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.0%out#9: bytes = undefined while trying to resolve 'arrays.0%out' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#10: bytes = undefined while trying to resolve 'arrays.0%out' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#11: bytes = undefined while trying to resolve 'arrays.0%out' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#12: bytes = undefined while trying to resolve 'arrays.0%out' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#13: bytes = undefined while trying to resolve 'arrays.0%out' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#14: bytes = undefined while trying to resolve 'arrays.0%out' in block@2: // after_if_else_L1 +debug: Added arrays.0%out#0 to Phi node: let arrays.0%out#14: bytes = φ(arrays.0%out#0 <- block@0) in block@0: // L130 +debug: Added arrays.0%out#1 to Phi node: let arrays.0%out#14: bytes = φ(arrays.0%out#0 <- block@0, arrays.0%out#1 <- block@1) in block@1: // if_body_L1 +debug: Added arrays.0%out#14 to Phi node: let arrays.0%out#13: bytes = φ(arrays.0%out#14 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.0%out#14 to Phi node: let arrays.0%out#13: bytes = φ(arrays.0%out#14 <- block@2, arrays.0%out#14 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#13: bytes = φ(arrays.0%out#14 <- block@2, arrays.0%out#14 <- block@3) (arrays.0%out#13) with arrays.0%out#14 +debug: Deleting Phi assignment: let arrays.0%out#13: bytes = φ(arrays.0%out#14 <- block@2, arrays.0%out#14 <- block@3) +debug: Replaced trivial Phi node: let arrays.0%out#13: bytes = φ(arrays.0%out#14 <- block@2, arrays.0%out#14 <- block@3) (arrays.0%out#13) with arrays.0%out#14 in current definition for 1 blocks +debug: Added arrays.0%out#14 to Phi node: let arrays.0%out#12: bytes = φ(arrays.0%out#14 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.0%out#14 to Phi node: let arrays.0%out#12: bytes = φ(arrays.0%out#14 <- block@4, arrays.0%out#14 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#12: bytes = φ(arrays.0%out#14 <- block@4, arrays.0%out#14 <- block@5) (arrays.0%out#12) with arrays.0%out#14 +debug: Deleting Phi assignment: let arrays.0%out#12: bytes = φ(arrays.0%out#14 <- block@4, arrays.0%out#14 <- block@5) +debug: Replaced trivial Phi node: let arrays.0%out#12: bytes = φ(arrays.0%out#14 <- block@4, arrays.0%out#14 <- block@5) (arrays.0%out#12) with arrays.0%out#14 in current definition for 1 blocks +debug: Added arrays.0%out#14 to Phi node: let arrays.0%out#11: bytes = φ(arrays.0%out#14 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.0%out#2 to Phi node: let arrays.0%out#11: bytes = φ(arrays.0%out#14 <- block@6, arrays.0%out#2 <- block@7) in block@7: // if_body_L1 +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#10: bytes = φ(arrays.0%out#11 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#10: bytes = φ(arrays.0%out#11 <- block@8, arrays.0%out#11 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#10: bytes = φ(arrays.0%out#11 <- block@8, arrays.0%out#11 <- block@9) (arrays.0%out#10) with arrays.0%out#11 +debug: Deleting Phi assignment: let arrays.0%out#10: bytes = φ(arrays.0%out#11 <- block@8, arrays.0%out#11 <- block@9) +debug: Replaced trivial Phi node: let arrays.0%out#10: bytes = φ(arrays.0%out#11 <- block@8, arrays.0%out#11 <- block@9) (arrays.0%out#10) with arrays.0%out#11 in current definition for 1 blocks +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#9: bytes = φ(arrays.0%out#11 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#9: bytes = φ(arrays.0%out#11 <- block@10, arrays.0%out#11 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#9: bytes = φ(arrays.0%out#11 <- block@10, arrays.0%out#11 <- block@11) (arrays.0%out#9) with arrays.0%out#11 +debug: Deleting Phi assignment: let arrays.0%out#9: bytes = φ(arrays.0%out#11 <- block@10, arrays.0%out#11 <- block@11) +debug: Replaced trivial Phi node: let arrays.0%out#9: bytes = φ(arrays.0%out#11 <- block@10, arrays.0%out#11 <- block@11) (arrays.0%out#9) with arrays.0%out#11 in current definition for 1 blocks +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#8: bytes = φ(arrays.0%out#11 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#15: bytes = undefined while trying to resolve 'arrays.0%out' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#16: bytes = undefined while trying to resolve 'arrays.0%out' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.0%out#17: bytes = undefined while trying to resolve 'arrays.0%out' in block@15: // after_if_else_L1 +debug: Added arrays.0%out#11 to Phi node: let arrays.0%out#17: bytes = φ(arrays.0%out#11 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.0%out#3 to Phi node: let arrays.0%out#17: bytes = φ(arrays.0%out#11 <- block@13, arrays.0%out#3 <- block@14) in block@14: // if_body_L1 +debug: Added arrays.0%out#17 to Phi node: let arrays.0%out#16: bytes = φ(arrays.0%out#17 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.0%out#17 to Phi node: let arrays.0%out#16: bytes = φ(arrays.0%out#17 <- block@15, arrays.0%out#17 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#16: bytes = φ(arrays.0%out#17 <- block@15, arrays.0%out#17 <- block@16) (arrays.0%out#16) with arrays.0%out#17 +debug: Deleting Phi assignment: let arrays.0%out#16: bytes = φ(arrays.0%out#17 <- block@15, arrays.0%out#17 <- block@16) +debug: Replaced trivial Phi node: let arrays.0%out#16: bytes = φ(arrays.0%out#17 <- block@15, arrays.0%out#17 <- block@16) (arrays.0%out#16) with arrays.0%out#17 in current definition for 1 blocks +debug: Added arrays.0%out#17 to Phi node: let arrays.0%out#15: bytes = φ(arrays.0%out#17 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.0%out#17 to Phi node: let arrays.0%out#15: bytes = φ(arrays.0%out#17 <- block@17, arrays.0%out#17 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#15: bytes = φ(arrays.0%out#17 <- block@17, arrays.0%out#17 <- block@18) (arrays.0%out#15) with arrays.0%out#17 +debug: Deleting Phi assignment: let arrays.0%out#15: bytes = φ(arrays.0%out#17 <- block@17, arrays.0%out#17 <- block@18) +debug: Replaced trivial Phi node: let arrays.0%out#15: bytes = φ(arrays.0%out#17 <- block@17, arrays.0%out#17 <- block@18) (arrays.0%out#15) with arrays.0%out#17 in current definition for 1 blocks +debug: Added arrays.0%out#17 to Phi node: let arrays.0%out#8: bytes = φ(arrays.0%out#11 <- block@12, arrays.0%out#17 <- block@19) in block@19: // after_if_else_L1 +debug: Added arrays.0%out#8 to Phi node: let arrays.0%out#7: bytes = φ(arrays.0%out#8 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.0%out#4 to Phi node: let arrays.0%out#7: bytes = φ(arrays.0%out#8 <- block@20, arrays.0%out#4 <- block@21) in block@21: // if_body_L1 +debug: Added arrays.0%out#7 to Phi node: let arrays.0%out#6: bytes = φ(arrays.0%out#7 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.0%out#7 to Phi node: let arrays.0%out#6: bytes = φ(arrays.0%out#7 <- block@22, arrays.0%out#7 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#6: bytes = φ(arrays.0%out#7 <- block@22, arrays.0%out#7 <- block@23) (arrays.0%out#6) with arrays.0%out#7 +debug: Deleting Phi assignment: let arrays.0%out#6: bytes = φ(arrays.0%out#7 <- block@22, arrays.0%out#7 <- block@23) +debug: Replaced trivial Phi node: let arrays.0%out#6: bytes = φ(arrays.0%out#7 <- block@22, arrays.0%out#7 <- block@23) (arrays.0%out#6) with arrays.0%out#7 in current definition for 1 blocks +debug: Added arrays.0%out#7 to Phi node: let arrays.0%out#5: bytes = φ(arrays.0%out#7 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.0%out#7 to Phi node: let arrays.0%out#5: bytes = φ(arrays.0%out#7 <- block@24, arrays.0%out#7 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.0%out#5: bytes = φ(arrays.0%out#7 <- block@24, arrays.0%out#7 <- block@25) (arrays.0%out#5) with arrays.0%out#7 +debug: Deleting Phi assignment: let arrays.0%out#5: bytes = φ(arrays.0%out#7 <- block@24, arrays.0%out#7 <- block@25) +debug: Replaced trivial Phi node: let arrays.0%out#5: bytes = φ(arrays.0%out#7 <- block@24, arrays.0%out#7 <- block@25) (arrays.0%out#5) with arrays.0%out#7 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.1%out#5: bytes = undefined while trying to resolve 'arrays.1%out' in block@26: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#6: bytes = undefined while trying to resolve 'arrays.1%out' in block@24: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#7: bytes = undefined while trying to resolve 'arrays.1%out' in block@22: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#8: bytes = undefined while trying to resolve 'arrays.1%out' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.1%out#9: bytes = undefined while trying to resolve 'arrays.1%out' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#10: bytes = undefined while trying to resolve 'arrays.1%out' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#11: bytes = undefined while trying to resolve 'arrays.1%out' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#12: bytes = undefined while trying to resolve 'arrays.1%out' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#13: bytes = undefined while trying to resolve 'arrays.1%out' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#14: bytes = undefined while trying to resolve 'arrays.1%out' in block@2: // after_if_else_L1 +debug: Added arrays.1%out#0 to Phi node: let arrays.1%out#14: bytes = φ(arrays.1%out#0 <- block@0) in block@0: // L130 +debug: Added arrays.1%out#0 to Phi node: let arrays.1%out#14: bytes = φ(arrays.1%out#0 <- block@0, arrays.1%out#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#14: bytes = φ(arrays.1%out#0 <- block@0, arrays.1%out#0 <- block@1) (arrays.1%out#14) with arrays.1%out#0 +debug: Deleting Phi assignment: let arrays.1%out#14: bytes = φ(arrays.1%out#0 <- block@0, arrays.1%out#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.1%out#14: bytes = φ(arrays.1%out#0 <- block@0, arrays.1%out#0 <- block@1) (arrays.1%out#14) with arrays.1%out#0 in current definition for 1 blocks +debug: Added arrays.1%out#0 to Phi node: let arrays.1%out#13: bytes = φ(arrays.1%out#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.1%out#1 to Phi node: let arrays.1%out#13: bytes = φ(arrays.1%out#0 <- block@2, arrays.1%out#1 <- block@3) in block@3: // if_body_L1 +debug: Added arrays.1%out#13 to Phi node: let arrays.1%out#12: bytes = φ(arrays.1%out#13 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.1%out#13 to Phi node: let arrays.1%out#12: bytes = φ(arrays.1%out#13 <- block@4, arrays.1%out#13 <- block@5) in block@5: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#12: bytes = φ(arrays.1%out#13 <- block@4, arrays.1%out#13 <- block@5) (arrays.1%out#12) with arrays.1%out#13 +debug: Deleting Phi assignment: let arrays.1%out#12: bytes = φ(arrays.1%out#13 <- block@4, arrays.1%out#13 <- block@5) +debug: Replaced trivial Phi node: let arrays.1%out#12: bytes = φ(arrays.1%out#13 <- block@4, arrays.1%out#13 <- block@5) (arrays.1%out#12) with arrays.1%out#13 in current definition for 1 blocks +debug: Added arrays.1%out#13 to Phi node: let arrays.1%out#11: bytes = φ(arrays.1%out#13 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.1%out#13 to Phi node: let arrays.1%out#11: bytes = φ(arrays.1%out#13 <- block@6, arrays.1%out#13 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#11: bytes = φ(arrays.1%out#13 <- block@6, arrays.1%out#13 <- block@7) (arrays.1%out#11) with arrays.1%out#13 +debug: Deleting Phi assignment: let arrays.1%out#11: bytes = φ(arrays.1%out#13 <- block@6, arrays.1%out#13 <- block@7) +debug: Replaced trivial Phi node: let arrays.1%out#11: bytes = φ(arrays.1%out#13 <- block@6, arrays.1%out#13 <- block@7) (arrays.1%out#11) with arrays.1%out#13 in current definition for 1 blocks +debug: Added arrays.1%out#13 to Phi node: let arrays.1%out#10: bytes = φ(arrays.1%out#13 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.1%out#2 to Phi node: let arrays.1%out#10: bytes = φ(arrays.1%out#13 <- block@8, arrays.1%out#2 <- block@9) in block@9: // if_body_L1 +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#9: bytes = φ(arrays.1%out#10 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#9: bytes = φ(arrays.1%out#10 <- block@10, arrays.1%out#10 <- block@11) in block@11: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#9: bytes = φ(arrays.1%out#10 <- block@10, arrays.1%out#10 <- block@11) (arrays.1%out#9) with arrays.1%out#10 +debug: Deleting Phi assignment: let arrays.1%out#9: bytes = φ(arrays.1%out#10 <- block@10, arrays.1%out#10 <- block@11) +debug: Replaced trivial Phi node: let arrays.1%out#9: bytes = φ(arrays.1%out#10 <- block@10, arrays.1%out#10 <- block@11) (arrays.1%out#9) with arrays.1%out#10 in current definition for 1 blocks +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#8: bytes = φ(arrays.1%out#10 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#15: bytes = undefined while trying to resolve 'arrays.1%out' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#16: bytes = undefined while trying to resolve 'arrays.1%out' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.1%out#17: bytes = undefined while trying to resolve 'arrays.1%out' in block@15: // after_if_else_L1 +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#17: bytes = φ(arrays.1%out#10 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#17: bytes = φ(arrays.1%out#10 <- block@13, arrays.1%out#10 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#17: bytes = φ(arrays.1%out#10 <- block@13, arrays.1%out#10 <- block@14) (arrays.1%out#17) with arrays.1%out#10 +debug: Deleting Phi assignment: let arrays.1%out#17: bytes = φ(arrays.1%out#10 <- block@13, arrays.1%out#10 <- block@14) +debug: Replaced trivial Phi node: let arrays.1%out#17: bytes = φ(arrays.1%out#10 <- block@13, arrays.1%out#10 <- block@14) (arrays.1%out#17) with arrays.1%out#10 in current definition for 1 blocks +debug: Added arrays.1%out#10 to Phi node: let arrays.1%out#16: bytes = φ(arrays.1%out#10 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.1%out#3 to Phi node: let arrays.1%out#16: bytes = φ(arrays.1%out#10 <- block@15, arrays.1%out#3 <- block@16) in block@16: // if_body_L1 +debug: Added arrays.1%out#16 to Phi node: let arrays.1%out#15: bytes = φ(arrays.1%out#16 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.1%out#16 to Phi node: let arrays.1%out#15: bytes = φ(arrays.1%out#16 <- block@17, arrays.1%out#16 <- block@18) in block@18: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#15: bytes = φ(arrays.1%out#16 <- block@17, arrays.1%out#16 <- block@18) (arrays.1%out#15) with arrays.1%out#16 +debug: Deleting Phi assignment: let arrays.1%out#15: bytes = φ(arrays.1%out#16 <- block@17, arrays.1%out#16 <- block@18) +debug: Replaced trivial Phi node: let arrays.1%out#15: bytes = φ(arrays.1%out#16 <- block@17, arrays.1%out#16 <- block@18) (arrays.1%out#15) with arrays.1%out#16 in current definition for 1 blocks +debug: Added arrays.1%out#16 to Phi node: let arrays.1%out#8: bytes = φ(arrays.1%out#10 <- block@12, arrays.1%out#16 <- block@19) in block@19: // after_if_else_L1 +debug: Added arrays.1%out#8 to Phi node: let arrays.1%out#7: bytes = φ(arrays.1%out#8 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.1%out#8 to Phi node: let arrays.1%out#7: bytes = φ(arrays.1%out#8 <- block@20, arrays.1%out#8 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#7: bytes = φ(arrays.1%out#8 <- block@20, arrays.1%out#8 <- block@21) (arrays.1%out#7) with arrays.1%out#8 +debug: Deleting Phi assignment: let arrays.1%out#7: bytes = φ(arrays.1%out#8 <- block@20, arrays.1%out#8 <- block@21) +debug: Replaced trivial Phi node: let arrays.1%out#7: bytes = φ(arrays.1%out#8 <- block@20, arrays.1%out#8 <- block@21) (arrays.1%out#7) with arrays.1%out#8 in current definition for 1 blocks +debug: Added arrays.1%out#8 to Phi node: let arrays.1%out#6: bytes = φ(arrays.1%out#8 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.1%out#4 to Phi node: let arrays.1%out#6: bytes = φ(arrays.1%out#8 <- block@22, arrays.1%out#4 <- block@23) in block@23: // if_body_L1 +debug: Added arrays.1%out#6 to Phi node: let arrays.1%out#5: bytes = φ(arrays.1%out#6 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.1%out#6 to Phi node: let arrays.1%out#5: bytes = φ(arrays.1%out#6 <- block@24, arrays.1%out#6 <- block@25) in block@25: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.1%out#5: bytes = φ(arrays.1%out#6 <- block@24, arrays.1%out#6 <- block@25) (arrays.1%out#5) with arrays.1%out#6 +debug: Deleting Phi assignment: let arrays.1%out#5: bytes = φ(arrays.1%out#6 <- block@24, arrays.1%out#6 <- block@25) +debug: Replaced trivial Phi node: let arrays.1%out#5: bytes = φ(arrays.1%out#6 <- block@24, arrays.1%out#6 <- block@25) (arrays.1%out#5) with arrays.1%out#6 in current definition for 1 blocks +debug: Created Phi assignment: let arrays.2%out#5: bytes = undefined while trying to resolve 'arrays.2%out' in block@26: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#6: bytes = undefined while trying to resolve 'arrays.2%out' in block@24: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#7: bytes = undefined while trying to resolve 'arrays.2%out' in block@22: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#8: bytes = undefined while trying to resolve 'arrays.2%out' in block@20: // after_if_else_L147 +debug: Created Phi assignment: let arrays.2%out#9: bytes = undefined while trying to resolve 'arrays.2%out' in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#10: bytes = undefined while trying to resolve 'arrays.2%out' in block@10: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#11: bytes = undefined while trying to resolve 'arrays.2%out' in block@8: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#12: bytes = undefined while trying to resolve 'arrays.2%out' in block@6: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#13: bytes = undefined while trying to resolve 'arrays.2%out' in block@4: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#14: bytes = undefined while trying to resolve 'arrays.2%out' in block@2: // after_if_else_L1 +debug: Added arrays.2%out#0 to Phi node: let arrays.2%out#14: bytes = φ(arrays.2%out#0 <- block@0) in block@0: // L130 +debug: Added arrays.2%out#0 to Phi node: let arrays.2%out#14: bytes = φ(arrays.2%out#0 <- block@0, arrays.2%out#0 <- block@1) in block@1: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#14: bytes = φ(arrays.2%out#0 <- block@0, arrays.2%out#0 <- block@1) (arrays.2%out#14) with arrays.2%out#0 +debug: Deleting Phi assignment: let arrays.2%out#14: bytes = φ(arrays.2%out#0 <- block@0, arrays.2%out#0 <- block@1) +debug: Replaced trivial Phi node: let arrays.2%out#14: bytes = φ(arrays.2%out#0 <- block@0, arrays.2%out#0 <- block@1) (arrays.2%out#14) with arrays.2%out#0 in current definition for 1 blocks +debug: Added arrays.2%out#0 to Phi node: let arrays.2%out#13: bytes = φ(arrays.2%out#0 <- block@2) in block@2: // after_if_else_L1 +debug: Added arrays.2%out#0 to Phi node: let arrays.2%out#13: bytes = φ(arrays.2%out#0 <- block@2, arrays.2%out#0 <- block@3) in block@3: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#13: bytes = φ(arrays.2%out#0 <- block@2, arrays.2%out#0 <- block@3) (arrays.2%out#13) with arrays.2%out#0 +debug: Deleting Phi assignment: let arrays.2%out#13: bytes = φ(arrays.2%out#0 <- block@2, arrays.2%out#0 <- block@3) +debug: Replaced trivial Phi node: let arrays.2%out#13: bytes = φ(arrays.2%out#0 <- block@2, arrays.2%out#0 <- block@3) (arrays.2%out#13) with arrays.2%out#0 in current definition for 1 blocks +debug: Added arrays.2%out#0 to Phi node: let arrays.2%out#12: bytes = φ(arrays.2%out#0 <- block@4) in block@4: // after_if_else_L1 +debug: Added arrays.2%out#1 to Phi node: let arrays.2%out#12: bytes = φ(arrays.2%out#0 <- block@4, arrays.2%out#1 <- block@5) in block@5: // if_body_L1 +debug: Added arrays.2%out#12 to Phi node: let arrays.2%out#11: bytes = φ(arrays.2%out#12 <- block@6) in block@6: // after_if_else_L1 +debug: Added arrays.2%out#12 to Phi node: let arrays.2%out#11: bytes = φ(arrays.2%out#12 <- block@6, arrays.2%out#12 <- block@7) in block@7: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#11: bytes = φ(arrays.2%out#12 <- block@6, arrays.2%out#12 <- block@7) (arrays.2%out#11) with arrays.2%out#12 +debug: Deleting Phi assignment: let arrays.2%out#11: bytes = φ(arrays.2%out#12 <- block@6, arrays.2%out#12 <- block@7) +debug: Replaced trivial Phi node: let arrays.2%out#11: bytes = φ(arrays.2%out#12 <- block@6, arrays.2%out#12 <- block@7) (arrays.2%out#11) with arrays.2%out#12 in current definition for 1 blocks +debug: Added arrays.2%out#12 to Phi node: let arrays.2%out#10: bytes = φ(arrays.2%out#12 <- block@8) in block@8: // after_if_else_L1 +debug: Added arrays.2%out#12 to Phi node: let arrays.2%out#10: bytes = φ(arrays.2%out#12 <- block@8, arrays.2%out#12 <- block@9) in block@9: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#10: bytes = φ(arrays.2%out#12 <- block@8, arrays.2%out#12 <- block@9) (arrays.2%out#10) with arrays.2%out#12 +debug: Deleting Phi assignment: let arrays.2%out#10: bytes = φ(arrays.2%out#12 <- block@8, arrays.2%out#12 <- block@9) +debug: Replaced trivial Phi node: let arrays.2%out#10: bytes = φ(arrays.2%out#12 <- block@8, arrays.2%out#12 <- block@9) (arrays.2%out#10) with arrays.2%out#12 in current definition for 1 blocks +debug: Added arrays.2%out#12 to Phi node: let arrays.2%out#9: bytes = φ(arrays.2%out#12 <- block@10) in block@10: // after_if_else_L1 +debug: Added arrays.2%out#2 to Phi node: let arrays.2%out#9: bytes = φ(arrays.2%out#12 <- block@10, arrays.2%out#2 <- block@11) in block@11: // if_body_L1 +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#8: bytes = φ(arrays.2%out#9 <- block@12) in block@12: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#15: bytes = undefined while trying to resolve 'arrays.2%out' in block@19: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#16: bytes = undefined while trying to resolve 'arrays.2%out' in block@17: // after_if_else_L1 +debug: Created Phi assignment: let arrays.2%out#17: bytes = undefined while trying to resolve 'arrays.2%out' in block@15: // after_if_else_L1 +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#17: bytes = φ(arrays.2%out#9 <- block@13) in block@13: // if_body_L148 +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#17: bytes = φ(arrays.2%out#9 <- block@13, arrays.2%out#9 <- block@14) in block@14: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#17: bytes = φ(arrays.2%out#9 <- block@13, arrays.2%out#9 <- block@14) (arrays.2%out#17) with arrays.2%out#9 +debug: Deleting Phi assignment: let arrays.2%out#17: bytes = φ(arrays.2%out#9 <- block@13, arrays.2%out#9 <- block@14) +debug: Replaced trivial Phi node: let arrays.2%out#17: bytes = φ(arrays.2%out#9 <- block@13, arrays.2%out#9 <- block@14) (arrays.2%out#17) with arrays.2%out#9 in current definition for 1 blocks +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#16: bytes = φ(arrays.2%out#9 <- block@15) in block@15: // after_if_else_L1 +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#16: bytes = φ(arrays.2%out#9 <- block@15, arrays.2%out#9 <- block@16) in block@16: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#16: bytes = φ(arrays.2%out#9 <- block@15, arrays.2%out#9 <- block@16) (arrays.2%out#16) with arrays.2%out#9 +debug: Deleting Phi assignment: let arrays.2%out#16: bytes = φ(arrays.2%out#9 <- block@15, arrays.2%out#9 <- block@16) +debug: Replaced trivial Phi node: let arrays.2%out#16: bytes = φ(arrays.2%out#9 <- block@15, arrays.2%out#9 <- block@16) (arrays.2%out#16) with arrays.2%out#9 in current definition for 1 blocks +debug: Added arrays.2%out#9 to Phi node: let arrays.2%out#15: bytes = φ(arrays.2%out#9 <- block@17) in block@17: // after_if_else_L1 +debug: Added arrays.2%out#3 to Phi node: let arrays.2%out#15: bytes = φ(arrays.2%out#9 <- block@17, arrays.2%out#3 <- block@18) in block@18: // if_body_L1 +debug: Added arrays.2%out#15 to Phi node: let arrays.2%out#8: bytes = φ(arrays.2%out#9 <- block@12, arrays.2%out#15 <- block@19) in block@19: // after_if_else_L1 +debug: Added arrays.2%out#8 to Phi node: let arrays.2%out#7: bytes = φ(arrays.2%out#8 <- block@20) in block@20: // after_if_else_L147 +debug: Added arrays.2%out#8 to Phi node: let arrays.2%out#7: bytes = φ(arrays.2%out#8 <- block@20, arrays.2%out#8 <- block@21) in block@21: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#7: bytes = φ(arrays.2%out#8 <- block@20, arrays.2%out#8 <- block@21) (arrays.2%out#7) with arrays.2%out#8 +debug: Deleting Phi assignment: let arrays.2%out#7: bytes = φ(arrays.2%out#8 <- block@20, arrays.2%out#8 <- block@21) +debug: Replaced trivial Phi node: let arrays.2%out#7: bytes = φ(arrays.2%out#8 <- block@20, arrays.2%out#8 <- block@21) (arrays.2%out#7) with arrays.2%out#8 in current definition for 1 blocks +debug: Added arrays.2%out#8 to Phi node: let arrays.2%out#6: bytes = φ(arrays.2%out#8 <- block@22) in block@22: // after_if_else_L1 +debug: Added arrays.2%out#8 to Phi node: let arrays.2%out#6: bytes = φ(arrays.2%out#8 <- block@22, arrays.2%out#8 <- block@23) in block@23: // if_body_L1 +debug: Replacing trivial Phi node: let arrays.2%out#6: bytes = φ(arrays.2%out#8 <- block@22, arrays.2%out#8 <- block@23) (arrays.2%out#6) with arrays.2%out#8 +debug: Deleting Phi assignment: let arrays.2%out#6: bytes = φ(arrays.2%out#8 <- block@22, arrays.2%out#8 <- block@23) +debug: Replaced trivial Phi node: let arrays.2%out#6: bytes = φ(arrays.2%out#8 <- block@22, arrays.2%out#8 <- block@23) (arrays.2%out#6) with arrays.2%out#8 in current definition for 1 blocks +debug: Added arrays.2%out#8 to Phi node: let arrays.2%out#5: bytes = φ(arrays.2%out#8 <- block@24) in block@24: // after_if_else_L1 +debug: Added arrays.2%out#4 to Phi node: let arrays.2%out#5: bytes = φ(arrays.2%out#8 <- block@24, arrays.2%out#4 <- block@25) in block@25: // if_body_L1 +debug: Terminated block@26: // after_if_else_L1 debug: Sealing block@0: // L28 debug: Terminated block@0: // L28 -debug: Sealing block@0: // L111 -debug: Terminated block@0: // L111 +debug: Sealing block@0: // L158 +debug: Terminated block@0: // L158 debug: Sealing block@0: // L4 debug: Terminated block@0: // L4 debug: Sealing block@1: // abi_routing_L4 @@ -2645,6 +3550,8 @@ debug: Optimizing subroutine test_cases.arc4_types.structs.add debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: v1#0, v1%out#0 +debug: Found equivalence set: v2#0, v2%out#0 debug: Optimizer: Intrinsic Simplifier debug: Simplified (extract3 v1#0 0u 8u) // on error: Index access is out of bounds to ((extract 0 8) v1#0) // on error: Index access is out of bounds debug: Simplified (extract3 v2#0 0u 8u) // on error: Index access is out of bounds to ((extract 0 8) v2#0) // on error: Index access is out of bounds @@ -2652,6 +3559,8 @@ debug: Simplified (extract3 v1#0 8u 8u) // on error: Index access is out of boun debug: Simplified (extract3 v2#0 8u 8u) // on error: Index access is out of bounds to ((extract 8 8) v2#0) // on error: Index access is out of bounds debug: Simplified (concat 0x tmp%2#0) to tmp%2#0 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable v1%is_original#0 +debug: Removing unused variable v2%is_original#0 debug: Removing unused variable current_tail_offset%0#0 debug: Removing unused variable encoded_tuple_buffer%0#0 debug: Optimizer: Inner Txn Field Replacer @@ -2680,8 +3589,11 @@ debug: Optimizing subroutine test_cases.arc4_types.structs.check debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: flags#0, flags%out#0 +debug: Replacing {flags%out#0} with flags#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables +debug: Removing unused variable flags%is_original#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -2694,11 +3606,14 @@ debug: Optimizing subroutine test_cases.arc4_types.structs.nested_decode debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: vector_flags#0, vector_flags%out#0 +debug: Replacing {vector_flags%out#0} with vector_flags#0 made 1 modifications debug: Optimizer: Intrinsic Simplifier debug: Simplified (extract3 vector_flags#0 0u 16u) // on error: Index access is out of bounds to ((extract 0 16) vector_flags#0) // on error: Index access is out of bounds debug: Simplified (extract3 tmp%0#0 0u 8u) // on error: Index access is out of bounds to ((extract 0 8) tmp%0#0) // on error: Index access is out of bounds debug: Simplified (extract3 vector_flags#0 16u 1u) // on error: Index access is out of bounds to ((extract 16 1) vector_flags#0) // on error: Index access is out of bounds debug: Optimizer: Remove Unused Variables +debug: Removing unused variable vector_flags%is_original#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13345,10 +14260,10 @@ debug: _puya_lib.arc4.dynamic_array_concat_bits f-stack entry: ['i#0', 'tmp%6#0' debug: _puya_lib.arc4.dynamic_array_concat_bits f-stack on first store: ['array_length#0', 'result#0', 'current_bytes#0', 'required_bytes#0', 'result#7'] debug: _puya_lib.arc4.recalculate_head_for_elements_with_byte_length_head f-stack entry: [] debug: _puya_lib.arc4.recalculate_head_for_elements_with_byte_length_head f-stack on first store: ['tmp%0#0', 'head_offset#0', 'tail_offset#0'] -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.ir -info: optimizing test_cases.arc4_types.mutable_params.Arc4MutableParamsContract at level 1 +debug: Output IR to arc4_types/out/MutableParams2.ssa.ir +info: optimizing test_cases.arc4_types.mutable_params2.MutableParams2 at level 1 debug: Begin optimization pass 1/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -13362,100 +14277,60 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: array_data%0#0, my_array#0, copy%0#0, my_array_copy#0, array_head_and_tail%0#0, copy%2#0, array_head_and_tail%3#0, copy%4#0, my_array_copy_2#0 -debug: Replacing {array_data%0#0, copy%0#0, my_array_copy#0, array_head_and_tail%0#0, copy%2#0, array_head_and_tail%3#0, copy%4#0, my_array_copy_2#0} with my_array#0 made 5 modifications -debug: Found equivalence set: encoded_tuple_buffer%6#0, my_struct#0, copy%1#0, my_struct_copy#0, copy%3#0 -debug: Replacing {encoded_tuple_buffer%6#0, copy%1#0, my_struct_copy#0, copy%3#0} with my_struct#0 made 5 modifications -debug: Found equivalence set: updated_target%0#0, my_array#1, array_head_and_tail%1#0 -debug: Replacing {updated_target%0#0, array_head_and_tail%1#0} with my_array#1 made 2 modifications -debug: Found equivalence set: other_routine%3#0, my_struct#1 -debug: Replacing {other_routine%3#0} with my_struct#1 made 1 modifications -debug: Found equivalence set: other_routine%2#0, my_array#2, array_head_and_tail%2#0, copy%5#0, copy%8#0 -debug: Replacing {other_routine%2#0, array_head_and_tail%2#0, copy%5#0, copy%8#0} with my_array#2 made 4 modifications -debug: Found equivalence set: other_routine%0#0, t#0 -debug: Replacing {other_routine%0#0} with t#0 made 1 modifications -debug: Found equivalence set: other_routine%1#0, f#0 -debug: Replacing {other_routine%1#0} with f#0 made 1 modifications -debug: Found equivalence set: other_routine%7#0, copy%3#1 -debug: Found equivalence set: other_routine%6#0, copy%2#1 -debug: Found equivalence set: other_routine_2%1#0, my_array_copy_2#1 -debug: Replacing {other_routine_2%1#0} with my_array_copy_2#1 made 1 modifications -debug: Found equivalence set: other_routine_2%0#0, my_array_copy_2#2, array_head_and_tail%4#0 -debug: Replacing {other_routine_2%0#0, array_head_and_tail%4#0} with my_array_copy_2#2 made 2 modifications -debug: Found equivalence set: other_routine_2%3#0, my_array_copy_2#3, array_head_and_tail%5#0, copy%6#0, copy%7#0 -debug: Replacing {other_routine_2%3#0, array_head_and_tail%5#0, copy%6#0, copy%7#0} with my_array_copy_2#3 made 4 modifications -debug: Found equivalence set: other_routine_3%2#0, copy%7#1 -debug: Found equivalence set: other_routine_3%1#0, copy%6#1 -debug: Found equivalence set: other_routine_3%0#0, copy%5#1 -debug: Found equivalence set: encoded_tuple_buffer%8#0, nested#0 -debug: Replacing {encoded_tuple_buffer%8#0} with nested#0 made 1 modifications -debug: Found equivalence set: tmp%11#0, copy%9#0 -debug: Replacing {copy%9#0} with tmp%11#0 made 1 modifications -debug: Found equivalence set: other_routine_2%5#0, copy%9#1 debug: Optimizer: Intrinsic Simplifier -debug: Simplified (concat 0x 0x01) to 0x01 -debug: Simplified (concat 0x result%3#0) to result%3#0 -debug: Simplified (setbit 0x00 0u 1u) to 0x80 -debug: Simplified (len "Happy") to 5u -debug: Simplified (len "Days") to 4u -debug: Simplified (concat 0x encoded_bool%0#0) to encoded_bool%0#0 -debug: Simplified ((extract 6 2) as_bytes%2#0) to 0x0006 -debug: Simplified (replace3 my_array#0 2u 0x05) to ((replace2 2) my_array#0 0x05) -debug: Simplified (* 2u 1u) to 2u -debug: Simplified (* 2u 1u) to 2u -debug: Simplified (* 1u 1u) to 1u -debug: Simplified (len "AARRGH!") to 7u -debug: Simplified (* 1u 1u) to 1u -debug: Simplified (len "Happy") to 5u -debug: Simplified (* 0u 1u) to 0u -debug: Simplified (* 0u 1u) to 0u -debug: Simplified (concat 0x my_array#2) to my_array#2 -debug: Simplified (extract3 nested#0 0u 4u) // on error: Index access is out of bounds to ((extract 0 4) nested#0) // on error: Index access is out of bounds +debug: Simplified (== tmp%3#0 NoOp) to (! tmp%3#0) +debug: Simplified (== tmp%8#0 0u) to (! tmp%8#0) debug: Optimizer: Remove Unused Variables -debug: Removing unused variable current_tail_offset%0#0 -debug: Removing unused variable encoded_tuple_buffer%0#0 -debug: Removing unused variable as_bytes%2#0 -debug: Removing unused variable current_tail_offset%2#0 -debug: Removing unused variable assigned_value%0#0 -debug: Removing unused variable reinterpret_biguint%1#0 -debug: Removing unused variable reinterpret_biguint%3#0 -debug: Removing unused variable reinterpret_biguint%5#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) -debug: Removing unused variable reinterpret_biguint%7#0 -debug: Removing unused variable reinterpret_biguint%9#0 -debug: Removing unused variable reinterpret_biguint%11#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Removing unused variable current_tail_offset%3#0 -debug: Removing unused variable encoded_tuple_buffer%7#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Removing unused variable tmp%1#0 +debug: Removing unused variable tmp%6#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops +debug: inlining the default target of a switch/goto nth +debug: adding block@1: // abi_routing_L4 as a predecessor of block@4: // switch_case_next_L4 due to inlining of block@3: // switch_case_default_L4 +debug: simplified terminator of block@1: // abi_routing_L4 from switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@3} to switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@4} +debug: simplifying a switch with constants into goto nth +debug: simplified terminator of block@5: // bare_routing_L4 from switch tmp%7#0 {0u => block@6, * => block@7} to goto_nth [block@6][tmp%7#0] else goto block@7 +debug: inlining the default target of a switch/goto nth +debug: adding block@1: // abi_routing_L4 as a predecessor of block@9: // after_if_else_L4 due to inlining of block@4: // switch_case_next_L4 +debug: simplified terminator of block@1: // abi_routing_L4 from switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@4} to switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@9} +debug: simplifying a goto nth with two targets into a conditional branch +debug: simplified terminator of block@5: // bare_routing_L4 from goto_nth [block@6][tmp%7#0] else goto block@7 to goto tmp%7#0 ? block@7 : block@6 +debug: inlining the default target of a switch/goto nth +debug: simplified terminator of block@1: // abi_routing_L4 from switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => block@9} to switch tmp%2#0 {method "test_array_rebinding()void" => block@2, * => return 0u} debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@4: // switch_case_next_L4 with block@3: // switch_case_default_L4 in block@9: // after_if_else_L4 +debug: Merged linear block@4: // switch_case_next_L4 into block@3: // switch_case_default_L4 +debug: Replaced predecessor block@8: // switch_case_next_L4 with block@7: // switch_case_default_L4 in block@9: // after_if_else_L4 +debug: Merged linear block@8: // switch_case_next_L4 into block@7: // switch_case_default_L4 debug: Optimizer: Remove Empty Blocks +debug: Removed empty block: block@3: // switch_case_default_L4 +debug: Removed empty block: block@7: // switch_case_default_L4 debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: updated_target%0#0, array#1 -debug: Replacing {updated_target%0#0} with array#1 made 1 modifications -debug: Found equivalence set: encoded_value%0#0, assigned_value%1#0 -debug: Replacing {assigned_value%1#0} with encoded_value%0#0 made 2 modifications -debug: Found equivalence set: updated_data%2#0, struct#1 -debug: Replacing {updated_data%2#0} with struct#1 made 1 modifications +debug: Found equivalence set: array_data%0#0, a#0 +debug: Replacing {array_data%0#0} with a#0 made 1 modifications +debug: Found equivalence set: maybe_modify_array%0#0, a#1 +debug: Replacing {maybe_modify_array%0#0} with a#1 made 1 modifications +debug: Found equivalence set: array_data%2#0, a#2 +debug: Replacing {array_data%2#0} with a#2 made 1 modifications +debug: Found equivalence set: maybe_modify_array%1#0, a#3 +debug: Replacing {maybe_modify_array%1#0} with a#3 made 1 modifications debug: Optimizer: Intrinsic Simplifier -debug: Simplified (replace3 array#0 1u 0x05) to ((replace2 1) array#0 0x05) -debug: Simplified (len "AARRGH!") to 7u -debug: Simplified (replace3 updated_data%1#0 4u tail_offset_bytes%0#0) to ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) +debug: Simplified (concat 0x 0x00) to 0x00 +debug: Simplified (concat 0x 0x00) to 0x00 +debug: Simplified (concat 0x 0x01) to 0x01 +debug: Simplified (concat 0x 0x01) to 0x01 debug: Optimizer: Remove Unused Variables -debug: Removing unused variable assigned_value%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13464,18 +14339,86 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: a#0, a%out#0 +debug: Replacing {a%out#0} with a#0 made 2 modifications +debug: Found equivalence set: concat_result%2#0, a#6, a%out#5 +debug: Replacing {concat_result%2#0, a%out#5} with a#6 made 2 modifications +debug: Found equivalence set: concat_result%0#0, a#1, a%out#1 +debug: Replacing {concat_result%0#0, a%out#1} with a#1 made 2 modifications +debug: Found equivalence set: array_data%0#0, a#2, a%out#2 +debug: Replacing {array_data%0#0, a%out#2} with a#2 made 2 modifications +debug: Found equivalence set: concat_result%3#0, a#10, a%out#6 +debug: Replacing {concat_result%3#0, a%out#6} with a#10 made 2 modifications +debug: Found equivalence set: concat_result%1#0, a#4, a%out#3 +debug: Replacing {concat_result%1#0, a%out#3} with a#4 made 2 modifications +debug: Found equivalence set: array_data%1#0, a#5, a%out#4 +debug: Replacing {array_data%1#0, a%out#4} with a#5 made 2 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x 0x01) to 0x01 +debug: Simplified (concat 0x 0x01) to 0x01 +debug: Simplified (concat 0x 0x04) to 0x04 +debug: Simplified (concat 0x 0x01) to 0x01 +debug: Simplified (concat 0x 0x2a) to 0x2a +debug: Simplified (concat 0x 0x04) to 0x04 +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable a%is_original#1 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@1: // if_body_L18 from goto 1u ? block@2 : block@3 to goto block@2 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@3: // after_if_else_L1 from goto 0u ? block@4 : block@5 to goto block@5 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@5: // after_if_else_L1 from goto 0u ? block@6 : block@7 to goto block@7 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@7: // after_if_else_L1 from goto 0u ? block@8 : block@9 to goto block@9 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@10: // else_body_L23 from goto 1u ? block@11 : block@12 to goto block@11 +debug: Replacing trivial Phi node: let a%out#12: bytes = φ(a#1 <- block@2) (a%out#12) with a#1 +debug: Deleting Phi assignment: let a%out#12: bytes = φ(a#1 <- block@2) +debug: Replacing trivial Phi node: let a%out#13: bytes = φ(a#6 <- block@11) (a%out#13) with a#6 +debug: Deleting Phi assignment: let a%out#13: bytes = φ(a#6 <- block@11) +debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@2: // if_body_L1 with block@1: // if_body_L18 in block@3: // after_if_else_L1 +debug: Merged linear block@2: // if_body_L1 into block@1: // if_body_L18 +debug: Replaced predecessor block@3: // after_if_else_L1 with block@1: // if_body_L18 in block@5: // after_if_else_L1 +debug: Merged linear block@3: // after_if_else_L1 into block@1: // if_body_L18 +debug: Replaced predecessor block@11: // if_body_L1 with block@10: // else_body_L23 in block@12: // after_if_else_L1 +debug: Merged linear block@11: // if_body_L1 into block@10: // else_body_L23 +debug: Replaced predecessor block@12: // after_if_else_L1 with block@10: // else_body_L23 in block@13: // after_if_else_L17 +debug: Merged linear block@12: // after_if_else_L1 into block@10: // else_body_L23 +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@4: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@6: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@8: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Removing unreachable blocks: block@4: // if_body_L1, block@6: // if_body_L1, block@8: // if_body_L1 +debug: Removed unreachable predecessors from block@5: // after_if_else_L1 +debug: Removed unreachable predecessors from block@7: // after_if_else_L1 +debug: Removed unreachable predecessors from block@9: // after_if_else_L1 +debug: Removing unreachable phi arguments: a#2 <- block@4 +debug: Replacing trivial Phi node: let a%out#11: bytes = φ(a#1 <- block@1) (a%out#11) with a#1 +debug: Deleting Phi assignment: let a%out#11: bytes = φ(a#1 <- block@1) +debug: Removing unreachable phi arguments: a#4 <- block@6 +debug: Replacing trivial Phi node: let a%out#10: bytes = φ(a#1 <- block@5) (a%out#10) with a#1 +debug: Deleting Phi assignment: let a%out#10: bytes = φ(a#1 <- block@5) +debug: Removing unreachable phi arguments: a#5 <- block@8 +debug: Replacing trivial Phi node: let a%out#9: bytes = φ(a#1 <- block@7) (a%out#9) with a#1 +debug: Deleting Phi assignment: let a%out#9: bytes = φ(a#1 <- block@7) +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__algopy_default_create debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: array#0, copy%0#0, copy#0 -debug: Replacing {copy%0#0, copy#0} with array#0 made 1 modifications -debug: Found equivalence set: updated_target%0#0, array#1 -debug: Replacing {updated_target%0#0} with array#1 made 1 modifications debug: Optimizer: Intrinsic Simplifier -debug: Simplified (replace3 array#0 0u 0x0a) to ((replace2 0) array#0 0x0a) debug: Optimizer: Remove Unused Variables -debug: Removing unused variable assigned_value%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13484,49 +14427,23 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: arrays.0#0, array#0 -debug: Replacing {array#0} with arrays.0#0 made 1 modifications -debug: Found equivalence set: updated_target%0#0, array#2 -debug: Replacing {updated_target%0#0} with array#2 made 1 modifications -debug: Found equivalence set: arrays.1#0, array#3 -debug: Replacing {array#3} with arrays.1#0 made 1 modifications -debug: Found equivalence set: arrays.2#0, array#4 -debug: Replacing {array#4} with arrays.2#0 made 1 modifications -debug: Found equivalence set: updated_target%1#0, arrays.0#2 -debug: Replacing {updated_target%1#0} with arrays.0#2 made 1 modifications -debug: Found equivalence set: updated_target%2#0, arrays.1#2 -debug: Replacing {updated_target%2#0} with arrays.1#2 made 1 modifications -debug: Found equivalence set: updated_target%3#0, arrays.2#2 -debug: Replacing {updated_target%3#0} with arrays.2#2 made 1 modifications -debug: Optimizer: Intrinsic Simplifier -debug: Simplified (replace3 array#1 0u 0x63) to ((replace2 0) array#1 0x63) -debug: Simplified (replace3 arrays.0#0 0u 0x63) to ((replace2 0) arrays.0#0 0x63) -debug: Simplified (replace3 arrays.1#0 0u 0x63) to ((replace2 0) arrays.1#0 0x63) -debug: Simplified (replace3 arrays.2#0 0u 0x63) to ((replace2 0) arrays.2#0 0x63) +debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables -debug: Removing unused variable assigned_value%0#0 -debug: Removing unused variable array#2 -debug: Removing unused variable assigned_value%1#0 -debug: Removing unused variable assigned_value%2#0 -debug: Removing unused variable assigned_value%3#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@2: // for_footer_L104 with block@1: // for_body_L105 in block@3: // for_header_1_L104 -debug: Replaced predecessor block@2: // for_footer_L104 with block@1: // for_body_L105 in block@4: // for_header_2_L104 -debug: Replaced predecessor block@2: // for_footer_L104 with block@1: // for_body_L105 in block@5: // after_for_L104 -debug: Merged linear block@2: // for_footer_L104 into block@1: // for_body_L105 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program -debug: Splitting parallel copies prior to optimization +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_1.ir +debug: Begin optimization pass 2/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13539,9 +14456,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir -debug: Begin optimization pass 2/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13554,49 +14469,19 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation -debug: Found equivalence set: result%3#0, my_array#0 -debug: Replacing {result%3#0} with my_array#0 made 1 modifications -debug: Found equivalence set: my_array#2, nested#0 -debug: Replacing {nested#0} with my_array#2 made 1 modifications debug: Optimizer: Intrinsic Simplifier -debug: Simplified (concat 0x01 0x02) to 0x0102 -debug: Simplified ((extract 6 2) as_bytes%0#0) to 0x0005 -debug: Simplified ((extract 6 2) as_bytes%1#0) to 0x0004 -debug: Simplified (concat 0x80 0x32) to 0x8032 -debug: Simplified (extract3 my_array#0 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) my_array#0) // on error: Index access is out of bounds -debug: Simplified (extract3 my_array#1 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) my_array#1) // on error: Index access is out of bounds -debug: Simplified (extract3 my_array#2 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#2) // on error: Index access is out of bounds -debug: Simplified ((extract 6 2) as_bytes%4#0) to 0x0007 -debug: Simplified (extract3 my_array#0 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#0) // on error: Index access is out of bounds -debug: Simplified ((extract 6 2) as_bytes%5#0) to 0x0005 -debug: Simplified (extract3 my_array_copy_2#2 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds -debug: Simplified (extract3 my_array_copy_2#3 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds +debug: Simplified (concat 0x0001 0x00) to 0x000100 +debug: Simplified (concat 0x00 0x01) to 0x0001 +debug: Simplified (concat 0x0001 0x01) to 0x000101 +debug: Simplified (concat 0x01 0x2a) to 0x012a debug: Optimizer: Remove Unused Variables debug: Removing unused variable result%0#0 -debug: Removing unused variable encoded_bool%0#0 -debug: Removing unused variable length%0#0 -debug: Removing unused variable as_bytes%0#0 -debug: Removing unused variable length%1#0 -debug: Removing unused variable as_bytes%1#0 -debug: Removing unused variable encoded_tuple_buffer%1#0 -debug: Removing unused variable offset_as_uint16%0#0 -debug: Removing unused variable data_length%1#0 -debug: Removing unused variable item_offset%0#0 -debug: Removing unused variable item_offset%1#0 -debug: Removing unused variable item_offset%2#0 -debug: Removing unused variable length%2#0 -debug: Removing unused variable as_bytes%4#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) -debug: Removing unused variable item_offset%3#0 -debug: Removing unused variable length%3#0 -debug: Removing unused variable as_bytes%5#0 -debug: Removing unused variable item_offset%4#0 -debug: Removing unused variable item_offset%5#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Removing unused variable result%1#0 +debug: Removing unused variable result%3#0 +debug: Removing unused variable result%4#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13605,23 +14490,36 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified ((extract 6 2) as_bytes%0#0) to 0x0007 +debug: Simplified (concat 0x01 0x02) to 0x0102 +debug: Simplified (concat 0x01 0x02) to 0x0102 debug: Optimizer: Remove Unused Variables -debug: Removing unused variable length%0#0 -debug: Removing unused variable as_bytes%0#0 +debug: Removing unused variable data%0#0 +debug: Removing unused variable result%0#0 +debug: Removing unused variable data%1#0 +debug: Removing unused variable a#4 +debug: Removing unused variable result%3#0 +debug: Removing unused variable data%2#0 +debug: Removing unused variable data%3#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@5: // after_if_else_L1 with block@1: // if_body_L18 in block@7: // after_if_else_L1 +debug: Merged linear block@5: // after_if_else_L1 into block@1: // if_body_L18 +debug: Replaced predecessor block@7: // after_if_else_L1 with block@1: // if_body_L18 in block@9: // after_if_else_L1 +debug: Merged linear block@7: // after_if_else_L1 into block@1: // if_body_L18 +debug: Replaced predecessor block@9: // after_if_else_L1 with block@1: // if_body_L18 in block@13: // after_if_else_L17 +debug: Merged linear block@9: // after_if_else_L1 into block@1: // if_body_L18 debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13634,12 +14532,13 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_2.ir +debug: Begin optimization pass 3/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables -debug: Removing unused variable array#1 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13648,7 +14547,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13661,13 +14560,17 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir -debug: Begin optimization pass 3/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0002 0x0001) to 0x00020001 +debug: Simplified (concat 0x012a 0x04) to 0x012a04 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable a#0 +debug: Removing unused variable result%2#0 +debug: Removing unused variable a#2 +debug: Removing unused variable result%5#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13676,41 +14579,30 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified (concat 0x0102 0x03) to 0x010203 -debug: Simplified (concat 0x0005 "Happy") to 0x00054861707079 -debug: Simplified (concat 0x0004 "Days") to 0x000444617973 -debug: Simplified (concat 0x8032 0x0006) to 0x80320006 -debug: Simplified (concat 0x0007 "AARRGH!") to 0x000741415252474821 -debug: Simplified (concat 0x0005 "Happy") to 0x00054861707079 +debug: Simplified (concat 0x0102 0x04) to 0x010204 debug: Optimizer: Remove Unused Variables debug: Removing unused variable result%1#0 -debug: Removing unused variable length_uint16%0#0 -debug: Removing unused variable length_uint16%1#0 -debug: Removing unused variable encoded_tuple_buffer%2#0 -debug: Removing unused variable length_uint16%2#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) -debug: Removing unused variable length_uint16%3#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Removing unused variable len_16_bit%1#0 +debug: Removing unused variable result%4#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified (concat 0x0007 "AARRGH!") to 0x000741415252474821 debug: Optimizer: Remove Unused Variables -debug: Removing unused variable length_uint16%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13719,7 +14611,9 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_3.ir +debug: Begin optimization pass 4/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13732,7 +14626,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13745,11 +14639,14 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0003 0x012a04) to 0x0003012a04 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable array_data%1#0 +debug: Removing unused variable result%6#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13758,37 +14655,30 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir -debug: Begin optimization pass 4/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0003 0x010203) to 0x0003010203 +debug: Simplified (concat 0x0003 0x010204) to 0x0003010204 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable result%2#0 +debug: Removing unused variable as_bytes%1#0 +debug: Removing unused variable result%5#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified (concat 0x010203 0x04) to 0x01020304 -debug: Simplified (len 0x00054861707079) to 7u debug: Optimizer: Remove Unused Variables -debug: Removing unused variable result%2#0 -debug: Removing unused variable encoded_value%0#0 -debug: Removing unused variable encoded_value%1#0 -debug: Removing unused variable encoded_tuple_buffer%3#0 -debug: Removing unused variable encoded_value%2#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) -debug: Removing unused variable encoded_value%3#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13797,13 +14687,13 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_4.ir +debug: Begin optimization pass 5/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified (len 0x000741415252474821) to 9u debug: Optimizer: Remove Unused Variables -debug: Removing unused variable encoded_value%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13812,7 +14702,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13825,11 +14715,12 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables +debug: Removing unused variable array_data%3#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13838,22 +14729,24 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified ((extract 2 0) 0x0003010203) to 0x010203 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable a#2 +debug: Removing unused variable len_%1#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir -debug: Begin optimization pass 5/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13866,19 +14759,13 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_5.ir +debug: Begin optimization pass 6/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified (+ 6u 7u) to 13u -debug: Simplified ((extract 2 1) 0x01020304) // on error: Index access is out of bounds to 0x03 -debug: Simplified ((extract 1 1) 0x01020304) // on error: Index access is out of bounds to 0x02 debug: Optimizer: Remove Unused Variables -debug: Removing unused variable my_array#0 -debug: Removing unused variable data_length%0#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13887,12 +14774,11 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables -debug: Removing unused variable new_value_length%0#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -13901,7 +14787,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13914,20 +14800,24 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x010203 0x04) to 0x01020304 debug: Optimizer: Remove Unused Variables +debug: Removing unused variable expr_value_trimmed%1#0 +debug: Removing unused variable concatenated%1#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13940,9 +14830,9 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir -debug: Begin optimization pass 6/100 -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Output IR to arc4_types/out/MutableParams2.ssa.opt_pass_6.ir +debug: Begin optimization pass 7/100 +debug: Optimizing subroutine algopy.arc4.ARC4Contract.approval_program debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -13955,11 +14845,1034 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier -debug: Simplified ((extract 6 2) as_bytes%3#0) to 0x000d +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@14: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine algopy.arc4.ARC4Contract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: No optimizations performed in pass 7, ending loop +debug: Removing Phis from algopy.arc4.ARC4Contract.approval_program +debug: Removing Phis from test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ +debug: Removing Phis from test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding +debug: Removing Phis from test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array +debug: Removing Phis from algopy.arc4.ARC4Contract.clear_state_program +debug: Coalescing local variables in algopy.arc4.ARC4Contract.approval_program using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Coalescing local variables in test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Coalescing local variables in test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding using strategy RootOperandGrouping +debug: Coalescing a#1 with [a#3] +debug: Coalescing resulted in 2 replacement/s +debug: Coalescing local variables in test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array using strategy RootOperandGrouping +debug: Coalescing a#0 with [a#1, a#13, a#6, a#7, a#10] +debug: Coalescing a%is_original#0 with [a%is_original#3, a%is_original#7, a%is_original#4] +debug: Coalescing a%out#7 with [a%out#9, a%out#8, a%out#11] +debug: Coalescing resulted in 27 replacement/s +debug: Coalescing local variables in algopy.arc4.ARC4Contract.clear_state_program using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Sequentializing parallel copies in algopy.arc4.ARC4Contract.approval_program +debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ +debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params2.MutableParams2.test_array_rebinding +debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array +debug: loc: {a#0=a#0, a%is_original#0=a%is_original#0, a%out#7=None, a#5=a#5} +debug: pred: {a#0=a#5, a%is_original#0=a%is_original#0, a%out#7=a#0} +debug: ready: a%out#7 +debug: to_do: a#0, a%is_original#0, a%out#7 +debug: * avail a%out#7 +debug: * avail a#0 +debug: * avail a#5 +debug: * to_do a%out#7 +debug: * to_do a%is_original#0 +debug: loc: {a#0=a#0, a%is_original#0=a%is_original#0, a%out#7=None} +debug: pred: {a#0=a#0, a%is_original#0=a%is_original#0, a%out#7=a#0} +debug: ready: a%out#7 +debug: to_do: a#0, a%is_original#0, a%out#7 +debug: * avail a%out#7 +debug: * avail a#0 +debug: * to_do a%is_original#0 +debug: loc: {a#0=a#0, a%is_original#0=a%is_original#0, a%out#7=a%out#7} +debug: pred: {a#0=a#0, a%is_original#0=a%is_original#0, a%out#7=a%out#7} +debug: ready: +debug: to_do: a#0, a%is_original#0, a%out#7 +debug: * to_do a%out#7 +debug: * to_do a%is_original#0 +debug: * to_do a#0 +debug: Sequentializing parallel copies in algopy.arc4.ARC4Contract.clear_state_program +debug: Performing post-SSA optimizations +debug: Output IR to arc4_types/out/MutableParams2.destructured.ir +debug: Inserted main_block@0.ops[1]: 'l-store-copy tmp%0#0 0' +debug: Replaced main_block@0.ops[3]: 'v-load tmp%0#0' with 'l-load tmp%0#0' +debug: Inserted __puya_arc4_router___block@0.ops[1]: 'l-store-copy tmp%0#0 0' +debug: Replaced __puya_arc4_router___block@0.ops[3]: 'v-load tmp%0#0' with 'l-load tmp%0#0' +debug: Inserted __puya_arc4_router___abi_routing@1.ops[1]: 'l-store-copy tmp%2#0 0' +debug: Replaced __puya_arc4_router___abi_routing@1.ops[4]: 'v-load tmp%2#0' with 'l-load tmp%2#0' +debug: Inserted __puya_arc4_router___test_array_rebinding_route@2.ops[1]: 'l-store-copy tmp%3#0 0' +debug: Replaced __puya_arc4_router___test_array_rebinding_route@2.ops[3]: 'v-load tmp%3#0' with 'l-load tmp%3#0' +debug: Inserted __puya_arc4_router___test_array_rebinding_route@2.ops[5]: 'l-store-copy tmp%4#0 0' +debug: Replaced __puya_arc4_router___test_array_rebinding_route@2.ops[7]: 'v-load tmp%4#0' with 'l-load tmp%4#0' +debug: Inserted __puya_arc4_router___test_array_rebinding_route@2.ops[10]: 'l-store-copy tmp%5#0 0' +debug: Replaced __puya_arc4_router___test_array_rebinding_route@2.ops[12]: 'v-load tmp%5#0' with 'l-load tmp%5#0' +debug: Inserted __puya_arc4_router___bare_routing@5.ops[1]: 'l-store-copy tmp%7#0 0' +debug: Replaced __puya_arc4_router___bare_routing@5.ops[3]: 'v-load tmp%7#0' with 'l-load tmp%7#0' +debug: Inserted __puya_arc4_router_____algopy_default_create@6.ops[1]: 'l-store-copy tmp%8#0 0' +debug: Replaced __puya_arc4_router_____algopy_default_create@6.ops[3]: 'v-load tmp%8#0' with 'l-load tmp%8#0' +debug: Inserted __puya_arc4_router_____algopy_default_create@6.ops[5]: 'l-store-copy tmp%9#0 0' +debug: Replaced __puya_arc4_router_____algopy_default_create@6.ops[7]: 'v-load tmp%9#0' with 'l-load tmp%9#0' +debug: Inserted test_array_rebinding_block@0.ops[3]: 'l-store-copy a#1 0' +debug: Replaced test_array_rebinding_block@0.ops[5]: 'v-load a#1' with 'l-load a#1' +debug: Inserted test_array_rebinding_block@0.ops[8]: 'l-store-copy tmp%0#0 0' +debug: Replaced test_array_rebinding_block@0.ops[10]: 'v-load tmp%0#0' with 'l-load tmp%0#0' +debug: Inserted test_array_rebinding_block@0.ops[15]: 'l-store-copy a#1 0' +debug: Replaced test_array_rebinding_block@0.ops[17]: 'v-load a#1' with 'l-load a#1' +debug: Inserted test_array_rebinding_block@0.ops[20]: 'l-store-copy tmp%1#0 0' +debug: Replaced test_array_rebinding_block@0.ops[22]: 'v-load tmp%1#0' with 'l-load tmp%1#0' +debug: Inserted maybe_modify_array_if_body@1.ops[2]: 'l-store-copy expr_value_trimmed%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[4]: 'v-load expr_value_trimmed%0#0' with 'l-load expr_value_trimmed%0#0' +debug: Inserted maybe_modify_array_if_body@1.ops[7]: 'l-store-copy concatenated%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[9]: 'v-load concatenated%0#0' with 'l-load concatenated%0#0' +debug: Inserted maybe_modify_array_if_body@1.ops[11]: 'l-store-copy len_%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[13]: 'v-load len_%0#0' with 'l-load len_%0#0' +debug: Inserted maybe_modify_array_if_body@1.ops[15]: 'l-store-copy as_bytes%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[17]: 'v-load as_bytes%0#0' with 'l-load as_bytes%0#0' +debug: Inserted maybe_modify_array_if_body@1.ops[19]: 'l-store-copy len_16_bit%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[21]: 'v-load len_16_bit%0#0' with 'l-load len_16_bit%0#0' +debug: Inserted maybe_modify_array_if_body@1.ops[26]: 'l-store-copy a#5 0' +debug: Replaced maybe_modify_array_if_body@1.ops[32]: 'v-load a#5' with 'l-load a#5' +debug: Inserted maybe_modify_array_if_body@1.ops[10]: 'l-store-copy concatenated%0#0 0' +debug: Replaced maybe_modify_array_if_body@1.ops[23]: 'v-load concatenated%0#0' with 'l-load concatenated%0#0' +debug: Inserted maybe_modify_array_else_body@10.ops[2]: 'l-store-copy expr_value_trimmed%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[4]: 'v-load expr_value_trimmed%2#0' with 'l-load expr_value_trimmed%2#0' +debug: Inserted maybe_modify_array_else_body@10.ops[7]: 'l-store-copy concatenated%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[9]: 'v-load concatenated%2#0' with 'l-load concatenated%2#0' +debug: Inserted maybe_modify_array_else_body@10.ops[11]: 'l-store-copy len_%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[13]: 'v-load len_%2#0' with 'l-load len_%2#0' +debug: Inserted maybe_modify_array_else_body@10.ops[15]: 'l-store-copy as_bytes%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[17]: 'v-load as_bytes%2#0' with 'l-load as_bytes%2#0' +debug: Inserted maybe_modify_array_else_body@10.ops[19]: 'l-store-copy len_16_bit%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[21]: 'v-load len_16_bit%2#0' with 'l-load len_16_bit%2#0' +debug: Inserted maybe_modify_array_else_body@10.ops[26]: 'l-store-copy a%out#7 0' +debug: Replaced maybe_modify_array_else_body@10.ops[28]: 'v-load a%out#7' with 'l-load a%out#7' +debug: Inserted maybe_modify_array_else_body@10.ops[10]: 'l-store-copy concatenated%2#0 0' +debug: Replaced maybe_modify_array_else_body@10.ops[23]: 'v-load concatenated%2#0' with 'l-load concatenated%2#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[2]: 'l-store-copy expr_value_trimmed%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[4]: 'v-load expr_value_trimmed%3#0' with 'l-load expr_value_trimmed%3#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[7]: 'l-store-copy concatenated%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[9]: 'v-load concatenated%3#0' with 'l-load concatenated%3#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[11]: 'l-store-copy len_%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[13]: 'v-load len_%3#0' with 'l-load len_%3#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[15]: 'l-store-copy as_bytes%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[17]: 'v-load as_bytes%3#0' with 'l-load as_bytes%3#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[19]: 'l-store-copy len_16_bit%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[21]: 'v-load len_16_bit%3#0' with 'l-load len_16_bit%3#0' +debug: Inserted maybe_modify_array_after_if_else@13.ops[10]: 'l-store-copy concatenated%3#0 0' +debug: Replaced maybe_modify_array_after_if_else@13.ops[23]: 'v-load concatenated%3#0' with 'l-load concatenated%3#0' +debug: Found 3 edge set/s for test_cases.arc4_types.mutable_params2.MutableParams2.__puya_arc4_router__ +debug: Found 3 edge set/s for test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array +debug: test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array f-stack entry: ['a%out#7'] +debug: test_cases.arc4_types.mutable_params2.MutableParams2.maybe_modify_array f-stack on first store: ['a%is_original#0'] +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.ir +info: optimizing test_cases.arc4_types.mutable_params.Arc4MutableParamsContract at level 1 +debug: Begin optimization pass 1/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: array_data%0#0, my_array#0, copy%0#0, my_array_copy#0, array_head_and_tail%0#0, copy%2#0, array_head_and_tail%3#0, copy%4#0, my_array_copy_2#0, copy%5#0, my_array_copy_3#0, copy%8#0, originals.2#0, copy%11#0 +debug: Replacing {array_data%0#0, copy%0#0, my_array_copy#0, array_head_and_tail%0#0, copy%2#0, array_head_and_tail%3#0, copy%4#0, my_array_copy_2#0, copy%5#0, my_array_copy_3#0, copy%8#0, originals.2#0, copy%11#0} with my_array#0 made 9 modifications +debug: Found equivalence set: encoded_tuple_buffer%6#0, my_struct#0, copy%1#0, my_struct_copy#0, copy%3#0 +debug: Replacing {encoded_tuple_buffer%6#0, copy%1#0, my_struct_copy#0, copy%3#0} with my_struct#0 made 5 modifications +debug: Found equivalence set: updated_target%0#0, my_array#1, array_head_and_tail%1#0 +debug: Replacing {updated_target%0#0, array_head_and_tail%1#0} with my_array#1 made 2 modifications +debug: Found equivalence set: other_routine%3#0, my_struct#1 +debug: Replacing {other_routine%3#0} with my_struct#1 made 1 modifications +debug: Found equivalence set: other_routine%2#0, my_array#2, array_head_and_tail%2#0, copy%6#0, originals.0#0, copy%9#0 +debug: Replacing {other_routine%2#0, array_head_and_tail%2#0, copy%6#0, originals.0#0, copy%9#0} with my_array#2 made 4 modifications +debug: Found equivalence set: other_routine%0#0, t#0 +debug: Replacing {other_routine%0#0} with t#0 made 1 modifications +debug: Found equivalence set: other_routine%1#0, f#0 +debug: Replacing {other_routine%1#0} with f#0 made 1 modifications +debug: Found equivalence set: other_routine%7#0, copy%3#1 +debug: Found equivalence set: other_routine%6#0, copy%2#1 +debug: Found equivalence set: other_routine_2%1#0, my_array_copy_2#1 +debug: Replacing {other_routine_2%1#0} with my_array_copy_2#1 made 1 modifications +debug: Found equivalence set: other_routine_2%0#0, my_array_copy_2#2, array_head_and_tail%4#0 +debug: Replacing {other_routine_2%0#0, array_head_and_tail%4#0} with my_array_copy_2#2 made 2 modifications +debug: Found equivalence set: other_routine_2%3#0, my_array_copy_2#3, array_head_and_tail%5#0, copy%7#0, originals.1#0, copy%10#0 +debug: Replacing {other_routine_2%3#0, array_head_and_tail%5#0, copy%7#0, originals.1#0, copy%10#0} with my_array_copy_2#3 made 4 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%2#0, copy%11#1 +debug: Found equivalence set: mutate_tuple_items_and_reassign%1#0, copy%10#1 +debug: Found equivalence set: mutate_tuple_items_and_reassign%0#0, copy%9#1 +debug: Found equivalence set: mutate_tuple_items_and_reassign%5#0, my_array_copy_3#1, array_head_and_tail%8#0, array_head_and_tail%11#0 +debug: Replacing {mutate_tuple_items_and_reassign%5#0, array_head_and_tail%8#0, array_head_and_tail%11#0} with my_array_copy_3#1 made 3 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%4#0, my_array_copy_2#4, array_head_and_tail%7#0, array_head_and_tail%10#0 +debug: Replacing {mutate_tuple_items_and_reassign%4#0, array_head_and_tail%7#0, array_head_and_tail%10#0} with my_array_copy_2#4 made 3 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%3#0, my_array#3, array_head_and_tail%6#0, array_head_and_tail%9#0 +debug: Replacing {mutate_tuple_items_and_reassign%3#0, array_head_and_tail%6#0, array_head_and_tail%9#0} with my_array#3 made 3 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%8#0, my_array_copy_3#2, array_head_and_tail%14#0, array_head_and_tail%17#0 +debug: Replacing {mutate_tuple_items_and_reassign%8#0, array_head_and_tail%14#0, array_head_and_tail%17#0} with my_array_copy_3#2 made 3 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%7#0, my_array_copy_2#5, array_head_and_tail%13#0, array_head_and_tail%16#0 +debug: Replacing {mutate_tuple_items_and_reassign%7#0, array_head_and_tail%13#0, array_head_and_tail%16#0} with my_array_copy_2#5 made 3 modifications +debug: Found equivalence set: mutate_tuple_items_and_reassign%6#0, my_array#4, array_head_and_tail%12#0, array_head_and_tail%15#0, copy%12#0 +debug: Replacing {mutate_tuple_items_and_reassign%6#0, array_head_and_tail%12#0, array_head_and_tail%15#0, copy%12#0} with my_array#4 made 4 modifications +debug: Found equivalence set: encoded_tuple_buffer%8#0, nested#0 +debug: Replacing {encoded_tuple_buffer%8#0} with nested#0 made 1 modifications +debug: Found equivalence set: tmp%28#0, copy%13#0 +debug: Replacing {copy%13#0} with tmp%28#0 made 1 modifications +debug: Found equivalence set: other_routine_2%5#0, copy%13#1 +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x 0x01) to 0x01 +debug: Simplified (concat 0x result%3#0) to result%3#0 +debug: Simplified (setbit 0x00 0u 1u) to 0x80 +debug: Simplified (len "Happy") to 5u +debug: Simplified (len "Days") to 4u +debug: Simplified (concat 0x encoded_bool%0#0) to encoded_bool%0#0 +debug: Simplified ((extract 6 2) as_bytes%2#0) to 0x0006 +debug: Simplified (replace3 my_array#0 2u 0x05) to ((replace2 2) my_array#0 0x05) +debug: Simplified (* 2u 1u) to 2u +debug: Simplified (* 2u 1u) to 2u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (len "AARRGH!") to 7u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (len "Happy") to 5u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (== my_array#2 my_array#2) to 1u +debug: Simplified (== my_array_copy_2#3 my_array_copy_2#3) to 1u +debug: Simplified (== my_array#0 my_array#0) to 1u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (concat 0x my_array#4) to my_array#4 +debug: Simplified (extract3 nested#0 0u 4u) // on error: Index access is out of bounds to ((extract 0 4) nested#0) // on error: Index access is out of bounds +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable current_tail_offset%0#0 +debug: Removing unused variable encoded_tuple_buffer%0#0 +debug: Removing unused variable as_bytes%2#0 +debug: Removing unused variable current_tail_offset%2#0 +debug: Removing unused variable assigned_value%0#0 +debug: Removing unused variable reinterpret_biguint%1#0 +debug: Removing unused variable reinterpret_biguint%3#0 +debug: Removing unused variable reinterpret_biguint%5#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) +debug: Removing unused variable reinterpret_biguint%7#0 +debug: Removing unused variable reinterpret_biguint%9#0 +debug: Removing unused variable reinterpret_biguint%11#0 +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) +debug: Removing unused variable reinterpret_biguint%13#0 +debug: Removing unused variable reinterpret_biguint%15#0 +debug: Removing unused variable reinterpret_biguint%17#0 +debug: Removing unused variable reinterpret_biguint%19#0 +debug: Removing unused variable reinterpret_biguint%21#0 +debug: Removing unused variable reinterpret_biguint%23#0 +debug: Removing unused variable reinterpret_biguint%25#0 +debug: Removing unused variable reinterpret_biguint%27#0 +debug: Removing unused variable reinterpret_biguint%29#0 +debug: Removing unused variable reinterpret_biguint%31#0 +debug: Removing unused variable reinterpret_biguint%33#0 +debug: Removing unused variable reinterpret_biguint%35#0 +debug: Removing unused variable current_tail_offset%3#0 +debug: Removing unused variable encoded_tuple_buffer%7#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: array#0, array%out#0 +debug: Found equivalence set: struct#0, struct%out#0 +debug: Found equivalence set: updated_target%0#0, array#1, array%out#1 +debug: Replacing {updated_target%0#0, array%out#1} with array#1 made 1 modifications +debug: Found equivalence set: encoded_value%0#0, assigned_value%1#0 +debug: Replacing {assigned_value%1#0} with encoded_value%0#0 made 2 modifications +debug: Found equivalence set: updated_data%2#0, struct#2, struct%out#1 +debug: Replacing {updated_data%2#0, struct%out#1} with struct#2 made 1 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (replace3 array#0 1u 0x05) to ((replace2 1) array#0 0x05) +debug: Simplified (len "AARRGH!") to 7u +debug: Simplified (replace3 updated_data%1#0 4u tail_offset_bytes%0#0) to ((replace2 4) updated_data%1#0 tail_offset_bytes%0#0) +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable array%is_original#0 +debug: Removing unused variable struct%is_original#0 +debug: Removing unused variable assigned_value%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@0: // L118 from goto 1u ? block@1 : block@2 to goto block@1 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@2: // after_if_else_L1 from goto 1u ? block@3 : block@4 to goto block@3 +debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@1: // if_body_L1 with block@0: // L118 in block@2: // after_if_else_L1 +debug: Merged linear block@1: // if_body_L1 into block@0: // L118 +debug: Replaced predecessor block@2: // after_if_else_L1 with block@0: // L118 in block@3: // if_body_L1 +debug: Merged linear block@2: // after_if_else_L1 into block@0: // L118 +debug: Replaced predecessor block@3: // if_body_L1 with block@0: // L118 in block@4: // after_if_else_L1 +debug: Merged linear block@3: // if_body_L1 into block@0: // L118 +debug: Merged linear block@4: // after_if_else_L1 into block@0: // L118 +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: array#0, array%out#0, copy%0#0, copy#0 +debug: Replacing {array%out#0, copy%0#0, copy#0} with array#0 made 1 modifications +debug: Found equivalence set: updated_target%0#0, array#1, array%out#1 +debug: Replacing {updated_target%0#0, array%out#1} with array#1 made 1 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (replace3 array#0 0u 0x0a) to ((replace2 0) array#0 0x0a) +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable array%is_original#0 +debug: Removing unused variable assigned_value%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@0: // L124 from goto 1u ? block@1 : block@2 to goto block@1 +debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@1: // if_body_L1 with block@0: // L124 in block@2: // after_if_else_L1 +debug: Merged linear block@1: // if_body_L1 into block@0: // L124 +debug: Merged linear block@2: // after_if_else_L1 into block@0: // L124 +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: arrays.0#0, arrays.0%out#0 +debug: Replacing {arrays.0%out#0} with arrays.0#0 made 1 modifications +debug: Found equivalence set: arrays.1#0, arrays.1%out#0 +debug: Replacing {arrays.1%out#0} with arrays.1#0 made 1 modifications +debug: Found equivalence set: arrays.2#0, arrays.2%out#0 +debug: Replacing {arrays.2%out#0} with arrays.2#0 made 1 modifications +debug: Found equivalence set: updated_target%0#0, arrays.0#1, arrays.0%out#1, array_head_and_tail%0#0 +debug: Replacing {updated_target%0#0, arrays.0%out#1, array_head_and_tail%0#0} with arrays.0#1 made 3 modifications +debug: Found equivalence set: updated_target%1#0, arrays.1#2, arrays.1%out#1, array_head_and_tail%1#0 +debug: Replacing {updated_target%1#0, arrays.1%out#1, array_head_and_tail%1#0} with arrays.1#2 made 3 modifications +debug: Found equivalence set: updated_target%2#0, arrays.2#3, array_head_and_tail%2#0, arrays.2%out#1 +debug: Replacing {updated_target%2#0, array_head_and_tail%2#0, arrays.2%out#1} with arrays.2#3 made 3 modifications +debug: Found equivalence set: updated_target%3#0, arrays.0#5, arrays.0%out#2, copy%0#0, arrays.0#9, arrays.0%out#3 +debug: Replacing {updated_target%3#0, arrays.0%out#2, copy%0#0, arrays.0#9, arrays.0%out#3} with arrays.0#5 made 4 modifications +debug: Found equivalence set: updated_target%4#0, arrays.1#6, arrays.1%out#2, copy%1#0, arrays.1#9, arrays.1%out#3 +debug: Replacing {updated_target%4#0, arrays.1%out#2, copy%1#0, arrays.1#9, arrays.1%out#3} with arrays.1#6 made 4 modifications +debug: Found equivalence set: updated_target%5#0, arrays.2#7, arrays.2%out#2, copy%2#0, arrays.2#9, arrays.2%out#3 +debug: Replacing {updated_target%5#0, arrays.2%out#2, copy%2#0, arrays.2#9, arrays.2%out#3} with arrays.2#7 made 4 modifications +debug: Found equivalence set: updated_target%6#0, arrays.0#14, arrays.0%out#4, array_head_and_tail%3#0 +debug: Replacing {updated_target%6#0, arrays.0%out#4, array_head_and_tail%3#0} with arrays.0#14 made 3 modifications +debug: Found equivalence set: updated_target%7#0, arrays.1#15, arrays.1%out#4, array_head_and_tail%4#0 +debug: Replacing {updated_target%7#0, arrays.1%out#4, array_head_and_tail%4#0} with arrays.1#15 made 3 modifications +debug: Found equivalence set: updated_target%8#0, arrays.2#16, array_head_and_tail%5#0, arrays.2%out#4 +debug: Replacing {updated_target%8#0, array_head_and_tail%5#0, arrays.2%out#4} with arrays.2#16 made 3 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (replace3 arrays.0#0 0u assigned_value%0#0) to ((replace2 0) arrays.0#0 assigned_value%0#0) +debug: Simplified (replace3 arrays.1#0 0u assigned_value%1#0) to ((replace2 0) arrays.1#0 assigned_value%1#0) +debug: Simplified (replace3 arrays.2#0 0u assigned_value%2#0) to ((replace2 0) arrays.2#0 assigned_value%2#0) +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (* 0u 1u) to 0u +debug: Simplified (replace3 arrays.0#1 1u assigned_value%3#0) to ((replace2 1) arrays.0#1 assigned_value%3#0) +debug: Simplified (replace3 arrays.1#2 1u assigned_value%4#0) to ((replace2 1) arrays.1#2 assigned_value%4#0) +debug: Simplified (replace3 arrays.2#3 1u assigned_value%5#0) to ((replace2 1) arrays.2#3 assigned_value%5#0) +debug: Simplified (replace3 arrays.0#10 1u assigned_value%6#0) to ((replace2 1) arrays.0#10 assigned_value%6#0) +debug: Simplified (replace3 arrays.1#11 1u assigned_value%7#0) to ((replace2 1) arrays.1#11 assigned_value%7#0) +debug: Simplified (replace3 arrays.2#12 1u assigned_value%8#0) to ((replace2 1) arrays.2#12 assigned_value%8#0) +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Simplified (* 1u 1u) to 1u +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@0: // L130 from goto 1u ? block@1 : block@2 to goto block@1 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@2: // after_if_else_L1 from goto 1u ? block@3 : block@4 to goto block@3 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@4: // after_if_else_L1 from goto 1u ? block@5 : block@6 to goto block@5 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@6: // after_if_else_L1 from goto 1u ? block@7 : block@8 to goto block@7 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@8: // after_if_else_L1 from goto 1u ? block@9 : block@10 to goto block@9 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@10: // after_if_else_L1 from goto 1u ? block@11 : block@12 to goto block@11 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@13: // if_body_L148 from goto 0u ? block@14 : block@15 to goto block@15 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@15: // after_if_else_L1 from goto 0u ? block@16 : block@17 to goto block@17 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@17: // after_if_else_L1 from goto 0u ? block@18 : block@19 to goto block@19 +debug: Replacing trivial Phi node: let arrays.0%out#14: bytes = φ(arrays.0#1 <- block@1) (arrays.0%out#14) with arrays.0#1 +debug: Deleting Phi assignment: let arrays.0%out#14: bytes = φ(arrays.0#1 <- block@1) +debug: Replacing trivial Phi node: let arrays.1%out#13: bytes = φ(arrays.1#2 <- block@3) (arrays.1%out#13) with arrays.1#2 +debug: Deleting Phi assignment: let arrays.1%out#13: bytes = φ(arrays.1#2 <- block@3) +debug: Replacing trivial Phi node: let arrays.2%out#12: bytes = φ(arrays.2#3 <- block@5) (arrays.2%out#12) with arrays.2#3 +debug: Deleting Phi assignment: let arrays.2%out#12: bytes = φ(arrays.2#3 <- block@5) +debug: Replacing trivial Phi node: let arrays.0%out#11: bytes = φ(arrays.0#5 <- block@7) (arrays.0%out#11) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0%out#11: bytes = φ(arrays.0#5 <- block@7) +debug: Replacing trivial Phi node: let arrays.0%out#17: bytes = φ(arrays.0#5 <- block@13, arrays.0#5 <- block@14) (arrays.0%out#17) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0%out#17: bytes = φ(arrays.0#5 <- block@13, arrays.0#5 <- block@14) +debug: Replacing trivial Phi node: let arrays.0%out#8: bytes = φ(arrays.0#5 <- block@12, arrays.0#5 <- block@19) (arrays.0%out#8) with arrays.0#5 +debug: Deleting Phi assignment: let arrays.0%out#8: bytes = φ(arrays.0#5 <- block@12, arrays.0#5 <- block@19) +debug: Replacing trivial Phi node: let arrays.0%out#8: bytes = φ(arrays.0#5 <- block@12, arrays.0#5 <- block@19) (arrays.0%out#8) with arrays.0#5 +debug: Replacing trivial Phi node: let arrays.1%out#10: bytes = φ(arrays.1#6 <- block@9) (arrays.1%out#10) with arrays.1#6 +debug: Deleting Phi assignment: let arrays.1%out#10: bytes = φ(arrays.1#6 <- block@9) +debug: Replacing trivial Phi node: let arrays.1%out#16: bytes = φ(arrays.1#6 <- block@15, arrays.1#6 <- block@16) (arrays.1%out#16) with arrays.1#6 +debug: Deleting Phi assignment: let arrays.1%out#16: bytes = φ(arrays.1#6 <- block@15, arrays.1#6 <- block@16) +debug: Replacing trivial Phi node: let arrays.1%out#8: bytes = φ(arrays.1#6 <- block@12, arrays.1#6 <- block@19) (arrays.1%out#8) with arrays.1#6 +debug: Deleting Phi assignment: let arrays.1%out#8: bytes = φ(arrays.1#6 <- block@12, arrays.1#6 <- block@19) +debug: Replacing trivial Phi node: let arrays.1%out#8: bytes = φ(arrays.1#6 <- block@12, arrays.1#6 <- block@19) (arrays.1%out#8) with arrays.1#6 +debug: Replacing trivial Phi node: let arrays.2%out#9: bytes = φ(arrays.2#7 <- block@11) (arrays.2%out#9) with arrays.2#7 +debug: Deleting Phi assignment: let arrays.2%out#9: bytes = φ(arrays.2#7 <- block@11) +debug: Replacing trivial Phi node: let arrays.2%out#15: bytes = φ(arrays.2#7 <- block@17, arrays.2#7 <- block@18) (arrays.2%out#15) with arrays.2#7 +debug: Deleting Phi assignment: let arrays.2%out#15: bytes = φ(arrays.2#7 <- block@17, arrays.2#7 <- block@18) +debug: Replacing trivial Phi node: let arrays.2%out#8: bytes = φ(arrays.2#7 <- block@12, arrays.2#7 <- block@19) (arrays.2%out#8) with arrays.2#7 +debug: Deleting Phi assignment: let arrays.2%out#8: bytes = φ(arrays.2#7 <- block@12, arrays.2#7 <- block@19) +debug: Replacing trivial Phi node: let arrays.2%out#8: bytes = φ(arrays.2#7 <- block@12, arrays.2#7 <- block@19) (arrays.2%out#8) with arrays.2#7 +debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@1: // if_body_L1 with block@0: // L130 in block@2: // after_if_else_L1 +debug: Merged linear block@1: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@2: // after_if_else_L1 with block@0: // L130 in block@3: // if_body_L1 +debug: Merged linear block@2: // after_if_else_L1 into block@0: // L130 +debug: Replaced predecessor block@3: // if_body_L1 with block@0: // L130 in block@4: // after_if_else_L1 +debug: Merged linear block@3: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@4: // after_if_else_L1 with block@0: // L130 in block@5: // if_body_L1 +debug: Merged linear block@4: // after_if_else_L1 into block@0: // L130 +debug: Replaced predecessor block@5: // if_body_L1 with block@0: // L130 in block@6: // after_if_else_L1 +debug: Merged linear block@5: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@6: // after_if_else_L1 with block@0: // L130 in block@7: // if_body_L1 +debug: Merged linear block@6: // after_if_else_L1 into block@0: // L130 +debug: Replaced predecessor block@7: // if_body_L1 with block@0: // L130 in block@8: // after_if_else_L1 +debug: Merged linear block@7: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@8: // after_if_else_L1 with block@0: // L130 in block@9: // if_body_L1 +debug: Merged linear block@8: // after_if_else_L1 into block@0: // L130 +debug: Replaced predecessor block@9: // if_body_L1 with block@0: // L130 in block@10: // after_if_else_L1 +debug: Merged linear block@9: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@10: // after_if_else_L1 with block@0: // L130 in block@11: // if_body_L1 +debug: Merged linear block@10: // after_if_else_L1 into block@0: // L130 +debug: Replaced predecessor block@11: // if_body_L1 with block@0: // L130 in block@12: // after_if_else_L1 +debug: Merged linear block@11: // if_body_L1 into block@0: // L130 +debug: Replaced predecessor block@12: // after_if_else_L1 with block@0: // L130 in block@20: // after_if_else_L147 +debug: Replaced predecessor block@12: // after_if_else_L1 with block@0: // L130 in block@13: // if_body_L148 +debug: Merged linear block@12: // after_if_else_L1 into block@0: // L130 +debug: Optimizer: Remove Empty Blocks +debug: Removed empty block: block@14: // if_body_L1 +debug: Removed empty block: block@15: // after_if_else_L1 +debug: Removed empty block: block@16: // if_body_L1 +debug: Removed empty block: block@17: // after_if_else_L1 +debug: Removed empty block: block@18: // if_body_L1 +debug: Not removing empty block block@19: // after_if_else_L1 because it's used by phi nodes +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Replacing redundant declaration let tmp%0#0: biguint = (itob start#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:134:23-35, ir_type=bytes, name='val_as_bytes%0', version=0),) +debug: Replacing redundant declaration let tmp%2#0: uint64 = (+ start#0 1u) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:135:29-38, ir_type=uint64, name='to_encode%0', version=0),) +debug: Replacing redundant declaration let tmp%5#0: uint64 = (+ start#0 2u) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:136:29-38, ir_type=uint64, name='to_encode%1', version=0),) +debug: Replacing redundant declaration let tmp%8#0: uint64 = (+ start#0 6u) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:150:29-38, ir_type=uint64, name='to_encode%5', version=0),) +debug: Replacing redundant declaration let tmp%11#0: uint64 = (+ start#0 7u) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:151:29-38, ir_type=uint64, name='to_encode%6', version=0),) +debug: Replacing redundant declaration let tmp%14#0: uint64 = (+ start#0 8u) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:152:29-38, ir_type=uint64, name='to_encode%7', version=0),) +debug: Found equivalence set: val_as_bytes%0#0, tmp%0#0 +debug: Replacing {tmp%0#0} with val_as_bytes%0#0 made 1 modifications +debug: Found equivalence set: to_encode%0#0, tmp%2#0 +debug: Replacing {tmp%2#0} with to_encode%0#0 made 1 modifications +debug: Found equivalence set: to_encode%1#0, tmp%5#0 +debug: Replacing {tmp%5#0} with to_encode%1#0 made 1 modifications +debug: Found equivalence set: to_encode%5#0, tmp%8#0 +debug: Replacing {tmp%8#0} with to_encode%5#0 made 1 modifications +debug: Found equivalence set: to_encode%6#0, tmp%11#0 +debug: Replacing {tmp%11#0} with to_encode%6#0 made 1 modifications +debug: Found equivalence set: to_encode%7#0, tmp%14#0 +debug: Replacing {tmp%14#0} with to_encode%7#0 made 1 modifications +debug: Replacing redundant declaration let tmp%3#0: biguint = (itob to_encode%0#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:135:23-39, ir_type=bytes, name='val_as_bytes%1', version=0),) +debug: Replacing redundant declaration let tmp%6#0: biguint = (itob to_encode%1#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:136:23-39, ir_type=bytes, name='val_as_bytes%2', version=0),) +debug: Replacing redundant declaration let tmp%9#0: biguint = (itob to_encode%5#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:150:23-39, ir_type=bytes, name='val_as_bytes%6', version=0),) +debug: Replacing redundant declaration let tmp%12#0: biguint = (itob to_encode%6#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:151:23-39, ir_type=bytes, name='val_as_bytes%7', version=0),) +debug: Replacing redundant declaration let tmp%15#0: biguint = (itob to_encode%7#0) with copy of existing registers (Register(source_location=arc4_types/mutable_params.py:152:23-39, ir_type=bytes, name='val_as_bytes%8', version=0),) +debug: Found equivalence set: val_as_bytes%1#0, tmp%3#0 +debug: Replacing {tmp%3#0} with val_as_bytes%1#0 made 1 modifications +debug: Found equivalence set: val_as_bytes%2#0, tmp%6#0 +debug: Replacing {tmp%6#0} with val_as_bytes%2#0 made 1 modifications +debug: Found equivalence set: val_as_bytes%6#0, tmp%9#0 +debug: Replacing {tmp%9#0} with val_as_bytes%6#0 made 1 modifications +debug: Found equivalence set: val_as_bytes%7#0, tmp%12#0 +debug: Replacing {tmp%12#0} with val_as_bytes%7#0 made 1 modifications +debug: Found equivalence set: val_as_bytes%8#0, tmp%15#0 +debug: Replacing {tmp%15#0} with val_as_bytes%8#0 made 1 modifications +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_1.ir +debug: Begin optimization pass 2/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Found equivalence set: result%3#0, my_array#0 +debug: Replacing {result%3#0} with my_array#0 made 1 modifications +debug: Found equivalence set: my_array#4, nested#0 +debug: Replacing {nested#0} with my_array#4 made 1 modifications +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x01 0x02) to 0x0102 +debug: Simplified ((extract 6 2) as_bytes%0#0) to 0x0005 +debug: Simplified ((extract 6 2) as_bytes%1#0) to 0x0004 +debug: Simplified (concat 0x80 0x32) to 0x8032 +debug: Simplified (extract3 my_array#0 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) my_array#0) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array#1 2u 1u) // on error: Index access is out of bounds to ((extract 2 1) my_array#1) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array#2 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#2) // on error: Index access is out of bounds +debug: Simplified ((extract 6 2) as_bytes%4#0) to 0x0007 +debug: Simplified (extract3 my_array#0 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#0) // on error: Index access is out of bounds +debug: Simplified ((extract 6 2) as_bytes%5#0) to 0x0005 +debug: Simplified (extract3 my_array_copy_2#2 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#2) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_2#3 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#3) // on error: Index access is out of bounds +debug: Simplified (&& 1u 1u) to 1u +debug: Simplified (extract3 my_array#3 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array#3) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_2#4 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#4) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_3#1 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_3#1) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array#3 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#3) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_2#4 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array_copy_2#4) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_3#1 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array_copy_3#1) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array#4 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array#4) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_2#5 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_2#5) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_3#2 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) my_array_copy_3#2) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array#4 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array#4) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_2#5 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array_copy_2#5) // on error: Index access is out of bounds +debug: Simplified (extract3 my_array_copy_3#2 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) my_array_copy_3#2) // on error: Index access is out of bounds +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable result%0#0 +debug: Removing unused variable encoded_bool%0#0 +debug: Removing unused variable length%0#0 +debug: Removing unused variable as_bytes%0#0 +debug: Removing unused variable length%1#0 +debug: Removing unused variable as_bytes%1#0 +debug: Removing unused variable encoded_tuple_buffer%1#0 +debug: Removing unused variable offset_as_uint16%0#0 +debug: Removing unused variable data_length%1#0 +debug: Removing unused variable item_offset%0#0 +debug: Removing unused variable item_offset%1#0 +debug: Removing unused variable item_offset%2#0 +debug: Removing unused variable length%2#0 +debug: Removing unused variable as_bytes%4#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) +debug: Removing unused variable item_offset%3#0 +debug: Removing unused variable length%3#0 +debug: Removing unused variable as_bytes%5#0 +debug: Removing unused variable item_offset%4#0 +debug: Removing unused variable item_offset%5#0 +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) +debug: Removing unused variable tmp%11#0 +debug: Removing unused variable tmp%12#0 +debug: Removing unused variable tmp%14#0 +debug: Removing unused variable item_offset%6#0 +debug: Removing unused variable item_offset%7#0 +debug: Removing unused variable item_offset%8#0 +debug: Removing unused variable item_offset%9#0 +debug: Removing unused variable item_offset%10#0 +debug: Removing unused variable item_offset%11#0 +debug: Removing unused variable item_offset%12#0 +debug: Removing unused variable item_offset%13#0 +debug: Removing unused variable item_offset%14#0 +debug: Removing unused variable item_offset%15#0 +debug: Removing unused variable item_offset%16#0 +debug: Removing unused variable item_offset%17#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified ((extract 6 2) as_bytes%0#0) to 0x0007 +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable length%0#0 +debug: Removing unused variable as_bytes%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (extract3 arrays.0#1 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) arrays.0#1) // on error: Index access is out of bounds +debug: Simplified (extract3 arrays.1#2 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) arrays.1#2) // on error: Index access is out of bounds +debug: Simplified (extract3 arrays.2#3 0u 1u) // on error: Index access is out of bounds to ((extract 0 1) arrays.2#3) // on error: Index access is out of bounds +debug: Simplified (extract3 arrays.0#14 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) arrays.0#14) // on error: Index access is out of bounds +debug: Simplified (extract3 arrays.1#15 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) arrays.1#15) // on error: Index access is out of bounds +debug: Simplified (extract3 arrays.2#16 1u 1u) // on error: Index access is out of bounds to ((extract 1 1) arrays.2#16) // on error: Index access is out of bounds +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable item_offset%0#0 +debug: Removing unused variable item_offset%1#0 +debug: Removing unused variable item_offset%2#0 +debug: Removing unused variable item_offset%3#0 +debug: Removing unused variable item_offset%4#0 +debug: Removing unused variable item_offset%5#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@19: // after_if_else_L1 with block@13: // if_body_L148 in block@20: // after_if_else_L147 +debug: Merged linear block@19: // after_if_else_L1 into block@13: // if_body_L148 +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_2.ir +debug: Begin optimization pass 3/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0102 0x03) to 0x010203 +debug: Simplified (concat 0x0005 "Happy") to 0x00054861707079 +debug: Simplified (concat 0x0004 "Days") to 0x000444617973 +debug: Simplified (concat 0x8032 0x0006) to 0x80320006 +debug: Simplified (concat 0x0007 "AARRGH!") to 0x000741415252474821 +debug: Simplified (concat 0x0005 "Happy") to 0x00054861707079 +debug: Simplified (&& 1u 1u) to 1u +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable result%1#0 +debug: Removing unused variable length_uint16%0#0 +debug: Removing unused variable length_uint16%1#0 +debug: Removing unused variable encoded_tuple_buffer%2#0 +debug: Removing unused variable length_uint16%2#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) +debug: Removing unused variable length_uint16%3#0 +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) +debug: Removing unused variable tmp%13#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x0007 "AARRGH!") to 0x000741415252474821 +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable length_uint16%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_3.ir +debug: Begin optimization pass 4/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (concat 0x010203 0x04) to 0x01020304 +debug: Simplified (len 0x00054861707079) to 7u +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable result%2#0 +debug: Removing unused variable encoded_value%0#0 +debug: Removing unused variable encoded_value%1#0 +debug: Removing unused variable encoded_tuple_buffer%3#0 +debug: Removing unused variable encoded_value%2#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(my_array#0, my_struct#0) +debug: Removing unused variable encoded_value%3#0 +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, my_array#0, 0u, 1u) +debug: Removing unused variable tmp%15#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (len 0x000741415252474821) to 9u +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable encoded_value%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_4.ir +debug: Begin optimization pass 5/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified (+ 6u 7u) to 13u +debug: Simplified ((extract 2 1) 0x01020304) // on error: Index access is out of bounds to 0x03 +debug: Simplified ((extract 1 1) 0x01020304) // on error: Index access is out of bounds to 0x02 +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable my_array#0 +debug: Removing unused variable data_length%0#0 +debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Removing unused variable new_value_length%0#0 +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Output IR to arc4_types/out/Arc4MutableParamsContract.ssa.opt_pass_5.ir +debug: Begin optimization pass 6/100 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Replace Compiled References +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizer: Remove Calls To No Op Subroutines +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Simplified ((extract 6 2) as_bytes%3#0) to 0x000d debug: Simplified (b== 0x03 0x03) to 1u debug: Simplified (b== 0x02 0x02) to 1u debug: Optimizer: Remove Unused Variables @@ -13968,8 +15881,8 @@ debug: Removing unused variable as_bytes%3#0 debug: Removing unused variable reinterpret_biguint%0#0 debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) debug: Removing unused variable reinterpret_biguint%6#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14004,7 +15917,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14014,6 +15927,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14055,8 +15971,8 @@ debug: Removing unused variable offset_as_uint16%1#0 debug: Removing unused variable tmp%0#0 debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) debug: Removing unused variable tmp%6#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14091,7 +16007,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14101,6 +16017,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14140,8 +16059,8 @@ debug: Simplified (concat 0x80320006000d 0x00054861707079) to 0x80320006000d0005 debug: Optimizer: Remove Unused Variables debug: Removing unused variable encoded_tuple_buffer%4#0 debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14176,7 +16095,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14186,6 +16105,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14225,8 +16147,8 @@ debug: Simplified (concat 0x80320006000d00054861707079 0x000444617973) to 0x8032 debug: Optimizer: Remove Unused Variables debug: Removing unused variable encoded_tuple_buffer%5#0 debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, my_struct#0) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14261,7 +16183,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14271,6 +16193,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14311,8 +16236,8 @@ debug: Simplified (extract_uint16 0x80320006000d00054861707079000444617973 4u) t debug: Optimizer: Remove Unused Variables debug: Removing unused variable my_struct#0 debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, 0x80320006000d00054861707079000444617973) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14347,7 +16272,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14357,6 +16282,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14397,8 +16325,8 @@ debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, 0x80320006000d00054861707079000444617973) debug: Removing unused variable item_start_offset%1#0 debug: Removing unused variable item_end_offset%1#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14433,7 +16361,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14443,6 +16371,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14482,8 +16413,8 @@ debug: Simplified (== 0x00054861707079 0x00054861707079) to 1u debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, 0x80320006000d00054861707079000444617973) debug: Removing unused variable tmp%7#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14518,7 +16449,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14528,6 +16459,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14566,8 +16500,8 @@ debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, 0x80320006000d00054861707079000444617973) debug: Removing unused variable tmp%8#0 -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14602,7 +16536,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14612,6 +16546,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14649,8 +16586,8 @@ debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Optimizer: Remove Unused Variables debug: Not removing unused assignment since source is not marked as pure: let (other_routine%4#0: bool, other_routine%5#0: bool, other_routine%6#0: bytes, other_routine%7#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine(0x01020304, 0x80320006000d00054861707079000444617973) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_3%0#0: bytes, other_routine_3%1#0: bytes, other_routine_3%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3(my_array#2, my_array_copy_2#3, my_array_copy_2#3) -debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%11#0) +debug: Not removing unused assignment since source is not marked as pure: let (mutate_tuple_items_and_reassign%0#0: bytes, mutate_tuple_items_and_reassign%1#0: bytes, mutate_tuple_items_and_reassign%2#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign(my_array#2, my_array_copy_2#3, 0x01020304, 0u, 1u) +debug: Not removing unused assignment since source is not marked as pure: let (other_routine_2%4#0: bytes, other_routine_2%5#0: bytes) = test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2(tmp%28#0) debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops @@ -14685,7 +16622,7 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines -debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Optimizing subroutine test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier @@ -14695,6 +16632,9 @@ debug: Optimizer: Replace Compiled References debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks +debug: Not removing empty block block@21: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@23: // if_body_L1 because it's used by phi nodes +debug: Not removing empty block block@25: // if_body_L1 because it's used by phi nodes debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: Optimizer: Remove Calls To No Op Subroutines @@ -14716,33 +16656,84 @@ debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParams debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 -debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign debug: Removing Phis from test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies using strategy RootOperandGrouping -debug: Coalescing my_array#1 with [my_array#2] -debug: Coalescing my_array_copy_2#2 with [my_array_copy_2#3] -debug: Coalescing resulted in 8 replacement/s +debug: Coalescing my_array#1 with [my_array#2, my_array#3, my_array#4] +debug: Coalescing my_array_copy_2#2 with [my_array_copy_2#3, my_array_copy_2#4, my_array_copy_2#5] +debug: Coalescing my_array_copy_3#1 with [my_array_copy_3#2] +debug: Coalescing resulted in 26 replacement/s debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine using strategy RootOperandGrouping debug: Coalescing array#0 with [array#1] -debug: Coalescing struct#0 with [struct#1] +debug: Coalescing struct#0 with [struct#2] debug: Coalescing resulted in 4 replacement/s debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 using strategy RootOperandGrouping -debug: Coalescing arrays.0#0 with [arrays.0#2] -debug: Coalescing arrays.1#0 with [arrays.1#2] -debug: Coalescing arrays.2#0 with [arrays.2#2] -debug: Coalescing loop_counter%0#0 with [loop_counter%0#7, loop_counter%0#1, loop_counter%0#2, loop_counter%0#3] -debug: Coalescing resulted in 16 replacement/s +debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign using strategy RootOperandGrouping +debug: Coalescing arrays.0#0 with [arrays.0#1, arrays.0#5] +debug: Coalescing arrays.0#10 with [arrays.0#17, arrays.0#14] +debug: Coalescing arrays.1#0 with [arrays.1#2, arrays.1#6] +debug: Coalescing arrays.1#11 with [arrays.1#18, arrays.1#15] +debug: Coalescing arrays.2#0 with [arrays.2#3, arrays.2#7] +debug: Coalescing arrays.2#12 with [arrays.2#19, arrays.2#16] +debug: Coalescing arrays.0%is_original#0 with [arrays.0%is_original#8, arrays.0%is_original#4, arrays.0%is_original#5] +debug: Coalescing arrays.1%is_original#0 with [arrays.1%is_original#11, arrays.1%is_original#5, arrays.1%is_original#8] +debug: Coalescing arrays.2%is_original#0 with [arrays.2%is_original#14, arrays.2%is_original#6, arrays.2%is_original#11] +debug: Coalescing arrays.0%out#7 with [arrays.0%out#8] +debug: Coalescing arrays.1%out#6 with [arrays.1%out#7] +debug: Coalescing arrays.2%out#5 with [arrays.2%out#6] +debug: Coalescing resulted in 69 replacement/s debug: Coalescing local variables in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.approval_program debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutating_copies debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_2 -debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 +debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: loc: {arrays.0#10=None, arrays.1#11=None, arrays.2#12=None, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0, arrays.0#0=arrays.0#0, arrays.1#0=arrays.1#0, arrays.2#0=arrays.2#0} +debug: pred: {arrays.0#10=arrays.0#0, arrays.1#11=arrays.1#0, arrays.2#12=arrays.2#0, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0} +debug: ready: arrays.0#10, arrays.1#11, arrays.2#12 +debug: to_do: arrays.0#10, arrays.1#11, arrays.2#12, arrays.0%is_original#0, arrays.1%is_original#0, arrays.2%is_original#0 +debug: * avail arrays.2#12 +debug: * avail arrays.2#0 +debug: * avail arrays.1#11 +debug: * avail arrays.1#0 +debug: * avail arrays.0#10 +debug: * avail arrays.0#0 +debug: * to_do arrays.2%is_original#0 +debug: * to_do arrays.1%is_original#0 +debug: * to_do arrays.0%is_original#0 +debug: * to_do arrays.2#12 +debug: * to_do arrays.1#11 +debug: * to_do arrays.0#10 +debug: loc: {arrays.0#10=None, arrays.1#11=None, arrays.2#12=None, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0, arrays.0#0=arrays.0#0, arrays.1#0=arrays.1#0, arrays.2#0=arrays.2#0} +debug: pred: {arrays.0#10=arrays.0#0, arrays.1#11=arrays.1#0, arrays.2#12=arrays.2#0, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0} +debug: ready: arrays.0#10, arrays.1#11, arrays.2#12 +debug: to_do: arrays.0#10, arrays.1#11, arrays.2#12, arrays.0%is_original#0, arrays.1%is_original#0, arrays.2%is_original#0 +debug: * avail arrays.2#12 +debug: * avail arrays.2#0 +debug: * avail arrays.1#11 +debug: * avail arrays.1#0 +debug: * avail arrays.0#10 +debug: * avail arrays.0#0 +debug: * to_do arrays.2%is_original#0 +debug: * to_do arrays.1%is_original#0 +debug: * to_do arrays.0%is_original#0 +debug: * to_do arrays.2#12 +debug: * to_do arrays.1#11 +debug: * to_do arrays.0#10 +debug: loc: {arrays.0#10=arrays.0#10, arrays.1#11=arrays.1#11, arrays.2#12=arrays.2#12, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0} +debug: pred: {arrays.0#10=arrays.0#10, arrays.1#11=arrays.1#11, arrays.2#12=arrays.2#12, arrays.0%is_original#0=arrays.0%is_original#0, arrays.1%is_original#0=arrays.1%is_original#0, arrays.2%is_original#0=arrays.2%is_original#0} +debug: ready: +debug: to_do: arrays.0#10, arrays.1#11, arrays.2#12, arrays.0%is_original#0, arrays.1%is_original#0, arrays.2%is_original#0 +debug: * to_do arrays.2%is_original#0 +debug: * to_do arrays.1%is_original#0 +debug: * to_do arrays.0%is_original#0 +debug: * to_do arrays.2#12 +debug: * to_do arrays.1#11 +debug: * to_do arrays.0#10 debug: Sequentializing parallel copies in test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.clear_state_program debug: Performing post-SSA optimizations debug: Output IR to arc4_types/out/Arc4MutableParamsContract.destructured.ir @@ -14774,10 +16765,60 @@ debug: Inserted mutating_copies_block@0.ops[93]: 'l-store-copy reinterpret_bigui debug: Replaced mutating_copies_block@0.ops[95]: 'v-load reinterpret_biguint%10#0' with 'l-load reinterpret_biguint%10#0' debug: Inserted mutating_copies_block@0.ops[98]: 'l-store-copy tmp%10#0 0' debug: Replaced mutating_copies_block@0.ops[100]: 'v-load tmp%10#0' with 'l-load tmp%10#0' -debug: Inserted mutating_copies_block@0.ops[104]: 'l-store-copy my_array_copy_2#2 1' -debug: Replaced mutating_copies_block@0.ops[105]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' -debug: Inserted mutating_copies_block@0.ops[112]: 'l-store-copy tmp%11#0 0' -debug: Replaced mutating_copies_block@0.ops[114]: 'v-load tmp%11#0' with 'l-load tmp%11#0' +debug: Inserted mutating_copies_block@0.ops[119]: 'l-store-copy my_array#1 0' +debug: Replaced mutating_copies_block@0.ops[121]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[123]: 'l-store-copy reinterpret_biguint%12#0 0' +debug: Replaced mutating_copies_block@0.ops[125]: 'v-load reinterpret_biguint%12#0' with 'l-load reinterpret_biguint%12#0' +debug: Inserted mutating_copies_block@0.ops[128]: 'l-store-copy tmp%16#0 0' +debug: Replaced mutating_copies_block@0.ops[130]: 'v-load tmp%16#0' with 'l-load tmp%16#0' +debug: Inserted mutating_copies_block@0.ops[134]: 'l-store-copy reinterpret_biguint%14#0 0' +debug: Replaced mutating_copies_block@0.ops[136]: 'v-load reinterpret_biguint%14#0' with 'l-load reinterpret_biguint%14#0' +debug: Inserted mutating_copies_block@0.ops[139]: 'l-store-copy tmp%17#0 0' +debug: Replaced mutating_copies_block@0.ops[141]: 'v-load tmp%17#0' with 'l-load tmp%17#0' +debug: Inserted mutating_copies_block@0.ops[145]: 'l-store-copy reinterpret_biguint%16#0 0' +debug: Replaced mutating_copies_block@0.ops[147]: 'v-load reinterpret_biguint%16#0' with 'l-load reinterpret_biguint%16#0' +debug: Inserted mutating_copies_block@0.ops[150]: 'l-store-copy tmp%18#0 0' +debug: Replaced mutating_copies_block@0.ops[152]: 'v-load tmp%18#0' with 'l-load tmp%18#0' +debug: Inserted mutating_copies_block@0.ops[156]: 'l-store-copy reinterpret_biguint%18#0 0' +debug: Replaced mutating_copies_block@0.ops[158]: 'v-load reinterpret_biguint%18#0' with 'l-load reinterpret_biguint%18#0' +debug: Inserted mutating_copies_block@0.ops[161]: 'l-store-copy tmp%19#0 0' +debug: Replaced mutating_copies_block@0.ops[163]: 'v-load tmp%19#0' with 'l-load tmp%19#0' +debug: Inserted mutating_copies_block@0.ops[167]: 'l-store-copy reinterpret_biguint%20#0 0' +debug: Replaced mutating_copies_block@0.ops[169]: 'v-load reinterpret_biguint%20#0' with 'l-load reinterpret_biguint%20#0' +debug: Inserted mutating_copies_block@0.ops[172]: 'l-store-copy tmp%20#0 0' +debug: Replaced mutating_copies_block@0.ops[174]: 'v-load tmp%20#0' with 'l-load tmp%20#0' +debug: Inserted mutating_copies_block@0.ops[178]: 'l-store-copy reinterpret_biguint%22#0 0' +debug: Replaced mutating_copies_block@0.ops[180]: 'v-load reinterpret_biguint%22#0' with 'l-load reinterpret_biguint%22#0' +debug: Inserted mutating_copies_block@0.ops[183]: 'l-store-copy tmp%21#0 0' +debug: Replaced mutating_copies_block@0.ops[185]: 'v-load tmp%21#0' with 'l-load tmp%21#0' +debug: Inserted mutating_copies_block@0.ops[195]: 'l-store-copy my_array#1 0' +debug: Replaced mutating_copies_block@0.ops[197]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[199]: 'l-store-copy reinterpret_biguint%24#0 0' +debug: Replaced mutating_copies_block@0.ops[201]: 'v-load reinterpret_biguint%24#0' with 'l-load reinterpret_biguint%24#0' +debug: Inserted mutating_copies_block@0.ops[204]: 'l-store-copy tmp%22#0 0' +debug: Replaced mutating_copies_block@0.ops[206]: 'v-load tmp%22#0' with 'l-load tmp%22#0' +debug: Inserted mutating_copies_block@0.ops[210]: 'l-store-copy reinterpret_biguint%26#0 0' +debug: Replaced mutating_copies_block@0.ops[212]: 'v-load reinterpret_biguint%26#0' with 'l-load reinterpret_biguint%26#0' +debug: Inserted mutating_copies_block@0.ops[215]: 'l-store-copy tmp%23#0 0' +debug: Replaced mutating_copies_block@0.ops[217]: 'v-load tmp%23#0' with 'l-load tmp%23#0' +debug: Inserted mutating_copies_block@0.ops[221]: 'l-store-copy reinterpret_biguint%28#0 0' +debug: Replaced mutating_copies_block@0.ops[223]: 'v-load reinterpret_biguint%28#0' with 'l-load reinterpret_biguint%28#0' +debug: Inserted mutating_copies_block@0.ops[226]: 'l-store-copy tmp%24#0 0' +debug: Replaced mutating_copies_block@0.ops[228]: 'v-load tmp%24#0' with 'l-load tmp%24#0' +debug: Inserted mutating_copies_block@0.ops[232]: 'l-store-copy reinterpret_biguint%30#0 0' +debug: Replaced mutating_copies_block@0.ops[234]: 'v-load reinterpret_biguint%30#0' with 'l-load reinterpret_biguint%30#0' +debug: Inserted mutating_copies_block@0.ops[237]: 'l-store-copy tmp%25#0 0' +debug: Replaced mutating_copies_block@0.ops[239]: 'v-load tmp%25#0' with 'l-load tmp%25#0' +debug: Inserted mutating_copies_block@0.ops[243]: 'l-store-copy reinterpret_biguint%32#0 0' +debug: Replaced mutating_copies_block@0.ops[245]: 'v-load reinterpret_biguint%32#0' with 'l-load reinterpret_biguint%32#0' +debug: Inserted mutating_copies_block@0.ops[248]: 'l-store-copy tmp%26#0 0' +debug: Replaced mutating_copies_block@0.ops[250]: 'v-load tmp%26#0' with 'l-load tmp%26#0' +debug: Inserted mutating_copies_block@0.ops[254]: 'l-store-copy reinterpret_biguint%34#0 0' +debug: Replaced mutating_copies_block@0.ops[256]: 'v-load reinterpret_biguint%34#0' with 'l-load reinterpret_biguint%34#0' +debug: Inserted mutating_copies_block@0.ops[259]: 'l-store-copy tmp%27#0 0' +debug: Replaced mutating_copies_block@0.ops[261]: 'v-load tmp%27#0' with 'l-load tmp%27#0' +debug: Inserted mutating_copies_block@0.ops[265]: 'l-store-copy tmp%28#0 0' +debug: Replaced mutating_copies_block@0.ops[267]: 'v-load tmp%28#0' with 'l-load tmp%28#0' debug: Inserted mutating_copies_block@0.ops[89]: 'l-store-copy my_array_copy_2#2 1' debug: Replaced mutating_copies_block@0.ops[92]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' debug: Inserted mutating_copies_block@0.ops[50]: 'l-store-copy item_end_offset%0#0 0' @@ -14790,18 +16831,48 @@ debug: Inserted mutating_copies_block@0.ops[50]: 'l-store-copy my_struct#1 0' debug: Replaced mutating_copies_block@0.ops[55]: 'v-load my_struct#1' with 'l-load my_struct#1' debug: Inserted mutating_copies_block@0.ops[48]: 'l-store-copy item_start_offset%0#0 1' debug: Replaced mutating_copies_block@0.ops[57]: 'v-load item_start_offset%0#0' with 'l-load item_start_offset%0#0' -debug: Inserted mutating_copies_block@0.ops[109]: 'l-store-copy my_array#1 0' -debug: Replaced mutating_copies_block@0.ops[117]: 'v-load my_array#1' with 'l-load my_array#1' debug: Inserted mutating_copies_block@0.ops[6]: 'l-store-copy my_array#1 0' debug: Replaced mutating_copies_block@0.ops[17]: 'v-load my_array#1' with 'l-load my_array#1' debug: Inserted mutating_copies_block@0.ops[83]: 'l-store-copy my_array_copy_2#2 0' debug: Replaced mutating_copies_block@0.ops[94]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[111]: 'l-store-copy my_array#1 0' +debug: Replaced mutating_copies_block@0.ops[120]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[113]: 'l-store-copy my_array_copy_2#2 2' +debug: Replaced mutating_copies_block@0.ops[122]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' debug: Inserted mutating_copies_block@0.ops[21]: 'l-store-copy my_array#1 2' debug: Replaced mutating_copies_block@0.ops[35]: 'v-load my_array#1' with 'l-load my_array#1' debug: Inserted mutating_copies_block@0.ops[101]: 'l-store-copy my_array_copy_2#2 0' debug: Replaced mutating_copies_block@0.ops[114]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[130]: 'l-store-copy my_array_copy_2#2 1' +debug: Replaced mutating_copies_block@0.ops[145]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[190]: 'l-store-copy my_array_copy_3#1 0' +debug: Replaced mutating_copies_block@0.ops[203]: 'v-load my_array_copy_3#1' with 'l-load my_array_copy_3#1' +debug: Inserted mutating_copies_block@0.ops[208]: 'l-store-copy my_array_copy_2#2 1' +debug: Replaced mutating_copies_block@0.ops[223]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[179]: 'l-store-copy my_array_copy_2#2 0' +debug: Replaced mutating_copies_block@0.ops[203]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' debug: Inserted mutating_copies_block@0.ops[20]: 'l-store-copy my_struct#1 3' debug: Replaced mutating_copies_block@0.ops[47]: 'v-load my_struct#1' with 'l-load my_struct#1' +debug: Inserted mutating_copies_block@0.ops[130]: 'l-store-copy my_array_copy_3#1 2' +debug: Replaced mutating_copies_block@0.ops[158]: 'v-load my_array_copy_3#1' with 'l-load my_array_copy_3#1' +debug: Inserted mutating_copies_block@0.ops[210]: 'l-store-copy my_array_copy_3#1 2' +debug: Replaced mutating_copies_block@0.ops[238]: 'v-load my_array_copy_3#1' with 'l-load my_array_copy_3#1' +debug: Inserted mutating_copies_block@0.ops[137]: 'l-store-copy my_array#1 2' +debug: Replaced mutating_copies_block@0.ops[170]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[149]: 'l-store-copy my_array_copy_2#2 2' +debug: Replaced mutating_copies_block@0.ops[182]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[161]: 'l-store-copy my_array_copy_3#1 2' +debug: Replaced mutating_copies_block@0.ops[195]: 'v-load my_array_copy_3#1' with 'l-load my_array_copy_3#1' +debug: Inserted mutating_copies_block@0.ops[173]: 'l-store-copy my_array#1 2' +debug: Replaced mutating_copies_block@0.ops[208]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[221]: 'l-store-copy my_array#1 2' +debug: Replaced mutating_copies_block@0.ops[254]: 'v-load my_array#1' with 'l-load my_array#1' +debug: Inserted mutating_copies_block@0.ops[233]: 'l-store-copy my_array_copy_2#2 2' +debug: Replaced mutating_copies_block@0.ops[266]: 'v-load my_array_copy_2#2' with 'l-load my_array_copy_2#2' +debug: Inserted mutating_copies_block@0.ops[245]: 'l-store-copy my_array_copy_3#1 2' +debug: Replaced mutating_copies_block@0.ops[278]: 'v-load my_array_copy_3#1' with 'l-load my_array_copy_3#1' +debug: Inserted mutating_copies_block@0.ops[257]: 'l-store-copy my_array#1 2' +debug: Replaced mutating_copies_block@0.ops[290]: 'v-load my_array#1' with 'l-load my_array#1' debug: Inserted mutating_copies_block@0.ops[37]: 'l-store-copy my_array#1 1' debug: Replaced mutating_copies_block@0.ops[114]: 'v-load my_array#1' with 'l-load my_array#1' debug: Inserted other_routine_block@0.ops[28]: 'l-store-copy updated_data%0#0 0' @@ -14838,11 +16909,91 @@ debug: Inserted other_routine_block@0.ops[12]: 'l-store-copy item_offset%0#0 2' debug: Replaced other_routine_block@0.ops[43]: 'v-load item_offset%0#0' with 'l-load item_offset%0#0' debug: Inserted other_routine_2_block@0.ops[3]: 'l-store-copy array#1 0' debug: Replaced other_routine_2_block@0.ops[6]: 'v-load array#1' with 'l-load array#1' -debug: Found 2 edge set/s for test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.other_routine_3 -debug: Allocated 1 variable/s to x-stack: loop_counter%0#0 -debug: shared x-stack for other_routine_3_block@0 -> other_routine_3_for_body@1: loop_counter%0#0 -debug: shared x-stack for other_routine_3_for_header_1@3 -> other_routine_3_for_body@1: loop_counter%0#0 -debug: shared x-stack for other_routine_3_for_header_2@4 -> other_routine_3_for_body@1: loop_counter%0#0 +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[8]: 'l-store-copy val_as_bytes%0#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[10]: 'v-load val_as_bytes%0#0' with 'l-load val_as_bytes%0#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[20]: 'l-store-copy to_encode%0#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[22]: 'v-load to_encode%0#0' with 'l-load to_encode%0#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[24]: 'l-store-copy val_as_bytes%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[26]: 'v-load val_as_bytes%1#0' with 'l-load val_as_bytes%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[36]: 'l-store-copy to_encode%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[38]: 'v-load to_encode%1#0' with 'l-load to_encode%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[40]: 'l-store-copy val_as_bytes%2#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[42]: 'v-load val_as_bytes%2#0' with 'l-load val_as_bytes%2#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[51]: 'l-store-copy reinterpret_biguint%0#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[53]: 'v-load reinterpret_biguint%0#0' with 'l-load reinterpret_biguint%0#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[56]: 'l-store-copy tmp%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[58]: 'v-load tmp%1#0' with 'l-load tmp%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[62]: 'l-store-copy reinterpret_biguint%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[64]: 'v-load reinterpret_biguint%1#0' with 'l-load reinterpret_biguint%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[67]: 'l-store-copy tmp%4#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[69]: 'v-load tmp%4#0' with 'l-load tmp%4#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[73]: 'l-store-copy reinterpret_biguint%2#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[75]: 'v-load reinterpret_biguint%2#0' with 'l-load reinterpret_biguint%2#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[78]: 'l-store-copy tmp%7#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[80]: 'v-load tmp%7#0' with 'l-load tmp%7#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[85]: 'l-store-copy to_encode%2#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[87]: 'v-load to_encode%2#0' with 'l-load to_encode%2#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[89]: 'l-store-copy val_as_bytes%3#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[91]: 'v-load val_as_bytes%3#0' with 'l-load val_as_bytes%3#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[101]: 'l-store-copy to_encode%3#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[103]: 'v-load to_encode%3#0' with 'l-load to_encode%3#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[105]: 'l-store-copy val_as_bytes%4#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[107]: 'v-load val_as_bytes%4#0' with 'l-load val_as_bytes%4#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[117]: 'l-store-copy to_encode%4#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[119]: 'v-load to_encode%4#0' with 'l-load to_encode%4#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[121]: 'l-store-copy val_as_bytes%5#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[123]: 'v-load val_as_bytes%5#0' with 'l-load val_as_bytes%5#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[12]: 'l-store-copy assigned_value%0#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[15]: 'v-load assigned_value%0#0' with 'l-load assigned_value%0#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[29]: 'l-store-copy assigned_value%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[32]: 'v-load assigned_value%1#0' with 'l-load assigned_value%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[46]: 'l-store-copy assigned_value%2#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[49]: 'v-load assigned_value%2#0' with 'l-load assigned_value%2#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[96]: 'l-store-copy assigned_value%3#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[99]: 'v-load assigned_value%3#0' with 'l-load assigned_value%3#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[113]: 'l-store-copy assigned_value%4#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[116]: 'v-load assigned_value%4#0' with 'l-load assigned_value%4#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[130]: 'l-store-copy assigned_value%5#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[133]: 'v-load assigned_value%5#0' with 'l-load assigned_value%5#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[45]: 'l-store-copy val_as_bytes%2#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[80]: 'v-load val_as_bytes%2#0' with 'l-load val_as_bytes%2#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[28]: 'l-store-copy val_as_bytes%1#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[70]: 'v-load val_as_bytes%1#0' with 'l-load val_as_bytes%1#0' +debug: Inserted mutate_tuple_items_and_reassign_block@0.ops[11]: 'l-store-copy val_as_bytes%0#0 0' +debug: Replaced mutate_tuple_items_and_reassign_block@0.ops[60]: 'v-load val_as_bytes%0#0' with 'l-load val_as_bytes%0#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@20.ops[3]: 'l-store-copy to_encode%5#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@20.ops[5]: 'v-load to_encode%5#0' with 'l-load to_encode%5#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@20.ops[7]: 'l-store-copy val_as_bytes%6#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@20.ops[9]: 'v-load val_as_bytes%6#0' with 'l-load val_as_bytes%6#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@20.ops[11]: 'l-store-copy assigned_value%6#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@20.ops[14]: 'v-load assigned_value%6#0' with 'l-load assigned_value%6#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@22.ops[3]: 'l-store-copy to_encode%6#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@22.ops[5]: 'v-load to_encode%6#0' with 'l-load to_encode%6#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@22.ops[7]: 'l-store-copy val_as_bytes%7#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@22.ops[9]: 'v-load val_as_bytes%7#0' with 'l-load val_as_bytes%7#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@22.ops[11]: 'l-store-copy assigned_value%7#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@22.ops[14]: 'v-load assigned_value%7#0' with 'l-load assigned_value%7#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@24.ops[3]: 'l-store-copy to_encode%7#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@24.ops[5]: 'v-load to_encode%7#0' with 'l-load to_encode%7#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@24.ops[7]: 'l-store-copy val_as_bytes%8#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@24.ops[9]: 'v-load val_as_bytes%8#0' with 'l-load val_as_bytes%8#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@24.ops[11]: 'l-store-copy assigned_value%8#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@24.ops[14]: 'v-load assigned_value%8#0' with 'l-load assigned_value%8#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[2]: 'l-store-copy reinterpret_biguint%3#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[4]: 'v-load reinterpret_biguint%3#0' with 'l-load reinterpret_biguint%3#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[7]: 'l-store-copy tmp%10#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[9]: 'v-load tmp%10#0' with 'l-load tmp%10#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[13]: 'l-store-copy reinterpret_biguint%4#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[15]: 'v-load reinterpret_biguint%4#0' with 'l-load reinterpret_biguint%4#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[18]: 'l-store-copy tmp%13#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[20]: 'v-load tmp%13#0' with 'l-load tmp%13#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[24]: 'l-store-copy reinterpret_biguint%5#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[26]: 'v-load reinterpret_biguint%5#0' with 'l-load reinterpret_biguint%5#0' +debug: Inserted mutate_tuple_items_and_reassign_after_if_else@26.ops[29]: 'l-store-copy tmp%16#0 0' +debug: Replaced mutate_tuple_items_and_reassign_after_if_else@26.ops[31]: 'v-load tmp%16#0' with 'l-load tmp%16#0' +debug: Found 4 edge set/s for test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign +debug: test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign f-stack entry: ['arrays.0%out#7', 'arrays.1%out#6', 'arrays.2%out#5', 'val_as_bytes%6#0', 'val_as_bytes%7#0', 'val_as_bytes%8#0'] +debug: test_cases.arc4_types.mutable_params.Arc4MutableParamsContract.mutate_tuple_items_and_reassign f-stack on first store: ['arrays.0%is_original#0', 'arrays.1%is_original#0', 'arrays.2%is_original#0', 'arrays.2#12', 'arrays.1#11', 'arrays.0#10'] debug: Output IR to arc4_types/out/Arc4DynamicStringArrayContract.ssa.ir info: optimizing test_cases.arc4_types.dynamic_string_array.Arc4DynamicStringArrayContract at level 1 debug: Begin optimization pass 1/100 @@ -19640,6 +21791,13 @@ info: Writing arc4_types/out/Arc4MutationContract.approval.bin info: Writing arc4_types/out/Arc4MutationContract.clear.bin info: Writing arc4_types/out/Arc4MutationContract.approval.puya.map info: Writing arc4_types/out/Arc4MutationContract.clear.puya.map +info: Writing arc4_types/out/MutableParams2.arc32.json +info: Writing arc4_types/out/MutableParams2.approval.teal +info: Writing arc4_types/out/MutableParams2.clear.teal +info: Writing arc4_types/out/MutableParams2.approval.bin +info: Writing arc4_types/out/MutableParams2.clear.bin +info: Writing arc4_types/out/MutableParams2.approval.puya.map +info: Writing arc4_types/out/MutableParams2.clear.puya.map info: Writing arc4_types/out/Arc4MutableParamsContract.approval.teal info: Writing arc4_types/out/Arc4MutableParamsContract.clear.teal info: Writing arc4_types/out/Arc4MutableParamsContract.approval.bin @@ -19689,4 +21847,5 @@ info: Writing arc4_types/out/Arc4StructsFromAnotherModule.approval.bin info: Writing arc4_types/out/Arc4StructsFromAnotherModule.clear.bin info: Writing arc4_types/out/Arc4StructsFromAnotherModule.approval.puya.map info: Writing arc4_types/out/Arc4StructsFromAnotherModule.clear.puya.map +info: writing arc4_types/out/client_MutableParams2.py info: writing arc4_types/out/client_Arc4DynamicStringArrayContract.py \ No newline at end of file diff --git a/tests/test_arc32.py b/tests/test_arc32.py index 48cfdd05ac..840d474130 100644 --- a/tests/test_arc32.py +++ b/tests/test_arc32.py @@ -617,6 +617,21 @@ def test_dynamic_array_of_string( assert xyz_raw_result.return_value == list("XYZ") +def test_array_rebinding( + algod_client: AlgodClient, + account: algokit_utils.Account, +) -> None: + app_spec = algokit_utils.ApplicationSpecification.from_json( + compile_arc32(TEST_CASES_DIR / "arc4_types/mutable_params2.py") + ) + app_client = algokit_utils.ApplicationClient(algod_client, app_spec, signer=account) + + create_response = app_client.create() + assert create_response.confirmed_round + + app_client.call("test_array_rebinding") + + def test_avm_types_in_abi(algod_client: AlgodClient, account: algokit_utils.Account) -> None: example = TEST_CASES_DIR / "avm_types_in_abi" / "contract.py" app_spec = algokit_utils.ApplicationSpecification.from_json(compile_arc32(example)) diff --git a/tests/test_expected_output/expected_errors.test b/tests/test_expected_output/expected_errors.test index 945651378c..2ba18e372b 100644 --- a/tests/test_expected_output/expected_errors.test +++ b/tests/test_expected_output/expected_errors.test @@ -101,22 +101,6 @@ def baddie2() -> None: tup[0].append(arc4.Byte(1)) - -## case: test_mutable_ref_param_reassignment_fails -from algopy import arc4 - -class Baddie(arc4.ARC4Contract): - @arc4.abimethod - def okay(self, arr: arc4.DynamicBytes) -> None: - # this is allowed because nothing calls okay except for the router - arr = arc4.DynamicBytes.from_bytes(arr.bytes) - self.not_okay(arr) - - @arc4.abimethod() - def not_okay(self, arr2: arc4.DynamicBytes) -> None: - arr2 = arc4.DynamicBytes.from_bytes(arr2.bytes) ## E: cannot reassign mutable parameter 'arr2' which is being passed by reference - arr2.append(arc4.Byte(1)) - ## case: test_mutable_ref_param_reassignment_in_tuple_fails from algopy import arc4 @@ -128,7 +112,7 @@ class Baddie(arc4.ARC4Contract): @arc4.abimethod() def not_okay(self, arr2: arc4.DynamicBytes) -> None: - (arr2, foo) = (arc4.DynamicBytes.from_bytes(arr2.bytes), arc4.UInt64(1)) ## E: cannot reassign mutable parameter 'arr2' which is being passed by reference + (arr2, foo) = (arc4.DynamicBytes.from_bytes(arr2.bytes), arc4.UInt64(1)) arr2.append(arc4.Byte(1)) assert foo From 0445005b012837a4a0ab742a2d692545a24cfa1a Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Fri, 1 Nov 2024 16:23:38 +0800 Subject: [PATCH 6/8] fix: raise an error when attempting to iterate a tuple of mutable values BREAKING CHANGE: iterating a tuple of mutable types will now raise an error as they cannot be copied --- src/puya/awst/validation/arc4_copy.py | 26 +++++++ src/puyapy/awst_build/eb/arc4/_base.py | 5 +- tests/test_expected_output/arc4.test | 3 +- .../test_expected_output/expected_errors.test | 70 ++++++++++++++++++- 4 files changed, 98 insertions(+), 6 deletions(-) diff --git a/src/puya/awst/validation/arc4_copy.py b/src/puya/awst/validation/arc4_copy.py index cc25a49771..a6ab9a9a63 100644 --- a/src/puya/awst/validation/arc4_copy.py +++ b/src/puya/awst/validation/arc4_copy.py @@ -44,10 +44,36 @@ def visit_tuple_expression(self, expr: awst_nodes.TupleExpression) -> None: _check_for_arc4_copy(item, "being passed to a tuple expression") def visit_for_in_loop(self, statement: awst_nodes.ForInLoop) -> None: + # statement.items is immediately checked before entering the for body + # so don't need to worry about preserving _for_items through multiple loops self._for_items = statement.items super().visit_for_in_loop(statement) self._for_items = None + # looping is essentially assigning so check sequence + sequence = statement.sequence + while isinstance(sequence, awst_nodes.Enumeration | awst_nodes.Reversed): + sequence = sequence.expr + if ( # mutable tuples cannot be iterated in a semantically correct way + isinstance(sequence.wtype, wtypes.WTuple) + and _is_referable_expression(sequence) + and _is_arc4_mutable(sequence.wtype) + ): + logger.error( + "tuple of mutable ARC4 values cannot be iterated", + location=sequence.source_location, + ) + elif ( # arrays of mutable types, must be modified and iterated by index + isinstance(sequence.wtype, wtypes.ARC4Array) + and _is_referable_expression(sequence) + and _is_arc4_mutable(sequence.wtype.element_type) + ): + logger.error( + "cannot directly iterate an ARC4 array of mutable objects," + " construct a for-loop over the indexes instead", + location=sequence.source_location, + ) + def visit_assignment_expression(self, expr: awst_nodes.AssignmentExpression) -> None: _check_assignment(expr.target, expr.value) expr.value.accept(self) diff --git a/src/puyapy/awst_build/eb/arc4/_base.py b/src/puyapy/awst_build/eb/arc4/_base.py index a779665c09..4a02657ddf 100644 --- a/src/puyapy/awst_build/eb/arc4/_base.py +++ b/src/puyapy/awst_build/eb/arc4/_base.py @@ -138,9 +138,8 @@ class _ARC4ArrayExpressionBuilder(BytesBackedInstanceExpressionBuilder[pytypes.A @typing.override def iterate(self) -> Expression: if not self.pytype.items.wtype.immutable: - logger.error( - "cannot directly iterate an ARC4 array of mutable objects," - " construct a for-loop over the indexes via urange(.length) instead", + logger.info( + "use `algopy.urange(.length)` to iterate by index", location=self.source_location, ) return self.resolve() diff --git a/tests/test_expected_output/arc4.test b/tests/test_expected_output/arc4.test index 0303692039..961a62b342 100644 --- a/tests/test_expected_output/arc4.test +++ b/tests/test_expected_output/arc4.test @@ -206,7 +206,8 @@ class Arc4CopyContract(arc4.ARC4Contract): # Can't create copies by iterating valid_array_of_arrays = arc4.DynamicArray(local_array.copy()) - for an_array in valid_array_of_arrays: ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes via urange(.length) instead + for an_array in valid_array_of_arrays: ## N: use `algopy.urange(.length)` to iterate by index \ + ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes instead assert an_array.length ## case: copy_arc4_struct diff --git a/tests/test_expected_output/expected_errors.test b/tests/test_expected_output/expected_errors.test index 2ba18e372b..d6781c09ee 100644 --- a/tests/test_expected_output/expected_errors.test +++ b/tests/test_expected_output/expected_errors.test @@ -83,7 +83,8 @@ def okay1() -> None: @subroutine def baddie1() -> None: arr_of_arr = arc4.DynamicArray[arc4.DynamicBytes]() - for arr in arr_of_arr: ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes via urange(.length) instead + for arr in arr_of_arr: ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes instead \ + ## N: use `algopy.urange(.length)` to iterate by index arr.append(arc4.Byte(1)) @@ -97,7 +98,8 @@ def okay2() -> None: @subroutine def baddie2() -> None: arr_of_tup_with_arr = arc4.DynamicArray[arc4.Tuple[arc4.DynamicBytes, arc4.UInt64]]() - for tup in arr_of_tup_with_arr: ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes via urange(.length) instead + for tup in arr_of_tup_with_arr: ## E: cannot directly iterate an ARC4 array of mutable objects, construct a for-loop over the indexes instead \ + ## N: use `algopy.urange(.length)` to iterate by index tup[0].append(arc4.Byte(1)) @@ -366,3 +368,67 @@ def unresolveable() -> None: one = UInt64(1) assert bool(op.bitlen(empty or one)) ## E: type unions are unsupported at this location bad = empty or one ## E: expression would produce a union type, which isn't supported unless evaluating a boolean condition + + +## case: iterate_tuple_mutable_types + +from algopy import * + + +class TupleIterationMutation(ARC4Contract): + + @arc4.abimethod() + def test_iteration_mutation(self, param: tuple[arc4.DynamicBytes, arc4.DynamicBytes, arc4.DynamicBytes]) -> None: + items = get_dynamic_bytes() + a, b, c = get_dynamic_bytes() + + # not ok as both item and items[n] refer to the same values + for item in items: ## E: tuple of mutable ARC4 values cannot be iterated + item.append(arc4.Byte()) + + for item in param: ## E: tuple of mutable ARC4 values cannot be iterated + item.append(arc4.Byte()) + + for item in (a, b, c): ## E: mutable reference to ARC4-encoded value must be copied using .copy() when being passed to a tuple expression + item.append(arc4.Byte()) + + for outer in Bytes(b" "): + for item in items: ## E: tuple of mutable ARC4 values cannot be iterated + item.append(arc4.Byte()) + + for item in items: ## E: tuple of mutable ARC4 values cannot be iterated + for inner in Bytes(b" "): + item.append(arc4.Byte()) + + for item in reversed(items): ## E: tuple of mutable ARC4 values cannot be iterated + item.append(arc4.Byte()) + + for idx, item in uenumerate(items): ## E: tuple of mutable ARC4 values cannot be iterated + item.append(arc4.Byte(idx + 1)) + + # scenarios that are ok as there is no other reference + for item in (a.copy(), b.copy(), c.copy()): + item.append(arc4.Byte()) + + for item in get_dynamic_bytes(): + item.append(arc4.Byte()) + + for outer in Bytes(b" "): + for item in get_dynamic_bytes(): + item.append(arc4.Byte()) + + for item in get_dynamic_bytes(): + for inner in Bytes(b" "): + item.append(arc4.Byte()) + + for item in reversed(get_dynamic_bytes()): + item.append(arc4.Byte()) + + for idx, item in uenumerate(get_dynamic_bytes()): + item.append(arc4.Byte(idx + 1)) + + + +@subroutine +def get_dynamic_bytes() -> tuple[arc4.DynamicBytes, arc4.DynamicBytes, arc4.DynamicBytes]: + return (arc4.DynamicBytes(), arc4.DynamicBytes(), arc4.DynamicBytes()) From 4bc4ebabe893ae3918a6ede07f9a617a130619af Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Wed, 6 Nov 2024 15:36:12 +0800 Subject: [PATCH 7/8] refactor: address review feedback --- src/puyapy/awst_build/eb/arc4/_base.py | 3 +++ src/puyapy/awst_build/eb/arc4/string.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/puyapy/awst_build/eb/arc4/_base.py b/src/puyapy/awst_build/eb/arc4/_base.py index 4a02657ddf..722ca7d19e 100644 --- a/src/puyapy/awst_build/eb/arc4/_base.py +++ b/src/puyapy/awst_build/eb/arc4/_base.py @@ -138,6 +138,9 @@ class _ARC4ArrayExpressionBuilder(BytesBackedInstanceExpressionBuilder[pytypes.A @typing.override def iterate(self) -> Expression: if not self.pytype.items.wtype.immutable: + # this case is an error raised during AWST validation + # adding a front end specific message here to compliment the error message + # raise across all front ends logger.info( "use `algopy.urange(.length)` to iterate by index", location=self.source_location, diff --git a/src/puyapy/awst_build/eb/arc4/string.py b/src/puyapy/awst_build/eb/arc4/string.py index 53cec51ab0..de9bfac6e8 100644 --- a/src/puyapy/awst_build/eb/arc4/string.py +++ b/src/puyapy/awst_build/eb/arc4/string.py @@ -103,10 +103,13 @@ def augmented_assignment( else: value = expect.argument_of_type_else_dummy(rhs, self.pytype).resolve() + # TODO: does this actually need to be a AugmentedAssignment node to ensure LHS is only + # evaluated once + lhs = self.single_eval().resolve_lvalue() return AssignmentStatement( - target=self.resolve_lvalue(), + target=lhs, value=ArrayConcat( - left=self.resolve(), + left=lhs, right=value, wtype=wtypes.arc4_string_alias, source_location=location, From 817338bca53d75a499093e0a2a226988d585a3c1 Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Thu, 7 Nov 2024 10:50:35 +0800 Subject: [PATCH 8/8] refactor: use BytesAugmentedAssignment for arc4.String --- src/puya/awst/nodes.py | 8 ++++++-- src/puya/ir/builder/main.py | 15 +++++++++++---- src/puyapy/awst_build/eb/arc4/string.py | 18 ++++++------------ test_cases/arc4_types/out/module.awst | 8 ++++---- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/puya/awst/nodes.py b/src/puya/awst/nodes.py index 32d421907f..004026f718 100644 --- a/src/puya/awst/nodes.py +++ b/src/puya/awst/nodes.py @@ -1337,11 +1337,15 @@ def accept(self, visitor: StatementVisitor[T]) -> T: @attrs.frozen class BytesAugmentedAssignment(Statement): target: Lvalue = attrs.field( - validator=[expression_has_wtype(wtypes.bytes_wtype, wtypes.string_wtype)] + validator=[ + expression_has_wtype(wtypes.bytes_wtype, wtypes.string_wtype, wtypes.arc4_string_alias) + ] ) op: BytesBinaryOperator value: Expression = attrs.field( - validator=[expression_has_wtype(wtypes.bytes_wtype, wtypes.string_wtype)] + validator=[ + expression_has_wtype(wtypes.bytes_wtype, wtypes.string_wtype, wtypes.arc4_string_alias) + ] ) @value.validator diff --git a/src/puya/ir/builder/main.py b/src/puya/ir/builder/main.py index 030251e0ec..e774089c66 100644 --- a/src/puya/ir/builder/main.py +++ b/src/puya/ir/builder/main.py @@ -1053,14 +1053,21 @@ def visit_biguint_augmented_assignment( def visit_bytes_augmented_assignment( self, statement: awst_nodes.BytesAugmentedAssignment ) -> TStatement: - target_value = self.visit_and_materialise_single(statement.target) - rhs = self.visit_and_materialise_single(statement.value) - expr = create_bytes_binary_op(statement.op, target_value, rhs, statement.source_location) + if statement.target.wtype == wtypes.arc4_string_alias: + value: ValueProvider = arc4.concat_values( + self.context, statement.target, statement.value, statement.source_location + ) + else: + target_value = self.visit_and_materialise_single(statement.target) + rhs = self.visit_and_materialise_single(statement.value) + value = create_bytes_binary_op( + statement.op, target_value, rhs, statement.source_location + ) handle_assignment( self.context, target=statement.target, - value=expr, + value=value, is_nested_update=False, assignment_location=statement.source_location, ) diff --git a/src/puyapy/awst_build/eb/arc4/string.py b/src/puyapy/awst_build/eb/arc4/string.py index de9bfac6e8..249a7fd8a3 100644 --- a/src/puyapy/awst_build/eb/arc4/string.py +++ b/src/puyapy/awst_build/eb/arc4/string.py @@ -8,7 +8,8 @@ ARC4Decode, ARC4Encode, ArrayConcat, - AssignmentStatement, + BytesAugmentedAssignment, + BytesBinaryOperator, Expression, Statement, StringConstant, @@ -103,17 +104,10 @@ def augmented_assignment( else: value = expect.argument_of_type_else_dummy(rhs, self.pytype).resolve() - # TODO: does this actually need to be a AugmentedAssignment node to ensure LHS is only - # evaluated once - lhs = self.single_eval().resolve_lvalue() - return AssignmentStatement( - target=lhs, - value=ArrayConcat( - left=lhs, - right=value, - wtype=wtypes.arc4_string_alias, - source_location=location, - ), + return BytesAugmentedAssignment( + target=self.resolve_lvalue(), + op=BytesBinaryOperator.add, + value=value, source_location=location, ) diff --git a/test_cases/arc4_types/out/module.awst b/test_cases/arc4_types/out/module.awst index 595ae56932..cf598578a9 100644 --- a/test_cases/arc4_types/out/module.awst +++ b/test_cases/arc4_types/out/module.awst @@ -114,12 +114,12 @@ contract Arc4StringTypesContract world: arc4.dynamic_array = arc4_encode('World!', arc4.dynamic_array) assert(arc4_encode('Hello World!', arc4.dynamic_array) == hello + space + world) thing: arc4.dynamic_array = arc4_encode('hi', arc4.dynamic_array) - thing: arc4.dynamic_array = thing + thing + thing += thing assert(thing == arc4_encode('hihi', arc4.dynamic_array)) value: arc4.dynamic_array = arc4_encode('a', arc4.dynamic_array) + arc4_encode('b', arc4.dynamic_array) + arc4_encode('cd', arc4.dynamic_array) - value: arc4.dynamic_array = value + arc4_encode('e', arc4.dynamic_array) - value: arc4.dynamic_array = value + arc4_encode('f', arc4.dynamic_array) - value: arc4.dynamic_array = value + arc4_encode('g', arc4.dynamic_array) + value += arc4_encode('e', arc4.dynamic_array) + value += arc4_encode('f', arc4.dynamic_array) + value += arc4_encode('g', arc4.dynamic_array) assert(arc4_encode('abcdefg', arc4.dynamic_array) == value) assert(arc4_decode(arc4_encode('', arc4.dynamic_array), string) == '') assert(arc4_decode(arc4_encode('hello', arc4.dynamic_array), string) == 'hello')